2010-02-28 9 views
8

मैं समझता हूं कि कबूतर सिद्धांत के अनुसार, यदि आइटमों की संख्या कंटेनरों की संख्या से अधिक है, तो कम से कम एक कंटेनर में एक से अधिक आइटम होंगे। क्या इससे कोई फर्क पड़ता है कि यह कंटेनर होगा? यह एमडी 5, एसएचए 1, एसएचए 2 हैश पर कैसे लागू होता है?हैश कब टक्कर लगी है?

उत्तर

14

कोई फर्क नहीं पड़ता कि यह कौन सा कंटेनर है, और वास्तव में यह क्रिप्टोग्राफिक हैंश के लिए महत्वपूर्ण नहीं है; अधिकbirthday paradox अधिक महत्वपूर्ण है, जो कहता है कि टक्कर खोजने से पहले आपको केवल sqrt(numberNeededByPigeonHolePrincipal) मानों की आवश्यकता है।

इस प्रकार, हैश को इतना बड़ा होना चाहिए कि खोज स्थान का वर्ग-रूट ब्रूट-बल के लिए बहुत बड़ा हो। SHA1 के लिए स्क्वायर-रूट-ऑफ-सर्च-स्पेस 2 है, और मार्च 2012 तक, उसी SHA1-hash के साथ कोई भी दो मान कभी नहीं मिला है (हालांकि मुझे लगता है कि अगले वर्ष या दो में ..); SHA2 के साथ, हैश का एक परिवार जिसमें सभी की एक बड़ी खोज-स्थान होती है। हालांकि एमडी 5 broken for a while रहा है।

+0

इच्छा है कि मैं इस जवाब को दो बार ऊपर उठा सकता हूं। – Cuga

+0

यह ध्यान देने योग्य है कि 2017 में अभ्यास में एसएचए 1 टूट गया था https://shattered.io/ –

2

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

यह "सही हैश" कार्यान्वयन पर लागू नहीं होता है जो यादृच्छिक वितरण से बेहतर करने का प्रयास करता है - आपके द्वारा उल्लिखित एल्गोरिदम के विपरीत।

ने माइकल को उल्लेख किया है, टकराव होने से काफी पहले वहाँ स्लॉट के रूप में के रूप में कई आइटम हैं। यदि आप birthday paradox को संभालना चाहते हैं तो आपके पास सुंदर टकराव हैंडलिंग (या एक परिपूर्ण हैश) होना चाहिए।

4

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

ध्यान दें कि एक हैश टक्कर दुनिया के अंत नहीं है। उदाहरण के लिए, हैश तालिका में उपयोग किए जाने पर, इसका मतलब यह है कि एक से अधिक आइटम स्लॉट में संग्रहीत किया जाता है, और तालिका कोड को खोजने के लिए थोड़ा और अधिक ट्रैफिक टाइम बढ़ाना होगा, लुकअप समय को थोड़ा बढ़ाएं।

आप लोगों को एमडी 5 को "टूटा हुआ" हैशिंग एल्गोरिदम के रूप में देखेंगे, वास्तव में, यह क्रिप्टोग्राफिक हैश के रूप में उपयोग करने के लिए केवल एक गरीब है। यह आपके द्वारा बनाए जाने वाले एक से बेहतर होगा।

+0

MD5 टूटा हुआ है, क्योंकि यह क्रिप्टोग्राफ़िक रूप से सुरक्षित नहीं है; एमडी 5 के बदले विभिन्न एसएचए एल्गोरिदम का इस्तेमाल किया जाना चाहिए। उस ने कहा, एमडी 5 काफी अच्छा है अगर आप इसका इस्तेमाल कर रहे हैं तो डाउनलोड की गई फाइल के चेकसम के रूप में है। –

+0

अधिकांश समय md5 का उपयोग क्रिप्टोग्राफ़िक रूप से सुरक्षित नहीं होता है। यह एक बहुत तेज़ हैश है जो ज्यादातर मामलों में काफी अच्छा है। यह hes की तरह नहीं है, यह पासवर्ड के लिए इसका उपयोग करने का सुझाव देता है ... या क्या आप एक हैशिंग एल्गोरिदम में उपयोग के लिए वास्तव में सुरक्षित और जानबूझकर धीमी गति से चलने वाले एल्गोरिदम को लागू करने का सुझाव दे रहे हैं, जहां स्थिति तेजी से बदलती है? कम से कम यह क्रिप्टोग्राफिक रूप से सुरक्षित होगा। एमडी 5 के पास अभी भी एक वैध उद्देश्य है और इसमें बहुत अच्छा है। –

+0

@MrTortoise: हाँ, यह बिल्कुल सही है। गैर-क्रिप्टोग्राफिक उपयोग के लिए एमडी 5 ठीक है। यदि यह दूसरों के लिए स्पष्ट नहीं है, ** ** सुरक्षा-संवेदनशील (क्रिप्टोग्राफिक) स्थितियों के लिए ** MD5 का उपयोग न करें। –

0

मैं जो आवेदन आप हैश समारोह का उपयोग कर रहे एक महत्वपूर्ण अंतर है के लिए लगता है। हैशिंग कंटेनर में लगातार टकराव, उदाहरण के लिए, प्रदर्शन को कम कर सकता है। क्रिप्टोग्राफी में लगातार टक्कर के पास और अधिक विनाशकारी परिणाम होंगे (देखें: cryptographic hash function on Wikipedia)।

टकराव अपेक्षाकृत आसानी से भी "सभ्य" हैशिंग एल्गोरिथ्म के साथ होता है। उदाहरण के लिए, जावा में,

String s = new String(new char[size]); 

हमेशा के लिए 0. है यही कारण है, सभी स्ट्रिंग्स केवल \0 जावा में 0 पर हैश युक्त हैश।


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

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

0

आपके आवेदन के आधार पर, एमडीए, एसएचए 1/2 आदि जैसे क्रिप्टोग्राफिक हैंश आदर्श विकल्प नहीं हो सकते हैं, ठीक है क्योंकि वे पूरी तरह से यादृच्छिक रूप से दिखाई देते हैं, इस प्रकार आप जन्मदिन के विरोधाभास के अनुसार टकराव देते हैं। परंपरागत रूप से, शेष ऑपरेशन के आधार पर सरल हैश का उपयोग करने का एक कारण यह है कि चाबियाँ सीरियल नंबर या समान होने की उम्मीद थीं, ताकि शेष ऑपरेशन यादृच्छिक रूप से अपेक्षाकृत कम टकराव बनाए रखे। जैसे यदि कुंजी पूर्णांक हैं 1..1000 यदि आपके हैश फ़ंक्शन कुंजी मोड 100 9 हैं तो आपके पास आकार 100 9 के कंटेनर में कोई टक्कर नहीं हो सकती है। लोग कभी-कभी कंटेनर आकार और हैश फ़ंक्शन को ध्यान से चुनकर सिस्टम को हाथ से ट्यून करेंगे एक विभाजित भी प्राप्त करें।

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

संबंधित मुद्दे