क्या दो अलग-अलग तार एक ही MD5 हैश कोड उत्पन्न कर सकते हैं?


92

हमारी प्रत्येक बाइनरी संपत्ति के लिए हम एक एमडी 5 हैश उत्पन्न करते हैं। इसका उपयोग यह जांचने के लिए किया जाता है कि हमारे आवेदन में पहले से ही एक निश्चित बाइनरी एसेट है या नहीं। लेकिन क्या यह संभव है कि दो अलग-अलग बाइनरी संपत्ति एक ही एमडी 5 हैश उत्पन्न करें। तो क्या यह संभव है कि दो अलग-अलग तार एक ही एमडी 5 हैश उत्पन्न करें?

जवाबों:


93

अरबों की संपत्ति के एक सेट के लिए, यादृच्छिक टकराव की संभावना लापरवाही से छोटी है - कुछ भी नहीं है जिसके बारे में आपको चिंता नहीं करनी चाहिए। जन्मदिन के विरोधाभास को ध्यान में रखते हुए , 2 ^ 64 (या 18,446,744,073,709,551,616) संपत्ति का एक सेट दिया गया, इस सेट के भीतर एकल एमडी 5 की टक्कर की संभावना 50% है। इस पैमाने पर, आप संभवतः भंडारण क्षमता के मामले में Google को हरा देंगे।

हालाँकि, क्योंकि MD5 हैश फ़ंक्शन टूट गया है (यह टकराव के हमले की चपेट में है ), कोई भी निर्धारित हमलावर सीपीयू पावर के कुछ सेकंड के मामले में 2 टकराने वाली संपत्ति का उत्पादन कर सकता है । इसलिए यदि आप MD5 का उपयोग करना चाहते हैं, तो सुनिश्चित करें कि ऐसा हमलावर आपके आवेदन की सुरक्षा से समझौता नहीं करेगा!

इसके अलावा, यदि कोई हमलावर आपके डेटाबेस में मौजूदा परिसंपत्ति को टक्कर देने का दावा कर सकता है , तो विचार करें। जबकि MD5 (2011 तक) के खिलाफ इस तरह के कोई ज्ञात हमले ( प्रिमिमेज अटैक ) नहीं हुए हैं, यह टकराव के हमलों पर मौजूदा शोध का विस्तार करके संभव हो सकता है।

यदि ये समस्या बनते हैं, तो मैं सुझाव देता हूं कि SHA-2 श्रृंखला हैश फ़ंक्शन (SHA-256, SHA-384 और SHA-512) को देखें। नकारात्मक पक्ष यह है कि यह थोड़ा धीमा है और लंबे समय तक हैश आउटपुट है।


4
Is डेज़ ’इस बिंदु पर बड़े पैमाने पर ओवरस्टेटमेंट है, जैसा कि मैं इसे समझता हूं।
निक जॉनसन

1
सच है, मैंने अपनी पोस्ट अपडेट की। 2004 यादृच्छिक टक्कर का हमला वास्तव में बहुत तेज है। 2007 के एमडी 5 उपसर्ग टकराव के हमले में कई दिन लग सकते हैं - लेकिन आम तौर पर एक हमलावर के लिए बहुत अधिक उपयोगी होता है
intgr

2
काम के उदाहरण के लिए रूबेंस का जवाब देखें जो कुछ ही घंटों में दो अलग-अलग निष्पादन योग्य लोगों के बीच टकराव पैदा करेगा। :)
निक जॉनसन

38

MD5 एक हैश फंक्शन है - इसलिए हाँ, दो अलग-अलग स्ट्रिंग्स पूरी तरह से MD5 कोडिंग उत्पन्न कर सकते हैं।

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


12

हाँ यह संभव है। यह वास्तव में जन्मदिन की समस्या है । हालांकि दो अनियमित रूप से चुने गए तार की समान MD5 हैश होने की संभावना बहुत कम है।

उदाहरण के लिए यह और यह प्रश्न देखें ।


1
क्या संभावना है? कि टक्कर? नहीं, यह 1 होगा, यानी बहुत अधिक। ;-)
कोनराड रुडोल्फ

खैर, सच है। एक ही MD5 हैश के साथ निश्चित रूप से दो तार मौजूद हैं।
फुट

3
मैंने इसे कबूतर-छेद समस्या के रूप में जाना है।
डैनियल ए। व्हाइट

जन्मदिन की समस्या एक टकराव की संभावना की चिंता करती है। प्रमाण के लिए वहाँ एक होना चाहिए जो आप पीजोन छेद सिद्धांत
jk चाहते हैं।

अगर मैं कर सकता हूं तो मैं आपके जवाब को दो बार वोट करूंगा। एक संभावना के "कम" कैसे हम बात कर रहे हैं?
एलेक्स स्पेंसर

10

हां, निश्चित रूप से: एमडी 5 हैश की एक सीमित लंबाई है, लेकिन संभावित वर्ण स्ट्रिंग की एक अनंत संख्या है जो एमडी 5-हैशेड हो सकती है।


9

हां, यह संभव है कि दो अलग-अलग तार एक ही एमडी 5 हैश कोड उत्पन्न कर सकते हैं।

यहाँ हेक्स स्ट्रिंग में बहुत समान बाइनरी संदेश का उपयोग करके एक सरल परीक्षण दिया गया है:

$ echo '4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2' | xxd -r -p | tee >/dev/null >(md5) >(sha1sum)
c6b384c4968b28812b676b49d40c09f8af4ed4cc  -
008ee33a9d58b51cfeb425b0959121c9

$ echo '4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2' | xxd -r -p | tee >/dev/null >(md5) >(sha1sum)
c728d8d93091e9c7b87b43d9e33829379231d7ca  -
008ee33a9d58b51cfeb425b0959121c9

वे अलग-अलग SHA-1 राशि उत्पन्न करते हैं, लेकिन समान MD5 हैश मान। दूसरी बात यह है कि तार बहुत मिलते-जुलते हैं, इसलिए उनके बीच अंतर खोजना मुश्किल है।

निम्नलिखित कमांड द्वारा अंतर पाया जा सकता है:

$ diff -u <(echo 4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2 | fold -w2) <(echo 4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2 | fold -w2)
--- /dev/fd/63  2016-02-05 12:55:04.000000000 +0000
+++ /dev/fd/62  2016-02-05 12:55:04.000000000 +0000
@@ -33,7 +33,7 @@
 af
 bf
 a2
-00
+02
 a8
 28
 4b
@@ -53,7 +53,7 @@
 6d
 a0
 d1
-55
+d5
 5d
 83
 60

ऊपर टकराव का उदाहरण मार्क स्टीवंस से लिया गया है: एमडी 5 , 2012 के लिए एकल-ब्लॉक टक्कर ; वह अपनी विधि बताते हैं, स्रोत कोड के साथ ( कागज के लिए वैकल्पिक लिंक )।


एक और परीक्षण:

$ echo '0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef' | xxd -r -p | tee >/dev/null >(md5) >(sha1sum)
756f3044edf52611a51a8fa7ec8f95e273f21f82  -
cee9a457e790cf20d4bdaa6d69f01e41

$ echo '0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef' | xxd -r -p | tee >/dev/null >(md5) >(sha1sum)
6d5294e385f50c12745a4d901285ddbffd3842cb  -
cee9a457e790cf20d4bdaa6d69f01e41

विभिन्न SHA-1 राशि, समान MD5 हैश।

अंतर एक बाइट में है:

$ diff -u <(echo 0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef | fold -w2) <(echo 0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef | fold -w2)
--- /dev/fd/63  2016-02-05 12:56:43.000000000 +0000
+++ /dev/fd/62  2016-02-05 12:56:43.000000000 +0000
@@ -19,7 +19,7 @@
 03
 65
 9e
-70
+74
 4f
 85
 34
@@ -41,7 +41,7 @@
 a3
 f4
 15
-5c
+dc
 bb
 86
 07

उपरोक्त उदाहरण ताओ ज़ी और डेंग्गू फेंग से अनुकूलित किया गया है: संदेश के एक एकल ब्लॉक का उपयोग करके MD5 Collisions का निर्माण , 2010।


सम्बंधित:


4

हाँ यह संभव है। इसे हाश टकराव कहा जाता है ।

कहा जा रहा है कि, एमडी 5 जैसे एल्गोरिदम को टक्कर की संभावना को कम करने के लिए डिज़ाइन किया गया है।

एमडी 5 पर विकिपीडिया प्रविष्टि एमडी 5 में कुछ कमजोरियों की व्याख्या करती है, जिनके बारे में आपको जानकारी होनी चाहिए।


4

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

विकिपीडिया पर आक्षेप

EDIT: पूर्ण इंजेक्शन हैश फ़ंक्शन मौजूद होना: इसे परफेक्ट हैशिंग कहा जाता है ।


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

3

हाँ यही है! टक्कर एक संभावना होगी (हालांकि, जोखिम बहुत छोटा है)। यदि नहीं, तो आप एक बहुत प्रभावी संपीड़न विधि होगा!

संपादित करें : के रूप में कोनराड रूडोल्फ कहते हैं: एक इनपुट के संभावित असीमित सेट उत्पादन (32 हेक्स वर्ण) की एक परिमित सेट करने के लिए परिवर्तित होगा टकराव की एक अंतहीन संख्या में परिणाम है।


3

जैसा कि अन्य लोगों ने कहा है, हां, दो अलग-अलग इनपुट्स के बीच टकराव हो सकता है। हालाँकि, आपके उपयोग के मामले में, मुझे नहीं लगता कि यह एक समस्या है। मुझे बहुत संदेह है कि आप टकरावों में भाग लेंगे - मैंने पिछली नौकरी पर कई इमेज (JPG, बिटमैप, PNG, रॉ) के हजारों इमेज फ़ाइलों को फिंगरप्रिंट करने के लिए MD5 का उपयोग किया है और मेरे पास टक्कर नहीं थी ।

हालाँकि, यदि आप किसी प्रकार के डेटा को फ़िंगरप्रिंट करने का प्रयास कर रहे हैं, तो शायद आप दो हैश एल्गोरिदम का उपयोग कर सकते हैं - एक इनपुट का परिणाम दो अलग-अलग एल्गोरिदम के समान आउटपुट के परिणामस्वरूप असंभव है।


1
दरअसल, अगर कोई हमलावर एक हैश एल्गोरिथ्म के साथ टकराव उत्पन्न कर सकता है, तो वह इसका उपयोग दूसरे एल्गोरिथ्म के लिए टकराव प्राप्त करने के लिए भी कर सकता है। यह हाल ही में crypto.stackexchange पर मेरे प्रश्न पर चर्चा की गई थी ।
पाओलो एबरमन

2

मुझे लगता है कि यह पुराना है, लेकिन मुझे लगा कि मैं अपने समाधान में योगदान दूंगा। एक 2 ^ 128 संभव हैश संयोजन हैं। और इस तरह एक जन्मदिन विरोधाभास की 2 ^ 64 संभावना। हालांकि नीचे दिए गए समाधान टकराव की संभावना को समाप्त नहीं करेंगे, लेकिन यह निश्चित रूप से जोखिम को काफी कम कर देगा।

2^64 = 18,446,744,073,709,500,000 possible combinations

मैंने जो किया है, मैंने कुछ स्ट्रिंग को एक साथ इनपुट स्ट्रिंग के आधार पर एक साथ रखा है ताकि आप अपने हैश पर विचार करने के लिए बहुत अधिक परिणामी स्ट्रिंग प्राप्त कर सकें ...

तो इसके लिए मेरा छद्म कोड है:

Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string))

यह टकराव की व्यावहारिक अक्षमता है। लेकिन अगर आप सुपर पागल होना चाहते हैं और ऐसा नहीं हो सकता है, और भंडारण स्थान एक मुद्दा नहीं है (न ही चक्रों की गणना कर रहा है) ...

Result = Hash(string) & Hash(Reverse(string)) & Hash(Length(string)) 
         & Hash(Reverse(SpellOutLengthWithWords(Length(string)))) 
         & Hash(Rotate13(string)) Hash(Hash(string)) & Hash(Reverse(Hash(string)))

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

मेरे विचार से, मुझे लगता है कि टकराव की संभावना पर्याप्त है कि मैं इस "अचूक" पर विचार करूं, लेकिन ऐसा होने की संभावना नहीं है कि यह सूट की आवश्यकता है।

अब संभव संयोजनों में काफी वृद्धि हुई है। हालांकि आप इस बात पर लंबे समय तक खर्च कर सकते हैं कि यह आपको कितने संयोजन मिल सकता है, मैं सिद्धांत रूप में कहूंगा कि यह भूमि आपको आपके द्वारा दिए गए उद्धरण संख्या से अधिक है।

2^64 (or 18,446,744,073,709,551,616) 

संभवतः सौ से अधिक अंक या तो। सैद्धांतिक अधिकतम यह आपको दे सकता है

परिणामी तारों की संभावित संख्या:

528294531135665246352339784916516606518847326036121522127960709026673902556724859474417255887657187894674394993257128678882347559502685537250538978462939576908386683999005084168731517676426441053024232908211188404148028292751561738838396898767036476489538580897737998336


1

मुझे लगता है कि हमें अपनी आवश्यकता के अनुसार हैशिंग एल्गोरिथ्म चुनने में सावधानी बरतने की आवश्यकता है, क्योंकि हैश टकराव उतने दुर्लभ नहीं हैं जितने कि मुझे उम्मीद थी। मुझे हाल ही में अपनी परियोजना में हैश टक्कर का एक बहुत ही सरल मामला मिला। मैं हैशिंग के लिए xxhash के पायथन रैपर का उपयोग कर रहा हूं। लिंक: https://github.com/ewencp/pyhashxx

s1 = 'mdsAnalysisResult105588'
s2 = 'mdsAlertCompleteResult360224'
pyhashxx.hashxx(s1) # Out: 2535747266
pyhashxx.hashxx(s2) # Out: 2535747266

इसने सिस्टम में एक बहुत ही मुश्किल कैशिंग मुद्दे को जन्म दिया, फिर मैंने अंततः पाया कि यह एक हैश टक्कर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.