क्या एमडी 5 अभी भी विशिष्ट रूप से फाइलों की पहचान करने के लिए पर्याप्त है?


139

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

कोई विचार?


2
मैं वास्तव में वर्तमान में अपने स्वयं के अनुप्रयोगों में से एक में इसका उपयोग कर रहा हूं, और जहां तक ​​मुझे पता है कि यह विशिष्ट रूप से फाइलों की पहचान करने के लिए पर्याप्त है।
उपलब्ध नहीं है

2
आपको यह प्रश्न संभवतः मिलेगा: stackoverflow.com/questions/862346/… उपयोगी।
शार्प्यूट

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

वे छवि फ़ाइलों, jpg, png और gif के होने जा रहे हैं। और हाँ मुझे लगता है कि सीमा कुछ हज़ार होगी ... लेकिन आपको लगता है कि कितनी फाइलें मोटे तौर पर मुझे परेशान करने वाली हैं?
रणहिरु जूड कोरेय

जवाबों:


89

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


2
@none: अपने पहले प्रश्न के लिए, यहाँ देखें । मुझे डर है कि मैं अन्य प्रश्नों को नहीं समझता।
मार्सेलो कैंटोस

9
@ 0xA3: न तो आपको और न ही मुझे इस बात का कोई अंदाजा है कि ओपी किन फाइलों का हवाला दे रहा है, या समझौता करने से कितना नुकसान होगा। यह उनके बच्चे का बेबी फोटो संग्रह हो सकता है जो हम सभी जानते हैं। मेरा लक्ष्य तथ्यों को प्रदान करना है; उनके साथ कोई और क्या करता है, वह उनका व्यवसाय है। यह भी विचार करें कि ब्रूस श्नाइर आपके पासवर्ड को लिखने की सलाह देता है ; फोर्ट नॉक्स में सब कुछ संग्रहीत करने की आवश्यकता नहीं है। कुछ चीजें फ्लॉवर पॉट के नीचे ठीक रहेंगी।
मार्सेलो कैंटोस

3
@ मार्सेलो कैंटोस, मुझे लगता है कि यहां जो कमी है, वह 'सुरक्षा' शब्द का विभेदीकरण या अनपैकिंग है। जाहिर है कि लोग चेकसम कार्य के किसी भी उपयोग के लिए 'सुरक्षा' मान रहे हैं, लेकिन नामकरण मार्सेलो का मतलब 'एक प्रयोगशाला में' है।
hpavc

5
मैं दृढ़ता से असहमत हूँ। एक अलग हैश मान बताता है कि फाइलें अलग हैं। लेकिन एक समान हैश मूल्य के लिए: आप यह नहीं कह सकते हैं "यह बहुत संभावना है कि दोनों समान हैं" यदि हैश समान हैं: आप केवल बाइट के लिए बाइट की तुलना कर सकते हैं। एक हैश पूरे फ़ाइल के लिए विभिन्न मूल्यों की संख्या से छोटे परिमाण के कई आदेश हैं , इसलिए प्रत्येक हैश मूल्यों के लिए कई, कई, कई संभावित टकराव हैं। केवल अगर आप एक ज्ञात फ़ाइल (एक ज्ञात हैश के साथ) की नकल करने के मामले में हैं, तो एक समान हैश मान "शायद" का अर्थ है कि 2 सही ढंग से कॉपी किया गया था (फिर भी, यह 100% निश्चित नहीं है, लेकिन अत्यधिक संभावना है)।
ओलिवियर दुलक

3
ठीक है, मेरा गणित बेकार है। GUID के पास लगभग 122 बिट्स एन्ट्रापी हैं, और इसलिए एक बिलियन फाइलों में कहीं भी टकराने की संभावना लगभग 2 ^ (2 * 30 - 122) = 2 ^ -62 है। हालांकि यह मेरी मूल गणना से बहुत अधिक है, फिर भी यह 4-क्विंटल में लगभग एक से कम है।
मार्सेलो कैंटोस

32

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

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


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

6
@Ranhiru। इस जवाब को फिर से पढ़ें, इसका इमो सबसे व्यापक है। हैशिंग का उपयोग पहले चरण के रूप में किया जा सकता है, जो आपको 99.99 ^ ई% निश्चितता में मिलता है कि फाइलें समान हैं, लेकिन यदि आप बिल्कुल 100% निश्चित होना चाहते हैं , तो आपको बाइट चेक द्वारा एक बाइट बनाने की आवश्यकता होगी। यह सच है कि आप एमडी 5, एसएचए या किसी अन्य एल्गोरिथ्म का उपयोग करते हैं या नहीं।
पॉल 15:27

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

8
@Marcelo। यह तर्क संगत तर्क के लिए खड़ा नहीं है कि आकस्मिक टकराव आकस्मिक बिट फ़्लिप (बाइट तुलना द्वारा बाइट बनाने के दौरान) की तुलना में कम संभावना है। हैश का निर्माण करते समय आपके पास अभी भी बिट फ़्लिप का एक ही मौका है (और अधिक प्रसंस्करण समय शामिल होने के बाद यकीनन अधिक)। @ थोमस ने मूल रूप से यह सुझाव देने के लिए मुद्दा उठाया कि विशिष्टता की पहचान करने का कोई गारंटी तरीका नहीं है, हालांकि बिट फ़्लिप का प्रभाव अत्यधिक बहस का मुद्दा है। सबसे निराशावादी अनुमान 1 फ्लिप प्रति जीबी / घंटा है, और ईसीसी रैम भी हटा देगा।
पॉल जी

2
"हैश से गलती से टकराने की संभावना वास्तव में कम है कि सामान्य सौर गामा किरण उत्सर्जन द्वारा उत्पन्न सीपीयू में ग्लिच के कारण तुलना विफल होने की संभावना" [उद्धरण वांछित]
एंडोलिथ

20

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

यह जानने के बाद कि क्या ज्ञात एमडी 5 कमजोरियां किसी दिए गए संदर्भ पर लागू होती हैं, एक सूक्ष्म मामला है, एमडी 5 का उपयोग नहीं करने की सिफारिश की जाती है। टक्कर-प्रतिरोधी हैश फ़ंक्शन (SHA-256 या SHA-512) का उपयोग करना सुरक्षित उत्तर है। इसके अलावा, MD5 का उपयोग करना खराब जनसंपर्क है (यदि आप MD5 का उपयोग करते हैं, तो अपने आप को सही ठहराने के लिए तैयार रहें; जबकि कोई भी आपके SHA-256 का उपयोग करने पर सवाल नहीं उठाएगा)।


2
यह उत्तर थोड़ा भ्रामक हो सकता है अगर पाठक हैशिंग से परिचित नहीं है। SHA के बारे में कुछ भी जादुई नहीं है जो हैश टकराव को रोकता है , वे हैश टक्कर के हमलों के लिए अधिक प्रतिरोधी हैं । यदि आप 99.999 ^ ई% से अधिक बनना चाहते हैं तो फाइलें समान हैं, फिर भी आपको बाइट चेक द्वारा एक बाइट की आवश्यकता होगी।
पॉल जी

7
वास्तव में एक बाइट-टू-बाइट तुलना एक ब्रह्मांडीय किरण के एक बिट फ्लिपिंग (जैसे एक ए return 0;में बदलना return 1;) के कारण विफल हो सकती है । यह अत्यधिक संभावना नहीं है, लेकिन SHA-256 के साथ टकराव का जोखिम इससे भी छोटा है। गणितीय रूप से, आप यह सुनिश्चित नहीं कर सकते हैं कि समान मान के लिए हैश वाली दो फाइलें समान हैं, लेकिन आप यह सुनिश्चित नहीं कर सकते कि या तो स्वयं फ़ाइलों की तुलना करके, जब तक आप तुलना के लिए कंप्यूटर का उपयोग न करें। मेरा मतलब है कि यह कुछ 99.999 से परे जाने के लिए अर्थहीन है .... 9% निश्चितता, और SHA-256 पहले से ही अधिक प्रदान करता है।
थॉमस पोर्निन

2
क्या, आप ECC मेमोरी का उपयोग नहीं करते हैं? ;)। अच्छी टिप्पणी, बहुत दिलचस्प विचार।
पॉल

1
टिन पन्नी टोपी मत भूलना! अधिक गंभीरता से, आप टकराव के बारे में इन तथ्यों को कैसे जानते हैं और क्या आपने इसे किसी तरह से सत्यापित किया है?
जेम्स पी।

@ThomasPornin लौकिक किरण बिट flips MD5 विधि को भी प्रभावित करेगा, इसलिए यह अभी भी बदतर है।
एंडोलिथ

9

एक md5 टकराव पैदा कर सकता है। सैद्धांतिक रूप से, हालांकि अत्यधिक संभावना नहीं है, एक पंक्ति में एक लाख फाइलें एक ही हैश का उत्पादन कर सकती हैं। अपने भाग्य का परीक्षण न करें और मूल्य संचय करने से पहले md5 टकराव की जाँच करें।

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

आप कबूतर के सिद्धांत पर पढ़ सकते हैं ।


6

मैं इसकी सिफारिश नहीं करूंगा। यदि एप्लिकेशन बहु-उपयोगकर्ता प्रणाली पर काम करेगा, तो उपयोगकर्ता हो सकता है, जिसमें एक ही md5 हैश के साथ दो फाइलें होंगी (वह इंजीनियर हो सकता है और ऐसी फ़ाइलों के साथ खेल सकता है, या बस उत्सुक हो सकता है - वे आसानी से http: / से डाउनलोड करने योग्य हैं) /www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html , मैंने स्वयं यह उत्तर लिखने के दौरान दो नमूने डाउनलोड किए हैं)। एक और बात यह है, कि कुछ एप्लिकेशन ऐसे डुप्लिकेट को किसी भी कारण से स्टोर कर सकते हैं (मुझे यकीन नहीं है, अगर ऐसे कोई एप्लिकेशन हैं लेकिन संभावना मौजूद है)।

यदि आप विशिष्ट रूप से आपके प्रोग्राम द्वारा उत्पन्न फ़ाइलों की पहचान कर रहे हैं, तो मैं कहूंगा कि एमडी 5 का उपयोग करना ठीक है। अन्यथा, मैं किसी अन्य हैश फ़ंक्शन की सिफारिश करूंगा जहां कोई टक्कर अभी तक ज्ञात नहीं है।


2

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


0

MD5 टूट गया है, आप इसके बजाय SHA1 का उपयोग कर सकते हैं (अधिकांश भाषाओं में लागू)


यह पूरी तरह से एक अच्छा जवाब है। MD5 यूरोप में विधि और लेखा मामलों के उपयोग के लिए मई 2018 से अस्वीकार्य है।
बर्ट सीनमा

@BertSinnema क्या आप मुझे उस स्रोत की ओर संकेत कर सकते हैं जो परिभाषित करता है कि कौन से हैश फ़ंक्शन स्वीकार्य हैं आदि, कृपया?
बेरेज़ोवस्की

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

0

जब हैशिंग शॉर्ट (<कुछ K?) स्ट्रिंग्स (या फाइलें) एक दो md5 हैश कीज़ बना सकती हैं, एक वास्तविक स्ट्रिंग के लिए और दूसरा एक शॉर्ट एसिमेट्रिक स्ट्रिंग के साथ समाप्‍त स्ट्रिंग के लिए दूसरा। उदाहरण: md5 (रिवर्स (स्ट्रिंग || '1010'))। अतिरिक्त स्ट्रिंग जोड़ने से यह सुनिश्चित होता है कि समरूप बिट्स की श्रृंखला वाली फाइलें भी दो अलग-अलग कुंजी उत्पन्न करती हैं। कृपया समझें कि इस योजना के तहत भी दो हैश कीज़ के सैद्धांतिक रूप से गैर-समरूप तारों के समान होने की संभावना है, लेकिन संभावना अत्यधिक छोटी लगती है - एकल md5 टक्कर संभावना के वर्ग के क्रम में कुछ, और समय की बचत फ़ाइलों की संख्या बढ़ रही है जब काफी हो सकता है। दूसरी स्ट्रिंग बनाने के लिए अधिक विस्तृत योजनाओं पर भी विचार किया जा सकता है,

टकराने की जाँच करने के लिए एक db में सभी bit_vectors के लिए md5 हैश कुंजियों की विशिष्टता के लिए यह परीक्षण चला सकते हैं:

md5 (bit_vector), काउंट (*), bit_and (bit_vector) को db से bit_vector
समूह के साथ md5 (bit_vector), bit_vector having bit_and (bit_vector) <> bit_vector


स्मार्ट आइडिया। यदि एक "हमलावर" एक ही md5 हैश के साथ एक नकली फ़ाइल बनाता है, तो यह तब तक मदद नहीं करेगा जब तक कि वह आपके "नमस्कार" को नहीं जानता है, और सामग्री को उलट कर एक अलग हैश बनाएगा। 2 md5 कुंजी का उपयोग करना इस तरह बाधाओं को बहुत कम कर देगा। अगर इसकी सिर्फ स्थानीय स्तर पर गणना करने से पहले नमक का उपयोग करके "हमले" को रोकने के लिए पर्याप्त होगा।
वुल्फ ५

0

मैं एमडी 5 को बड़ी मात्रा में फ़ाइल डेटा संग्रहीत करते समय संभाव्यता के संकेतक के रूप में सोचना पसंद करता हूं।

यदि हैश बराबर हैं तो मुझे पता है कि मुझे बाइट की फाइलों की तुलना बाइट से करनी है, लेकिन हो सकता है कि यह केवल कुछ बार झूठे कारण से हो, अन्यथा (हैश बराबर नहीं हैं) मैं निश्चित हो सकता हूं कि हम दो अलग-अलग फाइलों के बारे में बात कर रहे हैं ।

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