2012 से मेरे पिछले उत्तर को जोड़ने के लिए , अब (फ़रवरी 2017, पांच साल बाद), वास्तविक SHA-1 का एक उदाहरण टूटकर बिखर गया है । जहाँ आप दो टकराने वाली पीडीएफ फाइलों को तैयार कर सकते हैं: वह है SHA- पहली पीडीएफ फाइल पर 1 डिजिटल हस्ताक्षर जिसे दूसरी पीडीएफ फाइल पर वैध हस्ताक्षर के रूप में भी दुरुपयोग किया जा सकता है।
यह भी देखें कि " वर्षों से मृत्यु के दरवाजे पर, व्यापक रूप से इस्तेमाल किया जाने वाला SHA1 फ़ंक्शन अब मर चुका है ", और यह दृष्टांत है ।
26 फरवरी का अपडेट: लाइनस ने Google+ पोस्ट में निम्नलिखित बिंदुओं की पुष्टि की :
(१) पहला उतर - आकाश नहीं गिर रहा है। सुरक्षा हस्ताक्षर जैसी चीजों के लिए एक क्रिप्टोग्राफिक हैश का उपयोग करने और गिट जैसी सामग्री-पता योग्य प्रणाली के लिए "सामग्री पहचानकर्ता" बनाने के लिए एक का उपयोग करने के बीच एक बड़ा अंतर है।
(२) दूसरी बात, इस विशेष SHA1 हमले की प्रकृति का अर्थ है कि वास्तव में इसके खिलाफ शमन करना बहुत आसान है, और उस शमन के लिए पहले से ही पैच के दो सेट हैं।
(३) और अंत में, वास्तव में कुछ अन्य हैश के लिए एक बहुत ही सीधा संक्रमण है जो दुनिया को नहीं तोड़ेगा - या यहां तक कि पुराने गिट रिपॉजिटरी को भी।
उस संक्रमण के बारे में, Q1 2018 Git 2.16 को हैश एल्गोरिथ्म का प्रतिनिधित्व करते हुए एक संरचना जोड़कर देखें। उस संक्रमण का कार्यान्वयन शुरू हो गया है।
Git 2.19 (Q3 2018) को शुरू करते हुए , Git ने SHA-256 को NewHash के रूप में चुना है , और इसे कोड को एकीकृत करने की प्रक्रिया में है (इसका अर्थ है कि SHA1 अभी भी डिफ़ॉल्ट है (Q2 2019, Git 2.21), लेकिन SHA2 उत्तराधिकारी होगा)
मूल उत्तर (25 फरवरी) लेकिन:
- यह एक बूँद बनाने की अनुमति देता है, हालाँकि पेड़ का SHA-1 तब भी बदलता रहेगा क्योंकि जाली बूँद का आकार मूल एक जैसा नहीं हो सकता है: " git हैश की गणना कैसे की जाती है? " एक बूँद SHA1 सामग्री और आकार के आधार पर गणना की जाती है ।
यह हालांकि के लिए कुछ मुद्दा हैgit-svn
। या खुद svn के साथ , जैसा कि यहां देखा गया है ।
- जैसा कि मैंने अपने मूल उत्तर में उल्लेख किया है , इस तरह के एक प्रयास की लागत अभी भी (6,500 सीपीयू वर्ष और 100 जीपीयू वर्ष) के लिए निषेधात्मक है " वेल्लिप अनीता फ़ंक्शंस के जीवनकाल " में वैलेरी अनीता अरोरा भी देखें ।
- जैसा कि पहले टिप्पणी की गई थी, यह सुरक्षा या विश्वास के बारे में नहीं है , लेकिन डेटा अखंडता (डी-डुप्लीकेशन और त्रुटि का पता लगाने) जो कि आसानी से पता लगाया जा सकता है
git fsck
, जैसा कि लिनुस टॉर्वाल्ड्स ने आज उल्लेख किया है। git fsck
एक के बाद छिपे हुए अपारदर्शी डेटा के साथ एक प्रतिबद्ध संदेश के बारे में चेतावनी देगा NUL
(हालांकि NUL
यह हमेशा एक कपटपूर्ण फ़ाइल में मौजूद नहीं है )।
हर कोई चालू नहीं करता है transfer.fsck
, लेकिन गिटहब करता है: किसी भी विकृत वस्तु या टूटी हुई कड़ी के मामले में किसी भी तरह का धक्का होगा। हालाँकि ... एक कारण है कि यह डिफ़ॉल्ट रूप से सक्रिय नहीं है ।
- एक पीडीएफ फाइल में बाइनरी डेटा हो सकता है जिसे आप जाली एसएचए -1 उत्पन्न करने के लिए बदल सकते हैं, जैसा कि जाली स्रोत कोड के रूप में विरोध किया जाता है।
एक ही हेड कमिट हैश और विभिन्न सामग्रियों के साथ दो गिट रिपोजिटरी बनाने में वास्तविक मुद्दा। और फिर भी, हमले को जटिल बना हुआ है ।
- लाइनस कहते हैं :
एक SCM की पूरी बात यह है कि यह एक बार की घटना के बारे में नहीं है, बल्कि निरंतर इतिहास के बारे में है। यह भी मौलिक रूप से इसका मतलब है कि एक सफल हमले को समय के साथ काम करने की आवश्यकता है, और पता लगाने योग्य नहीं है।
यदि आप एक SCM को एक बार बेवकूफ बना सकते हैं, तो अपना कोड डालें, और यह अगले सप्ताह पता लगाया जाता है, आपने वास्तव में कुछ भी उपयोगी नहीं किया। आपने ही अपने को जलाया।
जॉय हेस उन pdf को एक Git रेपो में आज़माता है और उसने पाया :
इसमें एक ही SHA और आकार के साथ दो फाइलें शामिल हैं, जो सामग्री के लिए हेडर को प्रीपेन्ड करने के तरीके के लिए अलग-अलग ब्लब्स प्राप्त करते हैं।
joey@darkstar:~/tmp/supercollider>sha1sum bad.pdf good.pdf
d00bbe65d80f6d53d5c15da7c6b4f0a655c5a86a bad.pdf
d00bbe65d80f6d53d5c15da7c6b4f0a655c5a86a good.pdf
joey@darkstar:~/tmp/supercollider>git ls-tree HEAD
100644 blob ca44e9913faf08d625346205e228e2265dd12b65 bad.pdf
100644 blob 5f90b67523865ad5b1391cb4a1c010d541c816c1 good.pdf
इन टकराने वाली फ़ाइलों के समान डेटा को लागू करते समय, अन्य टकराव उत्पन्न होते हैं, डेटा को प्रस्तुत नहीं करता है।
तो हमले का मुख्य वेक्टर (कमिट करने के लिए) होगा :
- एक नियमित प्रतिबद्ध वस्तु उत्पन्न करें;
- चुने हुए उपसर्ग के रूप में संपूर्ण प्रतिबद्ध ऑब्जेक्ट + NUL का उपयोग करें, और
- टकराने वाली अच्छी / बुरी वस्तुओं को उत्पन्न करने के लिए समान-उपसर्ग टकराव के हमले का उपयोग करें।
- ... और यह बेकार है क्योंकि अच्छी और बुरी प्रतिबद्ध वस्तुएं अभी भी उसी पेड़ की ओर इशारा करती हैं!
इसके अलावा, आप पहले से ही प्रत्येक फ़ाइल में मौजूद SHA-1 के खिलाफ क्रिप्टोनालिटिक टकराव के हमलों का पता लगा सकते हैं cr-marcstevens/sha1collisiondetection
जीआईटी में इसी तरह के चेक को जोड़ने से कुछ गणना लागत आ जाएगी ।
हैश बदलने पर, लिनक्स टिप्पणियाँ :
हैश के आकार और हैश एल्गोरिथम की पसंद स्वतंत्र मुद्दे हैं।
संभवतः आप जो करते हैं वह 256-बिट हैश पर स्विच करता है, उस आंतरिक और देशी git डेटाबेस में उपयोग करें, और फिर डिफ़ॉल्ट रूप से केवल
40-वर्ण हेक्स स्ट्रिंग के रूप में हैश दिखाते हैं (इस तरह की कैसे हम पहले से ही चीजों को संक्षिप्त करते हैं कई स्थितियां)।
इस तरह git के आस-पास के उपकरण भी तब तक बदलाव नहीं देखते हैं जब तक कि कुछ विशेष " --full-hash
" तर्क (या " --abbrev=64
" या जो कुछ भी - डिफ़ॉल्ट रूप से पारित नहीं हो जाता है जिसे हम 40 में संक्षिप्त करते हैं)।
फिर भी, एक संक्रमण योजना (SHA1 से दूसरे हैश फ़ंक्शन तक) अभी भी जटिल होगी , लेकिन सक्रिय रूप से अध्ययन किया जाएगा।
एक convert-to-object_id
अभियान है प्रगति पर :
20 मार्च को अपडेट करें: GitHub एक संभावित हमले और इसकी सुरक्षा का विवरण देता है :
SHA-1 नामों को विभिन्न तंत्रों के माध्यम से विश्वास सौंपा जा सकता है। उदाहरण के लिए, Git आपको क्रिप्टोग्राफिक रूप से एक प्रतिबद्ध या टैग पर हस्ताक्षर करने की अनुमति देता है। ऐसा करना केवल कमिट या टैग ऑब्जेक्ट पर ही हस्ताक्षर करता है, जो बदले में अन्य ऑब्जेक्ट्स में उनके SHA-1 नामों का उपयोग करके वास्तविक फ़ाइल डेटा को इंगित करता है। उन वस्तुओं में टकराव एक हस्ताक्षर का उत्पादन कर सकता है जो वैध प्रतीत होता है, लेकिन जो कि हस्ताक्षरकर्ता की तुलना में अलग-अलग डेटा को इंगित करता है। इस तरह के एक हमले में हस्ताक्षरकर्ता केवल आधे हिस्से को देखता है, और पीड़ित दूसरे को आधा देखता है।
सुरक्षा:
हालिया हमला SHA-1 एल्गोरिथ्म में कमजोरियों का फायदा उठाने के लिए विशेष तकनीकों का उपयोग करता है जो बहुत कम समय में टकराव का पता लगाते हैं। ये तकनीक बाइट्स में एक पैटर्न छोड़ती हैं, जो एक टकराने वाले जोड़े के आधे के SHA-1 की गणना करते समय पता लगाया जा सकता है।
GitHub.com अब प्रत्येक SHA-1 के लिए यह पता लगाता है कि यह गणना करता है, और यदि ऑपरेशन इस बात का सबूत है कि वस्तु एक टकराने वाली जोड़ी का आधा हिस्सा है, तो उसे रोक देती है। यह हमलावरों को गिटहब का इस्तेमाल करने से रोकने के लिए एक परियोजना को समझाने के लिए "निर्दोष" को उनकी टक्कर का आधा हिस्सा मानने से रोकता है, साथ ही उन्हें दुर्भावनापूर्ण आधे की मेजबानी करने से रोकता है।
देख "sha1collisiondetection
मार्क स्टीवंस द्वारा "
फिर से, Q1 2018 Git 2.16 के साथ एक संरचना हैश एल्गोरिदम का प्रतिनिधित्व करते हुए, एक नए हैश में संक्रमण का कार्यान्वयन शुरू हो गया है।
जैसा कि ऊपर उल्लेख किया गया है, नया समर्थित हैश SHA-256 होगा ।