एक हैशिंग एल्गोरिथ्म "सुरक्षित" क्या करता है?


19

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

तो भेद क्या है? क्या आउटपुट केवल एक यादृच्छिक संख्या हैशेड चीज़ का प्रतिनिधित्व नहीं कर रहा है? क्या कुछ हैशिंग एल्गोरिदम सुरक्षित करता है?


8
यह प्रश्न आईटी सुरक्षा एसई साइट के लिए बेहतर अनुकूल है ।
बर्नार्ड

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

2
एक बहुत ही इसी तरह के सवाल पहले से ही आईटी सुरक्षा पर कहा गया है
ChrisF

जवाबों:


34

हर क्रिप्टोग्राफिक हैश फ़ंक्शन से तीन गुण हैं जो एक चाहता है H:

  • प्रीइमेज रेजिस्टेंस : दिया गया है h, इसके xसाथ किसी भी मूल्य को खोजना मुश्किल होना चाहिए h = H(x)

  • दूसरा preimage प्रतिरोध : यह देखते हुए x1, यह मुश्किल होना चाहिए x2 != x1के साथ H(x1) = H(x2)

  • टकराव प्रतिरोध : इसके x1 != x2साथ दो मूल्यों को खोजना कठिन होना चाहिए H(x1) = H(x2)

हैश टेबल (स्ट्रिंग्स) के लिए सामान्य प्रोग्रामिंग भाषाओं में उपयोग किए जाने वाले हैश कार्यों के साथ, आमतौर पर इनमें से कोई भी नहीं दिया जाता है, वे केवल इसके लिए प्रदान करते हैं:

  • कमज़ोर टक्कर प्रतिरोध : डोमेन के चयनित मानों को बेतरतीब ढंग से (या "आमतौर पर") के लिए, टक्कर की संभावना कम होती है। यह कहता है कि हमलावर के बारे में जानबूझकर टकराव पैदा करने की कोशिश नहीं की जा रही है, न ही शिकार को खोजने की कोशिश की जा रही है।

उपरोक्त तीन गुण हर क्रिप्टोग्राफ़िक हैश फ़ंक्शन के लिए (बीच में) डिज़ाइन लक्ष्य हैं। कुछ कार्यों के लिए (जैसे MD4, SHA-0, MD5) यह ज्ञात है कि यह विफल रहा (कम से कम आंशिक रूप से)। वर्तमान पीढ़ी (SHA-2) को सुरक्षित माना जाता है, और अगले एक ("सिक्योर हैश अल्गोरिथम 3") वर्तमान में एक प्रतियोगिता के बाद मानकीकृत होने की प्रक्रिया में है

कुछ उपयोगों के लिए (जैसे पासवर्ड हैशिंग और पासवर्ड से कुंजी व्युत्पत्ति), वास्तव में उपयोग किए जाने वाले मानों xका डोमेन इतना छोटा है कि इस स्थान को ब्रूट-फोर्स करना सामान्य (तेज) सुरक्षित हैश कार्यों के साथ संभव हो जाता है, और यह तब है जब हम भी चाहते हैं:

  • धीमी गति से निष्पादन : यह देखते हुए x, मूल्य की गणना करने के लिए संसाधनों की कुछ न्यूनतम (अधिमानतः विन्यास योग्य) मात्रा लेता है H(x)

लेकिन अधिकांश अन्य उपयोगों के लिए, यह नहीं चाहता है, इसके बजाय एक चाहता है:

  • तेजी से निष्पादन : यह देखते हुए x, के मूल्य की गणना H(x)जितनी तेजी से संभव है (जबकि अभी भी सुरक्षित है)।

कुछ कंस्ट्रक्शन (जैसे पीबीकेडीएफ 2 और स्क्रीप्ट) एक धीमी गति से हैश फ़ंक्शन बनाने के लिए इसे अक्सर पुनरावृति करते हैं।

कुछ और विवरणों के लिए, हमारी बहन साइट क्रिप्टोग्राफी स्टैक एक्सचेंज पर हैश टैग पर एक नज़र डालें ।


3

सुरक्षित का मतलब है कि कोई व्यक्ति टक्कर का उपयोग करके आपको त्रुटि के लिए प्रेरित करना चाहता है (यानी यह तथ्य कि दो स्रोतों को एक ही मूल्य पर हैशेड किया गया है) में कठिनाइयाँ होंगी।

कुछ विशेषताएं:

  • हैश को जानना, उस मान पर हैश रखने वाली फ़ाइल बनाना मुश्किल है (संस्करण, नई फ़ाइल का हिस्सा वांछित हैश के साथ दिया गया है)

  • दो अलग-अलग फ़ाइलों का निर्माण करना जिनके लिए समान मान हैश कठिन है (प्रकार, फ़ाइलों का हिस्सा दिया गया है)


3

प्राथमिक अंतर बहुत सरल है: एक सामान्य हैश का अर्थ आकस्मिक टकरावों की संख्या को कम करना है, इस हद तक कि यह प्रक्रिया में पूरी तरह से धीमा किए बिना कर सकता है।

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

उत्तरार्द्ध के उदाहरण के लिए: यदि हैश की गणना करने में 50 एमएस लगते हैं, तो इसका सामान्य उपयोगकर्ता के लॉगिन पर कोई सामग्री प्रभावित नहीं होगी (यानी, लॉगिन करते समय अधिकांश उपयोगकर्ता 50ms का अंतर नहीं देख पाएंगे)। एक ही समय में, अगर कोई हमलावर डिक्शनरी अटैक करना चाहता है, तो केवल 20 हैश का उत्पादन करने में सक्षम होना एक गंभीर बाधा है। दूसरे शब्दों में, सुरक्षित हैश के लिए, किसी प्रकार के कारण से, धीमी गति से बेहतर है।


3
क्रिप्टोग्राफ़िक हैश फ़ंक्शंस के डोमेन में, दो महत्वपूर्ण उपसमूह हैं: तेज़ वाले (संदेश प्रमाणीकरण, हस्ताक्षर और इसी तरह के लिए उपयोग किए जाते हैं), और धीमे वाले - कुंजी व्युत्पत्ति और पासवर्ड हैशिंग के लिए उपयोग किए जाते हैं। इनका मिश्रण न करें, दोनों के लिए आवेदन हैं।
पाओलो एबरमन

असल में, हैश फ़ंक्शन भी हैं जो टकराव को अधिकतम करने के लिए डिज़ाइन किए गए हैं : साउंडेक्स एक उदाहरण है। जाहिर है, यह एक बहुत भद्दा सुरक्षित हैश फ़ंक्शन बनाता है।
Jörg W Mittag

@ JörgWMittag: एक सुरक्षित हैश के रूप में न केवल भद्दा, बल्कि एक हैश टेबल के साथ उपयोग करने के लिए काफी गरीब होगा। फिर से, जबकि निश्चित रूप से कुछ हद तक हैश की तरह, मैं साउंडेक्स को एक हैश फ़ंक्शन कहने में संकोच करता हूं, सिर्फ इसलिए कि इसका इरादा और उपयोग सामान्य हैश फ़ंक्शन से पूरी तरह से अलग है।
जेरी कॉफिन

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

3

इसे पढ़ें http://www.codinghorror.com/blog/2012/04/speed-hashing.html यह सब कुछ बहुत बेहतर समझा देगा जितना मैं कभी समझा सकता था। यहाँ लेख में दो सबसे महत्वपूर्ण शीर्ष लेख हैं जो सीधे आपके प्रश्न को संबोधित करते हैं:

  • सिक्योर हैश को टैम्पर प्रूफ बनाया गया है
    • इनपुट डेटा में छोटे एकल बिट परिवर्तनों के साथ इसका आउटपुट मौलिक रूप से बदलता है
  • सुरक्षित हैश को धीमी गति से डिजाइन किया जाता है

अंत में उसका टीएल; डीआर अनुभाग:

यदि आप एक उपयोगकर्ता हैं:

सुनिश्चित करें कि आपके सभी पासवर्ड 12 वर्ण या अधिक हैं, आदर्श रूप से बहुत अधिक हैं। मैं पास वाक्यांशों को अपनाने की सलाह देता हूं, जो न केवल पासवर्ड (यदि टाइप नहीं) की तुलना में याद रखना बहुत आसान है, बल्कि उनकी लंबाई के कारण शुद्ध रूप से मजबूर करने वाले जानवर के खिलाफ हास्यास्पद रूप से सुरक्षित है।

यदि आप एक डेवलपर हैं:

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


4
जेफ ने इसे दूसरे बिंदु पर गलत किया है ... जबकि कुछ उपयोगों के लिए (जैसे पासवर्ड हैशिंग और पासवर्ड से कुंजी व्युत्पत्ति) आप अन्य उपयोगों (जैसे संदेश प्रमाणीकरण, हस्ताक्षर आदि) के लिए धीमी गति से (तेज) (सुरक्षित) होना चाहते हैं। हैश फंक्शन अच्छे हैं।
पाओलो एबरमन

आप सही हैं पाओलो। हैश का प्रदर्शन हैश के अनुप्रयोग पर निर्भर करता है। हालाँकि, धीमे हैश हमेशा तेज़ वाले की तुलना में अधिक सुरक्षित होते हैं। यदि आप तेज़ हैश का उपयोग करते हैं तो इसका कारण यह है कि आप प्रदर्शन के लिए सुरक्षा का त्याग कर रहे हैं।
नैट

2
@ नैट "अधिक सुरक्षित" हमेशा अस्पष्ट होता है, लेकिन यहां तक ​​कि सबसे धर्मार्थ अनुप्रयोग के तहत, "धीमी गति से चलने वाली राख हमेशा तेज़ लोगों की तुलना में अधिक सुरक्षित होती है" निश्चित रूप से गलत है। वहाँ बहुत सारे अनुप्रयोग हैं जहाँ एक हैश की गति अप्रासंगिक है।
गाइल्स का SO- बुराई पर रोक '22

@ क्या आप एक उदाहरण दे सकते हैं? यह वास्तव में मेरे लिए सच लगता है, लेकिन अधिक बारीकियाँ मददगार होंगी।
नैट

2
@Nate हैश का सबसे स्पष्ट अनुप्रयोग डेटा के एक टुकड़े की अखंडता की पुष्टि कर रहा है: एक सुरक्षित लेकिन संभवतः कम बैंडविड्थ चैनल पर हैश को संचारित करें, एक असुरक्षित चैनल पर संभवतः बड़े पेलोड को संचारित करें, फिर जांच करें कि प्राप्त पेलोड अपेक्षित है हैश। हशिंग हस्ताक्षर करने के तरीकों में प्रमुखता से शामिल है (जहां आप न केवल अखंडता को सत्यापित करते हैं, बल्कि यह भी कि आपको डेटा किसने भेजा है)। पासवर्ड हैक करना बल्कि अपवाद है।
गिलेस एसओ- बुराई को रोकना '

2

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

एक हैश को आम तौर पर "सुरक्षित" माना जाता है, यदि एक संदेश M, एक हैश फ़ंक्शन हैश (), और एक हैश मान H (M) द्वारा उत्पादित बिट L में लंबाई के साथ दिया जाता है, तो निम्न में से कोई भी इससे कम में प्रदर्शन नहीं किया जा सकता है। (2 एल ) समय:

  • दिया गया हैश () और एच, एम। का उत्पादन (प्रीइमेज रेजिस्टेंस)
  • दिया गया हैश () और एम, एक अलग एम 2 का उत्पादन करें जैसे कि हैश (एम 2 ) == एच। (कमजोर टक्कर प्रतिरोध)
  • दिया गया हैश (), किसी भी M 1 और M 2 का उत्पादन करें जैसे कि हैश (M 1 ) == हैश (M 2 )। (मजबूत टक्कर प्रतिरोध)

इसके अतिरिक्त, एक "सुरक्षित" हैश में एक हैश की लंबाई L होनी चाहिए जैसे कि 2 Lकिसी कंप्यूटर के लिए दिए गए मौजूदा हार्डवेयर को करने के लिए संभव कदम नहीं है। 32-बिट पूर्णांक हैश में केवल 2.1 बिलियन मान हो सकते हैं; जबकि एक प्राइमेज अटैक (एक संदेश जो एक विशिष्ट हैश एच पैदा करता है) को खोजने में थोड़ा समय लगेगा, यह कई कंप्यूटरों के लिए संभव नहीं है, विशेष रूप से सरकारी एजेंसियों के हाथों में जो कोड-ब्रेकिंग के साथ चार्टर्ड हैं। इसके अलावा, एक एल्गोरिथ्म जो यादृच्छिक संदेश बनाता है और संग्रहीत करता है और उनकी हैश संभावना के अनुसार होगा, केवल 77,000 संदेशों की कोशिश करने के बाद प्रत्येक नए संदेश के साथ डुप्लिकेट हैश खोजने में 50% शॉट होगा, और एक हिट करने के लिए 75% मौका होगा केवल 110,000 के बाद नकल। यहां तक ​​कि 64-बिट हैश में अभी भी केवल 5 बिलियन मानों की कोशिश के बाद टकराने का 50% मौका है। इस तरह छोटी हैश पर जन्मदिन के हमले की शक्ति है। इसके विपरीत,डीकिल नंबर (1.5 * 10 34 )।

क्रिप्टोग्राफिक हैश पर अधिकांश प्रदर्शन किए गए हमले टकराव के हमले हैं, और 2 एल से कम समय में टकराव वाले संदेश उत्पन्न करने की क्षमता का प्रदर्शन किया है (अधिकांश अभी भी घातीय-समय है, लेकिन घातांक को आधा करना जटिलता में एक महत्वपूर्ण कमी है। एक 256-बिट हैश को 128-बिट के रूप में हल करना आसान है, एक 128-बिट को 64-बिट के रूप में हल करना आसान है, आदि)।

छोटे हैश आकार के अलावा, अन्य कारक जो हैश डेन्स्ट्रैबली असुरक्षित बना सकते हैं:

कम काम - हैशटेबल या अन्य "चेकसम" के उपयोग के लिए डिज़ाइन किया गया एक हैशट आमतौर पर कम्प्यूटेशनल रूप से सस्ती होने के लिए डिज़ाइन किया गया है। यह बहुत आसान है कि एक जानवर बल पर हमला करता है।

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

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


0

हाथ में कार्य के लिए सही एल्गोरिदम का उपयोग करें।

सीआरसी का उपयोग त्रुटि का पता लगाने / सुधार के लिए किया जाता है।

क्रिप्टोग्राफिक संदेश डाइजेस्ट जैसे SHA2 का उपयोग क्रिप्टोग्राफ़िक निर्माण (डिजिटल हस्ताक्षर, एमएसीएस, कुंजी व्युत्पत्ति / पासवर्ड हैशिंग कार्यों) और सुरक्षा प्रोटोकॉल के लिए बिल्डिंग ब्लॉक के रूप में किया जाता है।

हैश टेबल / शब्दकोशों / नक्शे में SipHash का उपयोग किया जाता है

जिसे आप असुरक्षित हैशिंग एल्गोरिदम कहते हैं, उसका उपयोग हैश टेबल में नहीं किया जाना चाहिए , जैसा कि निम्नलिखित सीवीई प्रविष्टियों द्वारा सिद्ध किया गया है: CVE-2003-0364, CVE-2011-4461, CVE-2011-4838, CVE-2011-48-85, CVE-2011- 4462, CVE-2011-4815, CVE-2012-0840, CVE-2012-5371 , CVE-2012-5374, CVE-2012-5375

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