2009-05-13 3 views
11

मैं कुछ डेटा ऑब्जेक्ट्स का 32-बिट हैश बनाने के लिए देख रहा हूं। चूंकि मुझे अपना हैश फ़ंक्शन लिखना पसंद नहीं है और एमडी 5 उपलब्ध है, मेरा वर्तमान दृष्टिकोण एमडी 5 हैश से पहले 32 बिट्स (यानी पहले 8 हेक्स अंक) का उपयोग करना है। क्या यह स्वीकार्य है?क्या एमडी 5 हैश के पहले 32 बिट्स किसी अन्य सबस्ट्रिंग के रूप में "यादृच्छिक" के रूप में हैं?

दूसरे शब्दों में, किसी भी अन्य सबस्ट्रिंग के रूप में "यादृच्छिक" के रूप में एक एमडी 5 हैश की पहली 32 बिट्स हैं? या क्या कोई कारण है कि मैं आखिरी 32 बिट्स पसंद करूंगा? या शायद चार 32-बिट सबस्ट्रिंग एक साथ XOR'ing?

कुछ रिक्तिपूर्व स्पष्टीकरण:

  • इन हैश क्रिप्टोग्राफी द्वारा सुरक्षित होने की जरूरत नहीं है।
  • मैं एमडी 5 के प्रदर्शन से चिंतित नहीं हूं - यह मेरी आवश्यकताओं के लिए पर्याप्त तेज़ है।
  • इन हैंशों को केवल "यादृच्छिक" होने की आवश्यकता है कि टक्कर दुर्लभ हैं।
  • इस प्रणाली में, वस्तुओं की संख्या 10,000 से अधिक नहीं होनी चाहिए (यथार्थ रूप से यह संभवतः आधे से अधिक नहीं होने वाला है)। तो सबसे बुरे मामले में किसी भी टकराव का सामना करने की संभावना लगभग 1% होनी चाहिए (माना जाता है कि पर्याप्त "यादृच्छिक" हैश पाया जाता है)।
+0

क्या आपके पास पहले से ही एक MD5 हैश गणना की गई है? (उदाहरण के लिए सबवर्सन चेकइन के मेटाडेटा के हिस्से के रूप में) या क्या आपको एमडी 5 हैश की गणना करना है? यदि उत्तरार्द्ध, मैं w/@ जोहान्स की टिप्पणी से सहमत हूं, सीआरसी 32 बहुत आसान होगा। –

+1

जाहिर है, "आपका प्रश्न अमान्य है क्योंकि आपको इसे इस तरह से करना चाहिए" टिप्पणियों को संबोधित करने के लिए एसओ पर कोई रास्ता नहीं है ... – Kip

+0

क्षमा करें, मेरा मतलब यह नहीं था कि * एमडी 5 हैश का उपयोग न करें, मैं बस मतलब एक सीआरसी 32 आसान है। आप या आपके ग्राहक एकमात्र ऐसे हैं जो निर्णय ले सकते हैं कि एल्गोरिदम आपकी आवश्यकताओं को पूरा करता है। –

उत्तर

10

किसी भी अच्छे हैश फ़ंक्शन के लिए व्यक्तिगत बिट्स लगभग यादृच्छिक होना चाहिए। इसलिए आपको एमडी 5 हैश के पहले 32 बिट्स का उपयोग करने के लिए सुरक्षित होना चाहिए।

वैकल्पिक रूप से आप सीआरसी 32 का भी उपयोग कर सकते हैं जो गणना करने के लिए बहुत तेज होना चाहिए (और कोड लगभग 20 लाइनें है)।

+0

"मैं एमडी 5 के प्रदर्शन से चिंतित नहीं हूं - यह मेरी आवश्यकताओं के लिए पर्याप्त तेज़ है।" – Kip

+3

किप: प्रदर्शन या नहीं, सीआरसी 32 आपको 32 बिट हैश देता है, जो वही है जो आप चाहते हैं। – dwc

9

दूसरे शब्दों में, पहले 32 बिट बस के रूप में किसी भी अन्य सबस्ट्रिंग के रूप में "यादृच्छिक" एक MD5 हैश के कर रहे हैं?

हां। अगर उत्तर नहीं था, तो एमडी 5 पर्याप्त सुरक्षित नहीं होगा। (निश्चित रूप से, इसमें कुछ मामूली क्रिप्टोग्राफ़िक कमजोरियां हैं लेकिन मुझे किसी भी सांख्यिकीय के बारे में पता नहीं है)

+0

MD5 _isn't_ पर्याप्त रूप से सुरक्षित नहीं है क्योंकि कई हमलों ने दिखाया है :) – Joey

+4

यह कथन केवल तभी सत्य है जब योग्यताएं शामिल की जाती हैं। सभी टक्कर हमलों को अक्षम करने के लिए पर्याप्त रूप से सुरक्षित नहीं है। यह (अब तक) प्रीमीज हमलों को अक्षम करने के लिए पर्याप्त रूप से सुरक्षित है। देखें http://www.vpnc.org/hash.html –

+0

भी quibble नहीं है, लेकिन मेरी पोस्ट नहीं कहा था कि एमडी 5 पर्याप्त सुरक्षित था। :-) –

1

यहां एक पुराना सवाल है लेकिन यह अक्सर आता है। जवाब निश्चित रूप से नहीं है, अन्यथा एक एमडी 5 स्ट्रिंग 32 बिट से अधिक होने की आवश्यकता नहीं होगी।

भले ही, एक MD5 स्ट्रिंग बिल्कुल यादृच्छिक नहीं है - यह पूरी तरह से और लगातार उसी इनपुट को पुन: उत्पन्न करता है (जो एंटी-यादृच्छिक रूप से बहुत अधिक है ;-))।

चाहे आपके उद्देश्यों के लिए पर्याप्त रूप से अद्वितीय है या नहीं, आपके उद्देश्य पर निर्भर करता है।

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