आपके प्रश्न के SHA-1 हैश टक्कर भाग के लिए, यह कुछ उत्तरों द्वारा संबोधित किया गया है।
हालाँकि, इस प्रकार का एक बड़ा हिस्सा जिस फ़ाइल के साथ हम काम कर रहे हैं, उस पर टिका है:
फ़ाइल की समग्र सामग्री और संचालन को बनाए रखता है (लेकिन निश्चित रूप से अब इसमें दुर्भावनापूर्ण सामग्री शामिल है जो मूल रूप से परिवर्तित सामग्री नहीं थी )
इसका अर्थ यह है कि परिवर्तनों का पता लगाने पर बहुत भिन्नता है:
- यदि यह एक हस्ताक्षरित निष्पादन योग्य है, न कि (उचित) मौका: आपको किसी तरह दो हैश टकराव प्राप्त करने होंगे: फ़ाइल का SHA-1 और आंतरिक .exe हस्ताक्षर।
- यदि यह एक अहस्ताक्षरित निष्पादन योग्य है। ऑपरेशन।
- यदि यह एक स्रोत कोड फ़ाइल या समान संरचना (.cs, .c, .hc, .rb, .yml, .config, .xml, .pl, .bat, .ini) के अतिरिक्त है, परिवर्धन, संशोधन या निष्कासन। वैध टिप्पणी वाक्यविन्यास के लिए विवश किया जा सकता है कि यह परिवर्तन अधिकांश उपयोगों (इसे संकलित करने या चलाने, इसे पाठ संपादक के साथ नहीं खोलने) से स्पष्ट नहीं होगा।
- यदि यह एक .iso या .zip या अन्य कंटेनर प्रारूप है, तो यह अधिक संभावना नहीं है क्योंकि अधिकांश यादृच्छिक परिवर्तन कंटेनर को दूषित कर देंगे। यह करना संभव है: एक फर्जी फ़ाइल प्रविष्टि जोड़ें या कंटेनर के भीतर एक सामग्री को बदल दें और इसे रीचेक करें, लेकिन आप जटिलता की एक परत जोड़ रहे हैं और परिणाम की जांच करने के लिए अतिरिक्त समय जोड़ रहे हैं, साथ ही सम्मान के साथ स्वतंत्रता की सीमित डिग्री प्राप्त कर रहे हैं। कैसे और क्या सामग्री को बदला जा सकता है।
- यदि यह एक पाठ या पाठ की तरह प्रारूप है, तो उन्हें लगभग किसी भी तरह से बदला जा सकता है जबकि आप अभी भी 'मान्य' फ़ाइल हैं, हालांकि सामग्री संभवतः ध्यान देने योग्य होगी।
- .Rtf, .doc, .html, .xslx, और अन्य मार्कअप-एस्क फॉर्मेट जैसे कई प्रारूपों के साथ, उन्हें उन तरीकों से जोड़ा या संशोधित किया जा सकता है जो पार्सर्स द्वारा undetectable होंगे, इसलिए लंबाई के अलावा (या एक विवश लंबाई के साथ भी) , कम स्वतंत्रता) फाइलों को बदल दिया जा सकता है (अंततः) एक हैश टकराव हो सकता है, जबकि अभी भी न केवल एक वैध फ़ाइल है, लेकिन यह किसी भी तरह से नहीं बदला गया है जो कि उन विशिष्ट अनुप्रयोगों के लिए दिखाई देगा, जिनके साथ उनका उपयोग किया जाएगा।
तो, जो कुछ आप छोड़ रहे हैं वह यह है कि जो भी संरचना गैर-रक्तस्रावी है और उसमें कुछ डिग्री है, उसमें टकराव कैसे हो सकता है:
- अपनी इच्छानुसार कोई भी कार्यात्मक परिवर्तन (शायद दुर्भावनापूर्ण सामग्री का सम्मिलन) करें और फ़ाइल स्वरूप विशिष्ट वैधता को बनाए रखने के लिए कोई अतिरिक्त परिवर्तन करें
- एक अनुभाग जोड़ें जो गैर-कार्यात्मक होगा (टिप्पणी ब्लॉक के बीच, 3k कैरेज़ रिटर्न के साथ एक टेक्स्ट फ़ाइल के बहुत अंत में, वर्तमान टिप्पणी ब्लॉक को अलग करें)
- संशोधन के लिए एक चरित्र / कोड पॉइंट / बाइट जोड़ें या चुनें और हर संभव वैध संयोजन की कोशिश करें (प्रत्येक बाइट संयोजन अलग-अलग एन्कोडिंग के लिए मान्य नहीं है, उदाहरण के लिए)।
- हैश को पुनः प्राप्त करें, देखें कि क्या टक्कर मेल खाती है।
- अगर यह नहीं है, गोटो 3।
मान लीजिए कि आपके पास एक सुपर फास्ट कंप्यूटर और एक छोटा फ़ाइल है, जैसे कि एक वैध बाइट अनुक्रम के साथ संशोधन और हैश को फिर से विभाजित करने में 1 मिलीसेकंड लेता है (शायद कुछ समर्पित हार्डवेयर की आवश्यकता होती है)। यदि हैश वितरण पूरी तरह से यादृच्छिक है और पूरी रेंज में वितरित किया जाता है, तो आपको SHA-1 हर 2^160
प्रयास (इसे मजबूर करने वाला जानवर) के साथ टकराव मिलेगा ।
2^160/1000/60/60/24/365.24
= 4.63x10^37 years
= 46,300,000,000,000,000,000,000,000,000,000,000,000 years
= 46 undecillion years.
लेकिन हे, चलो कोशिश करते हैं 2^60
और 2^52
संस्करण, और दिखावा करते हैं कि वे हमें किसी भी तरह से फ़ाइल को संशोधित करने की अनुमति देते हैं (जैसे वे नहीं) और वे भी, प्रत्येक प्रयास में 1ms में किया जा सकता है:
2^52 yields 142,714 years
/*humans might still be around to care, but not about these antiquated formats*/
2^60 yields 3.65x10^7 years = 36,500,000 years
/*machines will probably have taken over anyway*/
लेकिन हे, तुम भाग्यशाली हो सकते हैं। वास्तव में, वास्तव में, अधिक-से-चमत्कार-से-कुछ भी-लोग-कॉल-चमत्कार भाग्यशाली।