MD5 से पहले कितने यादृच्छिक तत्व टकराव पैदा करते हैं?


164

मुझे Amazon S3 पर एक इमेज लाइब्रेरी मिली है। प्रत्येक छवि के लिए, मैं अपने सर्वर पर स्रोत URL को md5 करता हूं और एक अद्वितीय फ़ाइल नाम प्राप्त करने के लिए टाइमस्टैम्प। चूँकि S3 में उपनिर्देशिकाएँ नहीं हो सकती हैं, मुझे इन सभी छवियों को एक ही फ़्लैट फ़ोल्डर में संग्रहीत करने की आवश्यकता है।

क्या मुझे MD5 हैश मूल्य में टकराव के बारे में चिंता करने की आवश्यकता है जो उत्पादन होता है?

बोनस: एमडी 5 का उत्पादन करने वाले हैश मूल्य में टकराव देखने से पहले मुझे कितनी फाइलें मिल सकती हैं?



2
शाब्दिक उत्तर यह है कि दूसरी फ़ाइल में पहले की तरह ही एमडी 5 हो सकता है। हालाँकि ऑड्स बेहद छोटे हैं।
रिक जेम्स

जवाबों:


307

गलती से बस दो हैश की टकराने की संभावना १/२ १२ is है जो १४० में है १४० अनिर्णय में २illion२ डिसिल्टिंग ३६६ नॉनिलियन ३२६ ऑक्टिलियन ९ ३illion सेप्टिलीन ४६३ सेक्स्टिलियन ४६३ क्विंटलिन्ट ३ tr४ ट्रिलियन ६० tr बिलियन ३११ बिलियन 768३ लाख २११ हजार ४५६।

हालाँकि यदि आप सभी हैश रखते हैं तो जन्मदिन के विरोधाभास के लिए संभावना थोड़ी अधिक है । किसी भी हैश को किसी अन्य हैश से टकराने की 50% संभावना होने के लिए आपको 2 64 हैश चाहिए। इसका मतलब है कि टक्कर पाने के लिए, औसतन, आपको 100 वर्षों के लिए प्रति सेकंड 6 बिलियन फाइलें हैश करने की आवश्यकता होगी ।


20
"टक्कर की संभावना 1/2 ^ 64 है" - क्या? टक्कर की संभावना पहले से ही हैश की गई वस्तुओं की संख्या पर निर्भर है, यह एक निश्चित संख्या नहीं है। वास्तव में, यह ठीक उसी के बराबर है 1 - sPn/s^n, जहां sखोज स्थान का आकार ( 2^128इस मामले में) है, और nआइटम हैशेड की संख्या है। जो आप शायद सोच रहे हैं 2^64, जो आपके द्वारा टकराव की 50% संभावना के लिए MD5 हैश के लिए आवश्यक वस्तुओं की अनुमानित संख्या है।
ब्लूराजा - डैनी पफ्लुगुएफ्ट

19
+1 क्योंकि मैंने हमेशा जानना चाहा है कि कैसे 999 ट्रिलियन
लोल की

7
दुर्भाग्य से, आप अभी भी सही नहीं हैं। आप मान रहे हैं कि हैश फ़ंक्शन वास्तव में यादृच्छिक है। यह नहीं। इसका मतलब है कि टक्कर की संभावना अधिक है।
जोर्जेन फॉग

22
JørgenFogh: और भौतिकी के सभी नियम "सही नहीं" हैं। पांडित्य का ऐसा स्तर अनावश्यक है क्योंकि यह किसी भी सार्थक तरीके से जवाब नहीं बदलता है।
कोर्नेल

20
तो आप कह रहे हैं कि एक मौका है!
वार्गोनियन

27

S3 में उपनिर्देशिकाएँ हो सकती हैं। बस एक "/" कुंजी नाम में डालें, और आप फ़ाइलों को एक्सेस कर सकते हैं जैसे कि वे अलग-अलग निर्देशिकाओं में थे। मैं इसका उपयोग उपयोगकर्ता फ़ाइलों को S3 में उनकी उपयोगकर्ता आईडी के आधार पर अलग-अलग फ़ोल्डरों में संग्रहीत करने के लिए करता हूं।

उदाहरण के लिए: "mybucket / users / 1234 / somefile.jpg"। यह फ़ाइल सिस्टम में एक निर्देशिका के समान नहीं है, लेकिन S3 API में कुछ विशेषताएं हैं जो इसे लगभग समान काम करने देती हैं। मैं इसे "उपयोगकर्ता / 1234 /" से शुरू होने वाली सभी फाइलों को सूचीबद्ध करने के लिए कह सकता हूं और यह मुझे उस "निर्देशिका" में सभी फाइलें दिखाएगा।


7
यह एक ऐसी सामग्री होनी चाहिए जो मुझे लगता है, क्योंकि यह वास्तव में टकराव की संभावना के बारे में सवाल का जवाब नहीं देती है
इयान क्लार्क

18

तो रुको, यह है:

md5(filename) + timestamp

या:

md5(filename + timestamp)

यदि पूर्व, आप एक GUID के लिए सबसे अधिक रास्ता है, और मैं इसके बारे में चिंता नहीं करेंगे। यदि बाद वाला, तो आप इस बारे में करग की पोस्ट देखें कि आप अंततः टकराव में कैसे भागेंगे।


1
कृपया बताएं कि टाइमस्टैम्प कैसे टकराव की संभावना को बढ़ाता है
ब्रैड थॉमस

14
@ ब्रैडोथास: ऐसा नहीं है। टकराव का एमडी 5 जोखिम वही है चाहे वह फ़ाइल नाम पर हो या फ़ाइल नाम + टाइमस्टैम्प का संयोजन। लेकिन पहले परिदृश्य में, आपको एमडी 5 टक्कर और टाइमस्टैम्प टक्कर दोनों की आवश्यकता होगी।
विंसेंट ह्यूबर्ट

2
यह अभी भी प्रति मिनट दो उपयोगकर्ताओं के साथ एक 2 ^ (128 ^ 60) एक टक्कर का मौका छोड़ देता है। सचमुच अनुपयोगी है।
बेरी एम।

2
@BradThomas स्पष्ट होने के लिए: md5(filename) + timestampटकराव के जोखिम को बड़े पैमाने पर कम कर देता है क्योंकि आपको कुल मिलाकर टक्कर के लिए समान टाइमस्टैम्प के लिए md5 की टक्कर की आवश्यकता होगी। md5(filename + timestamp)यह वैसा ही है जैसा md5(filename)कि यह मानते हुए कि फ़ाइल नाम यादृच्छिक के साथ शुरू होता है (क्योंकि कुछ यादृच्छिकता में अधिक यादृच्छिकता जोड़ने से केवल व्यक्तिगत md5 परिणाम बदल जाता है और जन्मदिन की समस्या अभी भी सभी md5 हैश में मौजूद है)।
रोबोकट

10

टक्करों के लिए अंगूठे का एक मोटा नियम मूल्यों की श्रेणी का वर्ग-मूल है। आपका MD5 sig संभवतः 128 बिट लंबा है, इसलिए आपको 2 ^ 64 छवियों से ऊपर और उससे अधिक टकराव देखने की संभावना है।


1
आप शायद 128 बिट का मतलब है, 2 ^ 128 नहीं। :-)
जेस्पर

5
en.wikipedia.org/wiki/Birthday_Problem समस्या के बारे में कुछ और जानकारी।
जॉर्ज शॉली

7

यद्यपि यादृच्छिक MD5 टकराव अत्यधिक दुर्लभ हैं, यदि आपके उपयोगकर्ता फ़ाइलें प्रदान कर सकते हैं (जो कि वर्बेटिम संग्रहीत किया जाएगा) तो वे होने वाले इंजीनियर टकराव हो सकते हैं। यही है, वे जानबूझकर एक ही MD5sum के साथ दो फाइलें बना सकते हैं लेकिन अलग-अलग डेटा। सुनिश्चित करें कि आपका आवेदन इस मामले को समझदार तरीके से संभाल सकता है, या शायद SHA-256 जैसे मजबूत हैश का उपयोग कर सकता है।


नमक का उपयोग करने से उपयोगकर्ता इंजीनियरिंग समस्या का ध्यान रखा जाएगा, नहीं?
स्टैकऑवरफ्लो

यह निर्भर करता है कि नमक कैसे लगाया जाता है। यह उपयोगकर्ता-आपूर्ति किए गए डेटा का एक उपसर्ग होना चाहिए, या बेहतर अभी तक एक एचएमएसी के लिए कुंजी। यह अभी भी एक अच्छा विचार है कि गहराई में रक्षा का अभ्यास करें।
6

ध्यान दें कि SHA256 256 बिट लंबा है, आप उस कुंजी की लंबाई के साथ टकराव के जोखिम का व्यापार कर सकते हैं, जो SHA256 को कम बिट्स में विभाजित करके स्टोर कर रहा है जैसे कि SHA256 का उपयोग करें, लेकिन इसे 128 बिट तक ट्रेंकेट करें (जो MD5 का उपयोग करने की तुलना में अधिक सुरक्षित है हालांकि उनके पास बिट्स की समान संख्या है)।
रोबोकट

5

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


केवल एक ही समस्या मुझे टेलर उदाहरण के साथ है, अगर किसी को आपके डेटाबेस की एक प्रति मिलती है तो वे शायद इंद्रधनुष कार्ड का उपयोग करके क्रेडिट कार्ड नंबर का पता लगा सकते हैं ...
सैम केसर

1
जब मैं क्रेडिट कार्ड के लिए एमडी 5 का उपयोग नहीं करना चाहूंगा, तो 10,000,000 के बीच सभी वैध क्रेडिट कार्ड संख्याओं की एक इंद्रधनुष तालिका (8 अंक सबसे छोटी लंबाई क्रेडिट कार्ड जो मैंने देखा है) और 9,999,999,999,999,999 (सबसे बड़ा 16 अंकों की संख्या) अभी भी एक बड़ा है तालिका उत्पन्न करने के लिए। संभवतः उन नंबरों को चुराने के आसान तरीके हैं।
acrosman

1

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


36
बेशक कई अन्य बुरी चीजें हो सकती हैं जो 1/2 ^ 128 की संभावना के साथ हो सकती हैं। आप इस बारे में चिंता करने के लिए इसे सिंगल-आउट नहीं करना चाह सकते हैं।
विल डीन

2
यहां सबसे खराब चीज यह हो सकती है कि आप एक फोटो प्राप्त कर सकते हैं। अपेक्षाकृत कम संख्या के लिए मुझे चिंता नहीं होगी। अब अगर आपका सॉफ्टवेयर एक विमान को उतारने वाले ऑटोपायलट को नियंत्रित कर रहा है, तो दूसरी कहानी है।
जिम सी।

9
आप गंभीर नहीं हो सकते। टकराव का अच्छा मौका पाने के लिए आपको 100 सेकंड के लिए प्रति सेकंड 6 बिलियन फाइलें हैश करने की आवश्यकता होगी। यहां तक ​​कि अगर आप बहुत अशुभ हैं, तो यह संभवतः मानव जीवन की तुलना में लंबे समय तक उपयोग की जाने वाली S3 की पूरी क्षमता से अधिक होगा।
कोर्नेल

12
यह अरबों गुना अधिक संभावना है कि आपका डेटाबेस और इसके बैकअप सभी विफल हो जाएंगे। टकराव चिंता के लायक नहीं हैं।
आर्टीलियस

5
अपने सर्वर को लगाने के लिए एक बंकर बनाने के टक्कर की रोकथाम समय का उपयोग करें! उन pesky उल्का आप (बहुत ही संभावना नहीं है, लेकिन संभव है) मारा जा सकता है, तो आप भीख से उल्का आश्रय का समर्थन करने की आवश्यकता होगी।
पोलवेज़ुल

1

एमडी 5 की टक्कर बेहद कम है। यदि आपके पास 9 ट्रिलियन MD5s, वहाँ में केवल एक ही मौका है 9 ट्रिलियन है कि वहाँ एक टक्कर हो जाएगा।


1
अन्य उत्तर में से कई एक और आइटम जोड़ते समय टकराव की संभावना के बारे में बात करते हैं । मुझे लगता है कि मेरा उत्तर अधिक उपयोगी है क्योंकि यह संभवतया पूरी तालिका के बारे में बात करता है।
रिक जेम्स

1
इसका एमडी 5 से कोई लेना-देना नहीं है और यह सही नहीं है। यह कहने जैसा है कि यदि आपके पास 9 ट्रिलियन बिल्लियाँ हैं, तो 1 में 9 ट्रिलियन मौका है कि किसी और के पास एक समान बिल्ली है। यहाँ मुख्य समस्या यह है कि आप एक से अधिक मूल्य वाले समान हैश प्राप्त कर सकते हैं।
जूनास अलहोनेन २४'१

@JoonasAlhonen - हां, यह सच है। और बहुत सारे गरीब लोग इसका उपयोग करते हैं कि एक और लॉटरी टिकट खरीदने के बहाने के रूप में वे बर्दाश्त नहीं कर सकते।
रिक जेम्स

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