Git एक क्रिप्टोग्राफ़िक हैश फ़ंक्शन का उपयोग क्यों करता है?


139

तेज गैर-क्रिप्टोग्राफिक हैश फ़ंक्शन के बजाय Git SHA-1 का उपयोग क्यों करता है , एक क्रिप्टोग्राफ़िक हैश फ़ंक्शन?

संबंधित प्रश्न:

स्टैक ओवरफ्लो प्रश्न Git संस्करण संख्या के रूप में SHA-1 का उपयोग क्यों करता है? पूछता है कि Git SHA-1 का उपयोग कमिट के लिए अनुक्रमिक संख्या के विपरीत क्यों करता है।


व्यक्तिगत रूप से मुझे लगता है कि SHA-2 पर टूटे SHA-1 का उपयोग करना समय से पहले अनुकूलन था।
कोडइन्चोस

7
@CodesInChaos: और इसके अलावा, कोड में किसी विशेष एल्गोरिथ्म को पकाना, DI सिद्धांतों का एक भयानक उल्लंघन था। XML कॉन्फ़िगरेशन फ़ाइल में कहीं होना चाहिए ;-)
स्टीव जेसोप

दिसम्बर २.१६ के साथ अद्यतन २०१ G २.१६ (Q1 २०१:): एक वैकल्पिक SHA का समर्थन करने का प्रयास चल रहा है: " क्यों Git अधिक आधुनिक SHA का उपयोग नहीं करता है? "।
वॉन

कोई अच्छा 160-बिट या उच्च गैर-क्रिप्टो हैश नहीं हैं। अधिकांश 32-बिट, 64-बिट या 128-बिट फ़ंक्शंस के लिए अत्यधिक अनुकूलित हैं। 128-बिट ठीक है, लेकिन मुझे लग रहा है कि गिट जैसे बड़े प्रोजेक्ट के लिए 128-बिट थोड़ा कम है। यदि एक तेज़, उच्च-गुणवत्ता वाला 224/256-बिट हैश निकला, तो यह शायद आदर्श होगा।
bryc

जवाबों:


197

TLDR;


आप खुद ही देख सकते हैं कि लिनुस टॉर्वाल्ड्स से , जब उन्होंने 2007 में वापस Google को प्रस्तुत किया :
(मेरा जोर)

हम चेकसम की जाँच करते हैं जो क्रिप्टोग्राफिक रूप से सुरक्षित माना जाता है। कोई भी SHA-1 को तोड़ने में सक्षम नहीं है, लेकिन बिंदु है, SHA-1 जहाँ तक गिट का संबंध है, एक सुरक्षा विशेषता भी नहीं है। यह विशुद्ध रूप से एक संगति जाँच है
सुरक्षा भागों कहीं और हैं। बहुत से लोग मानते हैं कि git SHA-1 का उपयोग करता है और SHA-1 का उपयोग क्रिप्टोग्राफिक रूप से सुरक्षित सामान के लिए किया जाता है, वे सोचते हैं कि यह एक विशाल सुरक्षा विशेषता है। यह सुरक्षा के साथ करने के लिए कुछ भी नहीं है, यह सिर्फ सबसे अच्छा हैश आप प्राप्त कर सकते हैं।

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

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

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


दिसम्बर २.१६ के साथ अद्यतन २०१ G २.१६ (Q1 २०१:): एक वैकल्पिक SHA का समर्थन करने का यह प्रयास चल रहा है: " क्यों Git अधिक आधुनिक SHA का उपयोग नहीं करता है? "।


मैंने " कैसे एक बूँद पर SHA-1 टकराव होगा? " किसी विशेष SHA1 उपसर्ग (फिर भी एक अत्यंत महंगा प्रयास) के साथ एक इंजीनियर को सकते हैं
लेकिन जैसे-जैसे बिंदु बनी हुई है, एरिक सिंक "में उल्लेख है : क्रिप्टोग्राफिक Hashes Git (" संस्करण नियंत्रण उदाहरण द्वारा (2011) किताब :

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

कम टकराव की दर के साथ अच्छा गैर-क्रिप्टोग्राफिक हैश खोजना मुश्किल है , जब तक कि आप " आनुवंशिक प्रोग्रामिंग के साथ स्टेट-ऑफ-द-आर्ट-गैर-क्रिप्टोग्राफिक हैशिंग " जैसे शोध पर विचार न करें ।

आप " हैशिंग स्पीड-अप के लिए गैर-क्रिप्टोग्राफ़िक हैश एल्गोरिथम के उपयोग पर विचार " भी पढ़ सकते हैं , जिसमें उदाहरण के लिए " xxhash ", एक अत्यंत तेज़ गैर-क्रिप्टोग्राफ़िक हैश एल्गोरिदम है, जो रैम सीमाओं के करीब गति पर काम कर रहा है।


Git में हैश को बदलने के बारे में चर्चा नई नहीं है:

(लिनस टॉर्वाल्ड्स)

वास्तव में मोज़िला कोड में कुछ भी शेष नहीं है , लेकिन हे, मैंने इसे शुरू किया। रेट्रोस्पेक्ट में मुझे संभवतः PPC asm कोड से शुरू करना चाहिए था जो पहले से ही ब्लॉकिंग को पूरी तरह से करता था - लेकिन यह "20/20 hindight" तरह की बात है।

इसके अलावा हे, मोज़िला कोड क्रूड का एक भयंकर ढेर था, इसलिए मैं इतना आश्वस्त था कि मैं चीजों पर सुधार कर सकता हूं। तो यह इसके लिए एक तरह का स्रोत है, भले ही यह किसी भी वास्तविक शेष कोड की तुलना में प्रेरक पक्ष के बारे में अधिक हो;)

और आपको सावधान रहने की जरूरत है वास्तविक अनुकूलन लाभ को मापने के तरीके के

(लिनस टॉर्वाल्ड्स)

मैं आपको बहुत गारंटी दे सकता हूं कि यह केवल चीजों को बेहतर बनाता है क्योंकि यह जीसीपी क्रैप कोड बनाता है, जो तब पी 4 के कुछ मुद्दों को छुपाता है।

(जॉन टप्सेल - johnflux)

SHA-1 से नए एल्गोरिथ्म में गिट को अपग्रेड करने की इंजीनियरिंग लागत बहुत अधिक है । मुझे यकीन नहीं है कि यह अच्छी तरह से कैसे किया जा सकता है।

सबसे पहले हमें शायद git का एक संस्करण तैनात करने की आवश्यकता है (चलो इस वार्तालाप के लिए इसे संस्करण 2 कहते हैं) जो एक नए हैश मान के लिए एक स्लॉट होने की अनुमति देता है, भले ही वह उस स्थान को न पढ़े या उसका उपयोग न करे - यह सिर्फ उपयोग करता है SHA-1 हैश मान जो दूसरे स्लॉट में है।

इस तरह से एक बार जब हम अंततः गिट का एक नया संस्करण तैनात करते हैं, तो हम इसे संस्करण 3 कहते हैं, जो SHA-1 हैश के अलावा SHA-3 हैश का उत्पादन करता है, git संस्करण 2 का उपयोग करने वाले लोग अंतर-ऑपरेट करना जारी रख पाएंगे।
(हालांकि, इस चर्चा के अनुसार, वे असुरक्षित हो सकते हैं और जो लोग अपने SHA-1-only पैच पर भरोसा करते हैं वे असुरक्षित हो सकते हैं।)

संक्षेप में, किसी भी हैश पर स्विच करना आसान नहीं है।


फरवरी 2017 को अपडेट करें: हाँ, यह एक टकराने वाले SHA1: shattered.io की गणना करने के लिए संभव है

GIT कैसे प्रभावित होता है?

GIT दृढ़ता से SHA-1 पर सभी फ़ाइल ऑब्जेक्ट्स की पहचान और अखंडता जाँच के लिए निर्भर करता है।
एक सौम्य स्रोत कोड और एक पिछले दरवाजे एक ही हेड कमिट हैश और विभिन्न सामग्रियों के साथ दो जीआईटी रिपॉजिटरी बनाना अनिवार्य रूप से संभव है।
एक हमलावर संभावित रूप से लक्षित उपयोगकर्ताओं को या तो रिपॉजिटरी की सेवा दे सकता है। इसके लिए हमलावरों को अपनी टक्कर की गणना करने की आवश्यकता होगी।

परंतु:

9,223,372,036,854,775,808 SHA1 अभिकलन पर इस हमले की आवश्यकता थी। इसने 6,500 वर्षों के एकल-सीपीयू संगणनाओं और 110 वर्षों के एकल-जीपीयू संगणनाओं के बराबर प्रसंस्करण शक्ति ली।

तो चलिए घबराइए नहीं अभी तक।
" बूँद पर SHA-1 टकराव कैसे होगा? " पर अधिक देखें ।


8
ऐसा लगता है कि उच्च गुणवत्ता वाले गैर-क्रिप्टोग्राफिक हैश फ़ंक्शन की हाल की फसल, जैसे xxhash, गिट के ठीक बाद थोड़ी देर से बाहर आई।
प्रिक्सोलिटिक

3
@Praxeolitic वास्तव में। SHA1 को किसी अन्य हैश के साथ बदलने के बारे में चर्चा की गई है, लेकिन इसके लिए बस थोड़े से काम की आवश्यकता होगी, कुछ के लिए, जो अब ठीक है।
वॉन मार्क

"हम जानते हैं कि हैश अच्छी तरह से वितरित है और हमें कुछ वितरण मुद्दों के बारे में चिंता करने की ज़रूरत नहीं है" - यह मैल के लिए एक मुद्दा क्यों है?
roded

@ टक्कर की दर एससीएम के लिए अच्छी तरह से अनुकूल होने के लिए काफी कम है जहां डेटा आमतौर पर यादृच्छिक नहीं है लेकिन परीक्षण फाइलें हैं।
वॉनक

1
दरअसल, क्रिप्टोग्राफिक हैश का उपयोग करने का एक सुरक्षा कारण है। जब एक लेखक (लिनुस कहते हैं) एक रिलीज (कहना लिनक्स की) में कटौती करना चाहते हैं, तो लोग स्रोत कोड जानना चाहते हैं जो वे डाउनलोड करते हैं जो लेखक को रिलीज में शामिल करने का इरादा रखता है। यह अंत करने के लिए रिलीज में अंतिम हैश टैग किया गया है और टैग पर हस्ताक्षर किए गए हैं। यदि टैग में समाप्त होने वाली प्रतिबद्ध हैश श्रृंखला क्रिप्टोग्राफिक रूप से सुरक्षित नहीं थी, तो स्रोत को लेखक के उद्देश्य के अलावा किसी अन्य चीज़ के लिए स्मूद किया जा सकता है।
क्रिस्टोफर किंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.