
हैश टकराव और उनका दोहन
TL;DR इन दो छवियों का MD5 टकराव प्राप्त करना अब(*) तुच्छ और तुरंत है।
⟷
<a href=http://gunshowcomic.com/648>
आग से मत खेलो, MD5 पर भरोसा मत करो।
(*) किसी भी दो फ़ाइलों का टकराव पैदा करना कई वर्षों से संभव है, लेकिन हर बार इसमें कई घंटे लगते हैं, बिना किसी शॉर्टकट के।
यह पृष्ठ फ़ाइल प्रारूपों और पूर्व-गणना किए गए टकराव उपसर्गों के लिए विशिष्ट तरकीबें प्रदान करता है ताकि टकराव को तुरंत बनाया जा सके।
git clone. स्क्रिप्ट चलाएँ। हो गया।
Ange Albertini और Marc Stevens द्वारा।
लक्ष्य मौजूदा हमलों का व्यापक रूप से पता लगाना है - और रास्ते में यह दिखाना है कि MD5 कितना कमज़ोर है (किसी भी JPG, PNG, PDF, MP4, PE... का तुरंत टकराव) - और सामान्य फ़ाइल प्रारूपों का विस्तार से पता लगाना है ताकि यह निर्धारित किया जा सके कि वर्तमान या भविष्य के हमलों से उनका दोहन कैसे किया जा सकता है।
वास्तव में, एक ही फ़ाइल प्रारूप तरकीब का उपयोग कई हैशों पर किया जा सकता है (वही JPG तरकीबें MD5, malicious SHA-1 और SHA1 के लिए उपयोग की गई थीं), जब तक टकराव समान बाइट पैटर्न का पालन करते हैं।
ज्ञात हमलों की वर्तमान स्थिति - दिसंबर 2018 तक -:
(*) crypt के साथ उदाहरण - धन्यवाद Sven!```
import crypt crypt.crypt("5dUD&66", "br") 'brokenOz4KxMc' crypt.crypt("O!>',%$", "br") 'brokenOz4KxMc'
# हमले
MD5 और SHA1 64 बाइट्स के ब्लॉकों के साथ काम करते हैं।
यदि दो सामग्रियों A और B का हैश समान है, तो दोनों में समान सामग्री C जोड़ने पर हैश समान बना रहेगा।``` text
hash(A) = hash(B) -> hash(A + C) = hash(B + C)
Collisions एक ब्लॉक सीमा पर कुछ गणना किए गए कोलिज़न ब्लॉक डालकर काम करते हैं जो फ़ाइल में पहले जो कुछ आया था उस पर निर्भर करते हैं। ये कोलिज़न ब्लॉक कुछ मामूली अंतरों के साथ बहुत यादृच्छिक दिखते हैं (जो प्रत्येक हमले के लिए एक विशिष्ट पैटर्न का अनुसरण करते हैं) और वे छोटे अंतर उत्पन्न करेंगे जबकि अंततः इन ब्लॉकों के बाद हैश का मान समान हो जाता है।
इन अंतरों का दुरुपयोग विशिष्ट गुणों वाली मान्य फ़ाइलें तैयार करने के लिए किया जाता है।
फ़ाइल प्रारूप भी ऊपर-से-नीचे काम करते हैं, और उनमें से अधिकांश बाइट-स्तरीय चंक्स द्वारा काम करते हैं।
कुछ 'कमेंट' चंक्स को फ़ाइल चंक्स को ब्लॉक सीमाओं के साथ संरेखित करने के लिए डाला जा सकता है, विशिष्ट संरचनाओं को कोलिज़न ब्लॉक अंतरों के साथ संरेखित करने के लिए, बाकी कोलिज़न ब्लॉक यादृच्छिकता को फ़ाइल पार्सर्स से छिपाने के लिए, और अन्यथा मान्य सामग्री को पार्सर से छिपाने के लिए (ताकि वह दूसरी सामग्री देख सके)।
ये 'कमेंट' चंक्स अक्सर आधिकारिक रूप से वास्तविक कमेंट नहीं होते: वे केवल डेटा कंटेनर के रूप में उपयोग किए जाते हैं जिन्हें पार्सर अनदेखा कर देता है (उदाहरण के लिए, लोअरकेस से शुरू होने वाले ID वाले PNG चंक्स सहायक (ancillary) होते हैं, महत्वपूर्ण (critical) नहीं)।
अधिकांश समय, कोलिज़न ब्लॉक में अंतर का उपयोग किसी कमेंट चंक की लंबाई को संशोधित करने के लिए किया जाता है,
जो आमतौर पर इस चंक के डेटा से ठीक पहले घोषित किया जाता है:
इस चंक के छोटे और लंबे संस्करण के बीच के अंतर में,
एक और कमेंट चंक घोषित किया जाता है ताकि वह एक फ़ाइल की सामग्री A को पार कर सके।
इस फ़ाइल सामग्री A के बाद, बस एक और फ़ाइल सामग्री B जोड़ दें।

चूँकि फ़ाइल प्रारूप आमतौर पर एक टर्मिनेटर परिभाषित करते हैं जो पार्सर्स को उसके बाद रुकने पर मजबूर कर देता है,
A पार्सिंग समाप्त कर देगा, जिससे जोड़ा गया कंटेंट B अनदेखा कर दिया जाएगा।
तो आमतौर पर कम से कम दो कमेंट की आवश्यकता होती है - अक्सर तीन:
फ़ाइल प्रारूपों के ये सामान्य गुण इसे संभव बनाते हैं - इन्हें आमतौर पर कमजोरियों के रूप में नहीं देखा जाता, लेकिन इन्हें पहचाना या सामान्यीकृत (normalized) किया जा सकता है: