एन्क्रिप्शन उलट नहीं किया जा सकता है?


9

मैं इस धारणा के तहत हूं कि एक एन्क्रिप्टेड स्ट्रिंग को डिक्रिप्ट नहीं किया जा सकता है, इसलिए मूल मूल्य हमेशा के लिए खो जाता है।

हालाँकि, यदि निम्न स्ट्रिंग हमेशा "डोमिक" (मेरा नाम) के बराबर होती है , तो इसे रिवर्स करने का कोई तार्किक तरीका नहीं हो सकता है; जैसा कि यह यादृच्छिक नहीं है और न ही यह तारीख / समय पर आधारित है, लेकिन इसकी एक तार्किक विधि है?

0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=

कोई फर्क नहीं पड़ता कि मैं "डोमिक" (स्ट्रिंग) को कितनी बार एन्क्रिप्ट करता हूं, यह हमेशा ऊपर के बराबर होता है। तो, वहाँ एक स्ट्रिंग की तरह डिक्रिप्ट करने के लिए कोई रास्ता नहीं होना चाहिए?

मैं किस बारे में बात कर रहा हूं इसका उदाहरण:

public string EncryptPassword(string password)
{
    return Convert.ToBase64String(
        System.Security.Cryptography.SHA256.Create()
        .ComputeHash(Encoding.UTF8.GetBytes(password)));
}

3
क्या आप किसी नाम के क्रिप्टोग्राफ़िक हैश के बारे में बात कर रहे हैं (अक्सर पासवर्ड में उपयोग किया जाता है)? या एन्क्रिप्शन (जिसे किसी अधिकृत व्यक्ति द्वारा डिक्रिप्ट किया जाना है)?

11
SHA256एक क्रिप्टोग्राफिक हैश फ़ंक्शन है , एन्क्रिप्शन एल्गोरिथम नहीं। यह एक तरह से कार्य है

1
अप्रचलित अस्वीकरण: नमक हैश ( en.wikipedia.org/wiki/Salt_(cryptography) )। इसके अलावा SHA256 उदाहरण के लिए GPUs का उपयोग करते हुए जानवर बल के हमलों के साथ समस्या नहीं है बहुत तेजी से हो जाता है। यह PBKDF2 या स्क्रीप्ट जैसे कुछ का उपयोग करने की सिफारिश की जाएगी।
मैकीज पीचोटका

7
हाशिंग एक मांस की चक्की की तरह है। आप एक गाय को गोमांस में बदल सकते हैं, लेकिन दूसरे तरीके से नहीं।
नील मैकगिगन

1
क्या आप सार्वजनिक / निजी-कुंजी एन्क्रिप्शन से भ्रमित हैं? यदि कोई व्यक्ति आपकी सार्वजनिक कुंजी के साथ किसी संदेश को एन्क्रिप्ट करता है, तो वह स्वयं उस संदेश को डिक्रिप्ट नहीं कर सकता है। केवल आप इसे डिक्रिप्ट कर सकते हैं - और शायद एनएसए, मोसाद, एफएसबी और टिरोलर जाइम्डिएंस्ट।
ott--

जवाबों:


39

एन्क्रिप्शन हमेशा उल्टा किया जा सकता है। एन्क्रिप्शन का उद्देश्य एक संदेश लेना है और इसे एक गुप्त कुंजी के साथ एनकोड करना है ताकि केवल दूसरा व्यक्ति जिसके पास कुंजी है वह एन्क्रिप्शन को उलट सके और संदेश पढ़ सके।

आप यहां जो देख रहे हैं वह हैशिंग है , जो एन्क्रिप्शन के समान नहीं है, हालांकि क्रिप्टोग्राफिक तकनीकों का उपयोग अक्सर हैश को लागू करने में किया जाता है। एक हैश का विचार यह है कि यह एक पुराने मान के लिए एक नया मान बनाने के लिए जटिल गणितीय तकनीकों का उपयोग करता है, जो कि दोहराए जाने योग्य है। कोई कुंजी नहीं है, और इसका मतलब उलट नहीं है। एक क्रिप्टोग्राफिक रूप से मजबूत हैश गणितीय संपत्ति के साथ बनाया गया है, अगर आपके पास मूल्य है Aजिसका हैश मूल्य है B, तो यह बहुत मुश्किल है, जानबूझकर एक और मूल्य बनाने के लिए Cजो हैश भी करता है B

हैशिंग को प्रतिवर्ती होने की आवश्यकता नहीं है, क्योंकि वे प्रमाणीकरण के लिए उपयोग किए जाते हैं। यदि आप मुझे एक उपयोगकर्ता नाम और एक पासवर्ड देते हैं, तो आप वास्तव में मुझे उस पासवर्ड को अपने डेटाबेस में संग्रहीत नहीं करना चाहते हैं, क्योंकि यदि कोई व्यक्ति हैक करता है और मेरे डेटाबेस तक पहुंच प्राप्त करता है, तो वे आपके पासवर्ड का एक हिस्सा प्राप्त कर सकते हैं! इसलिए इसके बजाय, मैं डेटाबेस में आपके पासवर्ड का हैश स्टोर करूंगा । फिर जब आप लॉग इन करते हैं, तो मैं यह देखने के लिए जांच करता हूं कि क्या कोई उपयोगकर्ता नाम है जो आपके मेल से, आपके द्वारा भेजे गए पासवर्ड के हैश से मेल खाने वाले पासवर्ड के साथ मेल खाता है, और यदि आप प्रमाणित हैं, क्योंकि हैश टक्कर बनाना बहुत मुश्किल है ( एक अच्छे हैश के साथ दो मान जो समान मान के पास है), इसलिए मैं लगभग पूरी तरह से निश्चित हूं कि आपके द्वारा उपयोग किया गया पासवर्ड सही है।

एक मजबूत क्रिप्टोग्राफिक हैश की अन्य संपत्ति यह है कि इसे उल्टा करना बहुत मुश्किल है। आप जानते हैं कि मूल्य 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE="प्रमुख" के लिए हैश है, क्योंकि आपने इसे अभी काम किया है, लेकिन अगर आप यह नहीं जानते हैं, और नहीं जानते कि कहां से शुरू करना है, और आप सभी थे 0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=, तो यह सचमुच आपको अरबों में ले जा सकता है। वर्षों से यह पता लगाने के लिए कि मूल "डोमिक" था, अगर हैश अच्छा है। पासवर्ड की चोरी हो जाने की स्थिति में, संपार्श्विक क्षति को रोकने के लिए यह उपयोगी है।


2
जब तक मुझे हैश मैच नहीं मिला, क्या मैं केवल ज्ञात शब्दों और लूप की सूची नहीं ले सकता था? क्या यह है कि वेबसाइटें आपके पासवर्ड में अपरकेस अक्षर और संख्याओं को जोड़कर उन्हें अधिक सुरक्षित बनाने का सुझाव देती हैं?
user1477388

15
@ user1477388: हां, यही कारण है कि वेबसाइटें सुझाव देती हैं। यह हैशेड पासवर्ड पर हमला करने का एक जाना-माना तरीका है: इसे स्पष्ट कारणों के लिए एक "डिक्शनरी अटैक" कहा जाता है, और जो शब्द डिक्शनरी में नहीं हैं, उनके खिलाफ सुरक्षित होने के लिए एक महत्वपूर्ण कदम है ..
मेसन व्हीलर

1
ऐसा लगता है कि मेरी "अक्षमता के लिए कुछ अच्छी अंतर्दृष्टि है कि यह विश्वास करने के लिए कि ये किसी भी तरह से उलट नहीं हो सकते हैं" Security.stackexchange.com/questions/11717/ ... ऐसा नहीं है कि मुझे उन्हें उलटने की कोई आवश्यकता है / नहीं; मैं सिर्फ उत्सुक हूँ।
user1477388

3
एक अन्य सुझाव है कि हैशेड से पहले प्रत्येक पासवर्ड में कुछ अनूठा जोड़ना है। एक-वर्ण पासवर्ड अंतर पूरी तरह से अलग हैश बनाता है, यह विचार कि आपके सभी हैश परिणाम अद्वितीय होंगे। अन्यथा, यदि कोई हैकर "पासवर्ड -123123" शब्द के लिए हैश का पता लगाता है, तो वे उस विशेष हैश के साथ सभी उपयोगकर्ता नाम के खिलाफ उपयोग करना जानते हैं। ऐसा लगता है कि आपके पास इस तरह की चीज के लिए एक अच्छा सिर है, हालांकि, इतनी अच्छी किस्मत।
कटाना ३१४

1
@MasonWheeler: ऐसे शब्दों का उपयोग करना जो शब्दकोष में नहीं हैं, वास्तव में आवश्यक नहीं है, विशेष रूप से यह देखते हुए कि एक विशिष्ट हमले में प्रयुक्त "शब्दकोश" ऑक्सफोर्ड शब्दकोश जैसा कुछ नहीं है, बल्कि अक्सर पासवर्ड में उपयोग किए जाने वाले तार की एक सूची है। । इन शब्दों से बचने की कोशिश करने के बजाय, 2000 की सूची से 5 यादृच्छिक शब्दों को चुनना बेहतर होगा, या ऐसे शब्द: ऐसा पासफ़्रेज़, भले ही 2000-शब्द का शब्दकोश ज्ञात हो, लगभग 100 गुना अधिक समय लगता है- 64 में से 8 यादृच्छिक वर्णों से बल।
तदमर्स

9

आप जो कर रहे हैं वह "एन्क्रिप्शन" नहीं है, प्रति से; यह "हैशिंग" है। दो के बीच मुख्य अंतर यह है कि एन्क्रिप्शन है है , जबकि हैशिंग किसी भी पहली जगह में मूल संदेश को जानने के अलावा अन्य परिस्थिति में उल्टा करने के लिए बेहद मुश्किल डिज़ाइन किया गया है आसानी से उलटने (बेशक सही कुंजी के साथ),।

सिद्धांत रूप में, हैश एक "यादृच्छिक ओरेकल" का अनुकरण करता है, एक काल्पनिक स्मृति के साथ एक काल्पनिक होम्युकुलस और कोई ऊपरी श्रेणी की सीमा के साथ पूरी तरह से अद्वितीय, पूरी तरह से यादृच्छिक संख्या उत्पन्न करने का एक तरीका है। आप इस छोटे आदमी को एक संदेश देंगे, और दो चीजों में से एक होगा; या तो उसने पहले कभी संदेश नहीं देखा है, जिस स्थिति में वह एक नया रैंडम नंबर जेनरेट करता है और जो आपको डाइजेस्ट के रूप में देता है, या उसने वह गड़बड़ी पहले देखी है, और इसलिए वह याद रखता है और आपको वह नंबर देता है जो उसने उसे देखा था। पहली बार। उस सैद्धांतिक मॉडल में, एक संदेश और इसके पाचन के बीच शून्य संबंध है, और आरएनजी से दो बार दिखाई देने वाले एक भी संख्या के साथ टकराव की कोई संभावना नहीं है।

दुर्भाग्य से, हमारे पास एक आदर्श यादृच्छिक ओरेकल नहीं है; डिजिटल कार्यान्वयन के लिए विचार की व्यावहारिक बाध्यता है, जैसे कि कुशलता से स्टोर करने के लिए ओरेकल की क्षमता और कुशलता से हर संदेश को कभी भी कहीं भी किसी को भी याद किया जाता है, और क्लाइंट की संख्या एक संख्या को स्वीकार करने की क्षमता है जो सैकड़ों या हजारों दशमलव अंक हो सकते हैं। लंबाई में। इसके बजाय, हमारे पास हैश फ़ंक्शंस हैं, जो अपरिवर्तनीय (एक तरफ़ा) गणितीय कार्य हैं जो संदेश पर काम करते हैं, एक स्पष्ट परिवर्तन के साथ एक निर्धारक परिवर्तन (एक ही संदेश => एक ही हैश) बनाने के लिएहैश और मूल संदेश के बीच संबंध। जैसा कि टिप्पणियों में उल्लेख किया गया है, संदेश में व्यवस्थित परिवर्तन करके उत्पादित हैश मूल्य के लिए कोई अनुमानित परिवर्तन नहीं होना चाहिए; आदर्श रूप से, प्रत्येक बिट डाइजेस्ट को बदलने का 50% मौका होगा, संदेश के एक बिट में बदलाव को देखते हुए।

एक हैश फ़ंक्शन के लिए कई उपयोग हैं; वे सादे सत्यापन को जानने के लिए दोनों पक्षों की आवश्यकता के बिना चुनौती सत्यापन के लिए उपयोग करते हैं (पासवर्ड की तरह लॉगिन क्रेडेंशियल्स पर विचार करें), और वे यह पुष्टि करने के लिए चेकसम के रूप में उपयोग किए जाते हैं कि संदेश के साथ छेड़छाड़ या दूषित नहीं किया गया है। वे तथाकथित "काम के सबूत" परिदृश्यों में भी उपयोग किए जाते हैं; कम्प्यूटेशनल कार्य जिन्हें पूरा करना मुश्किल है लेकिन सत्यापित करना आसान है।

यदि आप कभी भी किसी संदेश (किसी भी संदेश) को उत्पन्न करने के लिए SHA256 हैश डाइजेस्ट को कुशलतापूर्वक रिवर्स करने का एक तरीका ढूंढते हैं, तो उस हैश का परिणाम होगा, यह प्रदर्शन द्वारा एक सबूत होगा कि वास्तव में हैश मूल रूप से टूट गया है। SHA256 है, वास्तव में, सुरक्षित माना जाता है, जिसका अर्थ है कि कोई दस्तावेज विधि नहीं है, चाहे कितना भी व्यावहारिक हो, एक हैश डाइजेस्ट के साथ शुरू करने और एक टकराने वाले संदेश का उत्पादन करने के लिए बस हर संभावना की कोशिश करने की तुलना में कम काम की आवश्यकता होती है (जो SHA-256 के लिए आदर्श रूप से 2 है ^ 256 ~ = 10 ^ 77 संभावनाएं)।


यह भी ध्यान देने योग्य हो सकता है कि एक आदर्श हैश फ़ंक्शन में, इनपुट में एक-बिट परिवर्तन के परिणामस्वरूप आउटपुट बिट्स का 50% परिवर्तन होना चाहिए। इसे हिमस्खलन प्रभाव कहा जाता है
एक CVn

2
@ माइकलकॉर्जलिंग: सटीक रूप से कहा जाए, तो प्रत्येक को 50% संभावना के साथ प्रत्येक बिट को बदलने की उम्मीद करनी चाहिए, जो औसतन 50% बिट्स बदलने की अपेक्षा (लेकिन तात्पर्य) अलग है।
डिट्रिच एप्प जू Diet

@DietrichEpp वास्तव में, और विकिपीडिया लेख मैं जुड़ा हुआ है कि स्पष्ट करता है, लेकिन अंत-उपयोगकर्ता के लिए दो आदानों के बीच परिवर्तित बिट्स की संख्या निर्धारित करना आसान है।
बजे एक CVn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.