2010-09-29 13 views
21

यहाँ 3 उदाहरण md5 हैशक्या हैश (md5, sha1) का कोई सबस्ट्रिंग किसी अन्य की तुलना में अधिक "यादृच्छिक" है?

$ md5 -s "1" && md5 -s "2" && md5 -s "3" 
MD5 ("1") = c4ca4238a0b923820dcc509a6f75849b 
MD5 ("2") = c81e728d9d4c2f636f067f89cc14862c 
MD5 ("3") = eccbc87e4b5ce2fe28308fd9f2a7baf3 

मैं किसी भी हैश से 8 वर्ण ले जाना चाहते थे कहो है। हैश का प्रारंभिक हिस्सा अंत से अधिक "यादृच्छिक" है? मध्य? या सभी सबस्ट्रिंग समान रूप से "यादृच्छिक" हैं?

+0

मेरी राय में, "यादृच्छिक" सही शब्द नहीं है। हैश फ़ंक्शंस उतने निर्धारक हैं जितना वे प्राप्त करते हैं; इसमें कोई यादृच्छिकता नहीं है। आपने शायद कहा था कि हैश के एक सबस्ट्रिंग में मूल के रूप में एक ही संलयन प्रतिरोध होता है (निश्चित रूप से अलग-अलग लंबाई के लिए लेखांकन)। – Jens

+0

मैं बस इस सवाल से पूछने वाला था .. – insaner

उत्तर

17

मैं खुद उत्सुक था, इसलिए मैं आगे बढ़ गया और इसका परीक्षण करने के लिए program लिखा। कोड को संकलित करने के लिए आपको Crypto++ की आवश्यकता होगी।

अस्वीकरण: जब क्रिप्टोग्राफी की बात आती है, या यहां तक ​​कि सामान्य रूप से गणित भी है, तो मुझे पैर में खुद को शूट करने के लिए पर्याप्त पता है। तो, निम्नलिखित परिणामों को नमक के अनाज के साथ लें और ध्यान रखें कि मेरे पास केवल उन औजारों का एक सरसरी ज्ञान है जिसका मैं उपयोग कर रहा हूं।

मैंने केवल तीन सबस्ट्रिंग का नमूना लिया: पहले 8 बाइट्स, मध्य 8 बाइट्स, और अंतिम 8 बाइट्स। लंबी कहानी छोटी, वे समान रूप से यादृच्छिक हैं।

हालांकि, एक छोटे नमूना स्थान का उपयोग करते समय, ऐसा प्रतीत होता है कि अंतिम 8 बिट थोड़ा और यादृच्छिक हैं। नमूना स्थान जितना बड़ा होगा, लगभग तीन सबस्ट्रिंग्स पूर्ण यादृच्छिकता तक पहुंचेंगी।


1000 पुनरावृत्तियों:

First: 0.995914 
Middle: 0.996546 
Last: 0.998104 

5000 पुनरावृत्तियों:

First: 0.998387 
Middle: 0.998624 
Last: 0.999501 

10000 पुनरावृत्तियों:

First: 0.999614 
Middle: 0.999457 
Last: 1 

30000 पुनरावृत्तियों:

012,351,
First: 1 
Middle: 1 
Last: 1 

"अनियमितता" क्रिप्टो ++ के MaurerRandomnessTest वर्ग से मापा जाता है। संदर्भ के लिए, उपरोक्त कोड से संकलित निष्पादन योग्य में 0.632411 का यादृच्छिकता मूल्य है और प्रोजेक्ट गुटेनबर्ग से डाउनलोड शेक्सपियर के मैकबेथ की एक प्रति 0.566991 का यादृच्छिक मूल्य है।

+0

मैं इसे स्वीकार कर रहा हूं क्योंकि यह वास्तव में "यादृच्छिकता" को प्रदर्शित करता है। धन्यवाद @ कुरिज! –

11

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

9

नाइटपिक: "यादृच्छिक" यहां उपयोग करने का गलत शब्द है, क्योंकि हैश फ़ंक्शन निर्धारक हैं। उत्पादन के लिए भारी बदलाव के कारण मूल रूप से, इनपुट के हर बिट के लिए:

का जवाब दे तुम क्या मतलब है :) का सवाल है, हैश फंक्शन के एक वांछनीय संपत्ति Avalanche effect को प्राप्त कर रहा है। इसलिए, एक अच्छी तरह से डिज़ाइन किए गए हैश के लिए, प्रत्येक सबस्ट्रिंग को अक्सर समान रूप से प्रभावित किया जाना चाहिए ("यादृच्छिक" के रूप में) किसी अन्य के रूप में।

+1

मैंने हिमस्खलन प्रभाव से जोड़ने के लिए इस कारण के लिए उद्धरण में यादृच्छिक शब्द रखा है :) +1। –

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