2010-06-30 6 views
7

संभावित डुप्लिकेट:
Is it possible to decrypt md5 hashes?
Is it possible to reverse a sha1?क्या एक निर्धारक हैशिंग फ़ंक्शन आसानी से डिक्रिप्ट किया जा सकता है?

मैं इस प्रश्न पूछा: working with HUGE spreadsheet

और एक महान जवाब मिला है और मैं सलाह का पालन किया। मैं इस प्रयोग किया है: http://splinter.com.au/blog/?p=86

और मैंने एक Excel स्प्रैडशीट

में एक कॉलम में लगभग 300,000 विभिन्न तत्वों टुकड़ों में बांटा जब से तुम कर सकते हैं:

=SHA1HASH('The quick brown fox jumps over the lazy dog') 

और तुम वापस पाने चाहते हैं:

2fd4e1c67a2d28fced849ee1bb76e7391b93eb12 

क्या आप पीछे भी नहीं जा सकते?

मैं कह रहा हूं कि क्या यह एक ही पाठ को हर बार एक ही तरीके से एन्क्रिप्ट करता है, तो बिंदु क्या है?

यदि आप हैश एल्गोरिदम जानते हैं, तो क्या पीछे की ओर जाना संभव है?

क्या आप कृपया मुझे बता सकते हैं कि हैशिंग कैसे काम करती है? आप 20 जीबी को 40 वर्ण हैश में कैसे परिवर्तित कर सकते हैं? क्या 20 जीबी हार्ड्राइव हैश को लंबा समय लगता है?

+5

इस प्रश्न का बेहतर शीर्षक "क्या हैश आसानी से डिक्रिप्ट किया जा सकता है?" –

+1

किसने कहा कि आप पीछे की तरफ जा सकते हैं? – kennytm

+3

क्या आप पिछड़े जाने की कोशिश कर रहे थे? क्या आपको एक ऐसा कार्य मिला है जो वास्तव में * पीछे * जाता है? –

उत्तर

8

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

यही कारण है कि हैशिंग की दूसरी विशेषता का आविष्कार किया गया था। इसे नमकीन कहा जाता है। साल्टिंग मूल रूप से यह है; आप नमक बनाते हैं, फिर नमक का उपयोग करके अपने डेटा को संशोधित करें। उदाहरण के लिए, कहें कि आपके पास एसएसएन 123-45-678 9 था। आप "MOONBEAM" स्ट्रिंग के साथ इसे नमक कर सकते हैं। हैशिंग के लिए आपकी नई स्ट्रिंग "123-45-6789MOONBEAM"

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

अंत में, यदि आप सब कुछ के लिए केवल 1 नमक का उपयोग करते हैं, और नमक को देखने में सक्षम होने के बजाय इसे गुप्त रखें, और एसएसएन वृद्धि को चलाकर संबंधित एसएसएन उत्पन्न करें + नमक 100 मिलियन बार और मैच चुनना, उनके पास है एसएसएन को पुनः प्राप्त करने के लिए बहुत अधिक काम करने के लिए। ऐसा इसलिए है क्योंकि 100 मिलियन एसएसएन संख्याओं में अपेक्षाकृत कम मात्रा में एन्ट्रॉपी होती है। (10^9 संयोजन)। अपने नमक जोड़ने और यह गुप्त रखने के बजाय सिर्फ

SHA1HASH(111-11-1111) -> check hash match 
SHA1HASH(111-11-1112) -> check hash match 
SHA1HASH(111-11-1113) -> check hash match 

चलाकर वे

SHA1HASH(111-11-1111a) -> check hash match 
SHA1HASH(111-11-1111b) -> check hash match 
SHA1HASH(111-11-1111c) -> check hash match 
... 
SHA1HASH(111-11-1111azdfg) -> check hash match 
SHA1HASH(111-11-1111azdfh) -> check hash match 
.... 
SHA1HASH(111-11-1111zzzzzzzzzzzzzzzz) -> check hash match 
SHA1HASH(111-11-1112a) -> check hash match 
SHA1HASH(111-11-1112b) -> check hash match 

चलाने के लिए .. और इतने पर जब तक वे अंततः पर

SHA1HASH(123-45-6789MOONBEAM) -> check hash match 

को पाने के लिए होता है आखिरकार उन्होंने एसएसएन + एसएएलटी

को क्रैक करने का प्रबंधन किया था, वे यह भी नहीं जानते कि कितने अक्षर एल ओएनजी आपका नमक है तो यह 10^(आपके नमक के पात्रों की संख्या) 1 एसएसएन प्राप्त करने के लिए उनके लिए अधिक काम करता है, अकेले ही पूरी टेबल प्राप्त करें।

+0

वाह यह एक महान बिंदु है !! –

+7

एक नमक _not_ एक रहस्य है! नमक को हैश मूल्य में जोड़ा जाना चाहिए, और शब्दकोश हमलों के लिए प्रीकंप्यूशन को रोकने के लिए सेवा प्रदान की जानी चाहिए। आप जो संदर्भ दे रहे हैं वह एचएमएसी की तरह है - इस मामले में आपको इस विज्ञापन-प्रसार योजना के बजाय उचित एचएमएसी का उपयोग करना चाहिए। –

+0

एक नमक * एक रहस्य नहीं है, लेकिन एक नमक * गुप्त हो सकता है। मैं वास्तव में इस लड़के की विशेष समस्या के समाधान को तैयार करने की कोशिश कर रहा हूं। एसएसएन नंबर ले लो। यदि आप जानते हैं कि यह एक एसएसएन नंबर है, और आप स्प्रेड शीट में नमक देखते हैं, तो आप नमक और बिंगो का उपयोग करके सभी एसएसएन के लिए 100,000,000 SHA1 हैश चलाते हैं, आपके पास एसएसएन है। नमक को गुप्त रखें और आपको वह समस्या नहीं होगी। – Zak

23

जनरल जवाब

एक cryptographic hash function आसानी से वापस नहीं लिया जा सकता है। यही कारण है कि इसे कभी-कभी एक-तरफा फ़ंक्शन भी कहा जाता है। वहां से कोई वापसी नहीं है।

आपको इस 'डिक्रिप्शन' को कॉल करने के बारे में भी सावधान रहना चाहिए। हैशिंग एन्क्रिप्शन के समान नहीं है। संभव हैश मान का सेट आमतौर पर संभावित इनपुट के सेट से छोटा होता है, इसलिए एक ही आउटपुट में कई इनपुट मैप होते हैं।

किसी भी हैश फ़ंक्शन के लिए आउटपुट दिया गया है, जिसे आप नहीं जानते कि इस विशेष आउटपुट को उत्पन्न करने के लिए कितने इनपुट का उपयोग किया गया था।

एसएचए 1 जैसे क्रिप्टोग्राफिक हैंश के लिए एक इनपुट भी प्राप्त करना बहुत मुश्किल है जो आउटपुट उत्पन्न करता है।

क्रिप्टोग्राफ़िक हैश को रिवर्स करने का सबसे आसान तरीका इनपुट अनुमान लगाने के लिए है और यह देखने के लिए है कि यह सही आउटपुट देता है या नहीं। यदि आप गलत हैं, तो फिर से अनुमान लगाएं। एक और तरीका rainbow tables का उपयोग करना है।

हैशिंग का उपयोग कर संभव इनपुट मानों की अपेक्षाकृत छोटी संख्या की वजह से SSNs

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

+0

यदि आप हैश एल्गोरिदम जानते हैं, तो क्या पीछे की ओर जाना संभव है? –

+4

नहीं, हैश एल्गोरिदम के साथ संभव नहीं है। – blockhead

+2

+1, एक बार जब आप काला हो जाते हैं तो – VoodooChild

2

एक अच्छा हैश एक तरीका है, जिसका अर्थ है कि आपको पीछे की ओर जाने में सक्षम नहीं होना चाहिए। बिंदु स्ट्रिंग को प्रकट किए बिना एक स्ट्रिंग की कुंजी प्रदान करना है। उदाहरण के लिए, पासवर्ड संग्रह किए बिना पासवर्ड से मिलान करने का यह एक अच्छा तरीका है। इसके बजाय, आप एक हैश स्टोर करते हैं और इनपुट के परिणामी हैश की तुलना करते हैं।

+0

यदि आप हैश एल्गोरिदम जानते हैं, तो क्या पीछे जाना संभव है? –

+0

संभवतः, लेकिन कई इसे बहुत मुश्किल बनाने के लिए डिज़ाइन किए गए हैं। कुछ एल्गोरिदम अलग इनपुट के लिए एक ही हैश उत्पन्न करते हैं, और कई, यदि नहीं, तो इनपुट की लंबाई पर भरोसा करते हैं। आपको उस डेटा पर वापस जाने के बारे में बहुत कुछ पता होना चाहिए। –

+1

यह "सामान्य" हैश फ़ंक्शन के बीच का अंतर है, जैसे कि आप एक अजगर मानचित्र या java.util.HashMap और क्रिप्टोग्राफ़िक हैश फ़ंक्शन SHA1 जैसे उपयोग करेंगे। सामान्य हैश फ़ंक्शन अधिकतर इनपुट में बिट्स (हैश आउटपुट की पूरी श्रृंखला पर कवरेज) और दक्षता फैलाने के लिए अनुकूलित किए जाते हैं। एक क्रिप्टोग्राफिक हैश भी गैर-परिवर्तनीय बाधा को जोड़ता है, दक्षता के साथ दूसरी क्रम की बाधा के रूप में। –

5

एन्क्रिप्टिंग और हैशिंग दो अलग-अलग चीजें हैं।

हैशिंग बस स्ट्रिंग को एक संख्या में पचता है। एन्क्रिप्शन स्ट्रिंग की सामग्री को संरक्षित करता है ताकि बाद में इसे डिक्रिप्ट किया जा सके। हैश से मूल स्ट्रिंग प्राप्त करने से कोई विधि नहीं है। सामग्री सिर्फ वहां नहीं है।

+0

'अगर आपको हैश से मेल खाने वाले सभी तार मिल गए हैं, तो उनके माध्यम से ब्राउज़ किया गया है। –

+1

मैं कोई गणित आदमी नहीं हूं लेकिन क्या वह अनंत तार नहीं होगा? –

3

नहीं। हैश का बिंदु यह है कि यह एक तरह से एन्क्रिप्शन है (जैसा कि दूसरे ने इंगित किया है, यह वास्तव में "एन्क्रिप्शन" नहीं है, लेकिन यहां मेरे साथ रहें)। सिद्धांत, सिद्धांत रूप में, "टकराव" की एक छोटी संभावनाएं होती हैं, जब दो या दो से अधिक स्ट्रिंग एक ही हैश लौटाती है। लेकिन यह आमतौर पर इस नकारात्मक पक्ष के लायक है।

17

एक क्रिप्टोग्राफिक हैश के पूरे मुद्दे है कि आप यह डिक्रिप्ट नहीं कर सकते हैं और है कि यह एन्क्रिप्ट उसी तरह हर बार करता है।

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

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

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

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

+0

यह एक अच्छा जवाब है! धन्यवाद। यदि आप हैश एल्गोरिदम जानते हैं, तो क्या पीछे जाना संभव है? –

+0

नहीं, आप पीछे नहीं जा सकते, यह पूरा बिंदु है। इसका कारण यह है कि हैशिंग जानकारी खो देता है। मैंने इसे अपने जवाब में संपादित किया। "हैशिंग जानकारी खो देता है" के लिए –

+1

+1, यही कारण है कि आप वापस नहीं जा सकते! – FrustratedWithFormsDesigner

2

सं।कम से कम आसानी से नहीं।

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

7

नहीं, आप पीछे नहीं जा सकते हैं क्योंकि हैशिंग फ़ंक्शन द्वारा पर्याप्त जानकारी संरक्षित नहीं है।

आप इसके बारे में सोच सकते हैं कि हैश फ़ंक्शन मूल पाठ को एक, विशाल, संख्या में मैपिंग कर रहा है। यह एक ही नंबर के रूप में भी अच्छी तरह से अन्य ग्रंथों को मैप किया जा सकता है, हालांकि एक अच्छा हैश फंक्शन कुछ टकराव होगा:

alt text

तो मूल संदेश तो एन्क्रिप्टेड रहे थे हाँ, तुम वापस जा सकते हैं।

1

कि यह एक ही पाठ को उसी तरह से एन्क्रिप्ट करता है जब हर बार हैश का पूरा बिंदु होता है। यह एक विशेषता है।

यदि मेरे पास पासवर्ड के हैंश का डेटाबेस है, तो मैं जांच कर सकता हूं कि आपने इसे सही तरीके से दर्ज किया है और यह देखकर कि हैश आपके लिए डेटाबेस में क्या है। लेकिन अगर किसी ने हैश के अपने डेटाबेस को चुरा लिया है, तो वे यह पता लगाने में सक्षम नहीं होंगे कि आपका पासवर्ड क्या है जब तक कि वे गलती से उस सादे पाठ पर ठोकर खाएंगे जो उस मूल्य को है।

1

क्रिप्टोग्राफी में इसे डाइजेस्ट कहा जाता है। एक क्रिप्टोग्राफिक रूप से मजबूत पाचन कुछ अतिरिक्त ज्ञान के बिना पाचन मूल्य के आधार पर स्रोत टेक्स्ट प्राप्त करने की अनुमति नहीं देता है। एक पाचन मूल्य एक ही पाठ के लिए समान होता है, इसलिए आप पाठ की पचाने की गणना कर सकते हैं और इसे प्रकाशित पाचन के साथ तुलना कर सकते हैं। एक लोकप्रिय एप्लिकेशन पासवर्ड सत्यापन है, इसलिए आप पासवर्ड के बजाय पाचन को बचा सकते हैं। यह निश्चित रूप से एक शब्दकोश हमले के लिए प्रवण है जिसे आपने पहले ही खोजा है, और यही कारण है कि पासवर्ड के लिए शब्दकोष शब्दों का उपयोग न करने की दृढ़ता से अनुशंसा की जाती है।

2

नहीं, आप वापस नहीं जा सकते हैं। गणना करें कि आपके पास कितने अलग हैंश हैं। अब गिनें कि आपके पास कितने अलग तार हो सकते हैं। पहला सीमित है, दूसरा अनंत है। बहुत सारे हैं (असीमित रूप से, सटीक होने के लिए) स्ट्रिंग्स जिनमें एक ही SHA1 योग है। मुद्दा यह है कि, दो ग्रंथों को ढूंढना बहुत मुश्किल है, जिनके पास एक ही हैश है।

आप कुछ कम करने के रूप में हैशिंग के बारे में सोच सकते हैं। उदाहरण के लिए एक हैशिंग फ़ंक्शन लें जो स्ट्रिंग में अक्षरों के सभी ASCII कोडों को बताता है। आप यह नहीं बता सकते कि क्या हैशिंग से पहले क्या था, बस अक्षरों के ASCII कोडों के योग को जानना। यह SHA1 के समान है, लेकिन अधिक जटिल है।

हैशिंग का बिंदु कुछ एन्क्रिप्ट नहीं करना है। हैशिंग का मुद्दा कुछ कम करना है, ताकि यह जांच कर सके कि दो चीजें समान हैं या नहीं। अब आप कैसे कह सकते हैं कि दो चीजें वास्तव में वही हैं यदि आप जानते हैं कि बहुत सी चीजों में एक ही हैश है? ठीक है, आप नहीं कर सकते। आप बस मानते हैं कि यह इतना दुर्लभ है कि ऐसा नहीं होगा।

लेकिन हैशिंग केवल जांच के बारे में नहीं है, क्योंकि हैश का उपयोग करके समानता की जांच आमतौर पर केवल पुष्टि/सत्यापन के लिए उपयोग की जाती है और यह निर्धारित नहीं है। यदि आप देखते हैं कि हैंश एक जैसे हैं, तो किसी विशेष हैशिंग फ़ंक्शन के पैरामीटर पर आधारित, आप अनुमान लगा सकते हैं कि हैश ऑब्जेक्ट्स वास्तव में वही हैं।

और यही कारण है कि एक हैशिंग फ़ंक्शन हमेशा एक ही ऑब्जेक्ट के लिए समान परिणाम उत्पन्न करता है, हैशिंग फ़ंक्शन की सबसे महत्वपूर्ण विशेषता है। यह आपको वस्तुओं की पुष्टि और तुलना करने देता है।

संबंधित मुद्दे