मुझे कौन सा क्रिप्टोग्राफ़िक हैश फ़ंक्शन चुनना चाहिए?


137

6 अलग हैशिंग एल्गोरिदम के साथ .NET फ्रेमवर्क जहाज:

  • एमडी 5: 16 बाइट्स (हैश करने का समय 500 एमबी: 1462 एमएस)
  • SHA-1: 20 बाइट्स (1644 एमएस)
  • SHA256: 32 बाइट्स (5618 एमएस)
  • SHA384: 48 बाइट्स (3839 एमएस)
  • SHA512: 64 बाइट्स (3820 एमएस)
  • RIPEMD: 20 बाइट्स (7066 एमएस)

इन कार्यों में से प्रत्येक अलग तरीके से करता है; MD5 सबसे तेज और RIPEMD सबसे धीमा है।

एमडी 5 का लाभ यह है कि यह अंतर्निहित गाइड प्रकार में फिट बैठता है; और यह टाइप 3 UUID का आधार हैSHA-1 हैश टाइप 5 UUID का आधार है। जिससे उन्हें पहचान के लिए उपयोग करना वास्तव में आसान हो जाता है।

एमडी 5 हालांकि टकराव के हमलों के प्रति संवेदनशील है , एसएचए -1 भी कमजोर है, लेकिन कुछ हद तक।

मुझे किन परिस्थितियों में हैशिंग एल्गोरिथम का उपयोग करना चाहिए?

विशेष रूप से मैं उत्तर देने के लिए उत्सुक हूं सवाल ये हैं:

  • क्या एमडी 5 पर भरोसा नहीं किया जाना है? सामान्य परिस्थितियों में जब आप MD5 एल्गोरिथ्म का उपयोग बिना किसी दुर्भावनापूर्ण इरादे के साथ करते हैं और किसी तीसरे पक्ष का कोई दुर्भावनापूर्ण इरादा नहीं है, तो आप किसी भी टकराव की उम्मीद करेंगे (जिसका अर्थ है दो मनमाने बाइट [] एक ही हैश का उत्पादन करना)

  • SHA1 की तुलना में RIPEMD कितना बेहतर है? (यदि इसका कोई बेहतर हो) गणना करने के लिए इसका 5 गुना धीमा है लेकिन हैश का आकार SHA1 के समान है।

  • फ़ाइल-नाम (या अन्य छोटे तार) हैशिंग को गैर-दुर्भावनापूर्ण टकराव मिलने की संभावना क्या है? (उदा। एक ही MD5 हैश के साथ 2 यादृच्छिक फ़ाइल-नाम) (MD5 / SHA1 / SHA2xx के साथ) सामान्य रूप से गैर-दुर्भावनापूर्ण टकराव के लिए क्या संभावनाएं हैं?

यह मेरे द्वारा उपयोग किया गया बेंचमार्क है:

    static void TimeAction(string description, int iterations, Action func) {
        var watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < iterations; i++) {
            func();
        }
        watch.Stop();
        Console.Write(description);
        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
    }

    static byte[] GetRandomBytes(int count) {
        var bytes = new byte[count];
        (new Random()).NextBytes(bytes);
        return bytes;
    }


    static void Main(string[] args) {

        var md5 = new MD5CryptoServiceProvider();
        var sha1 = new SHA1CryptoServiceProvider();
        var sha256 = new SHA256CryptoServiceProvider();
        var sha384 = new SHA384CryptoServiceProvider();
        var sha512 = new SHA512CryptoServiceProvider();
        var ripemd160 = new RIPEMD160Managed();

        var source = GetRandomBytes(1000 * 1024);

        var algorithms = new Dictionary<string,HashAlgorithm>();
        algorithms["md5"] = md5;
        algorithms["sha1"] = sha1;
        algorithms["sha256"] = sha256;
        algorithms["sha384"] = sha384;
        algorithms["sha512"] = sha512;
        algorithms["ripemd160"] = ripemd160;

        foreach (var pair in algorithms) {
            Console.WriteLine("Hash Length for {0} is {1}", 
                pair.Key, 
                pair.Value.ComputeHash(source).Length);
        }

        foreach (var pair in algorithms) {
            TimeAction(pair.Key + " calculation", 500, () =>
            {
                pair.Value.ComputeHash(source);
            });
        }

        Console.ReadKey();
    }

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

1
इसके असंबंधित को ठीक करें, यह सिर्फ एक आसान कार्यान्वयन विशिष्ट तथ्य है। मैं समझता हूं कि आप अनंत को 16 बाइट्स में फिट नहीं कर सकते। आप किसी भी हैशिंग एल्गोरिथ्म के साथ टकराव प्राप्त कर सकते हैं
सैम केसर

5
इसके अलावा एक गाइड सिर्फ इन-प्रैक्टिस अनोखा है, सिद्धांत रूप में यदि आप गिड्स उत्पन्न करते रहे तो अंततः आपको डुप्लिकेट मिल जाएगा।
सैम केसर

3
आपको वास्तव में एक हैश को GUID में नहीं रखना चाहिए , भले ही वह फिट हो। सरलतम उदाहरण: एक ही फाइल की दो प्रतियों में अलग-अलग GUID होनी चाहिए, लेकिन एक ही हैश। किसी व्यक्ति के नाम के पहले 8 अक्षर भी 16 बाइट्स में काफी अच्छे से फिट होते हैं।
dbkk

2
@ user2332868 SHA-1 के टूटने से आकस्मिक टकराव की संभावना पर कोई प्रभाव नहीं पड़ता है । जब दुर्भावनापूर्ण इरादे आपके उपयोग के लिए एक खतरा है, तो मुझे लगता है कि आँख बंद करके किसी भी हैश फ़ंक्शन को उठाना गलत है, और आपको अपने विशिष्ट मामले के लिए जोखिम / लागत विश्लेषण करने में समय बिताने की आवश्यकता है।
एंड्री टारनटोसोव

जवाबों:


138

क्रिप्टोग्राफी में, हैश फ़ंक्शन तीन अलग-अलग फ़ंक्शन प्रदान करते हैं।

  1. टकराव प्रतिरोध : किसी के लिए दो संदेश ( कोई भी दो संदेश) ढूंढना कितना कठिन होता है ।
  2. प्रतिरोध प्रतिरोध : एक हैश को देखते हुए, एक और संदेश को खोजने के लिए कितना कठिन है जो समान हैश करता है? एक तरह से हैश फ़ंक्शन के रूप में भी जाना जाता है ।
  3. दूसरा प्रीइमेज रेजिस्टेंस : एक मैसेज को देखते हुए, एक और मैसेज खोजें जो समान हैश करता है।

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

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

SHA1 में एक दोष है जो टकराव को सैद्धांतिक रूप से 2 ^ 80 से कम में पाया जा सकता है, इसकी लंबाई के लिए सुरक्षित हैश फ़ंक्शन की आवश्यकता होगी। हमले को लगातार संशोधित किया जा रहा है और वर्तमान में ~ 2 ^ 63 चरणों में किया जा सकता है - केवल कम्प्यूटेशनलता के वर्तमान दायरे के भीतर। इस कारण से NIST SHA1 के उपयोग को चरणबद्ध कर रहा है, जिसमें कहा गया है कि 2010 के बाद SHA2 परिवार का उपयोग किया जाना चाहिए।

SHA2 SHA1 के बाद बनाए गए हैश कार्यों का एक नया परिवार है। वर्तमान में SHA2 कार्यों के खिलाफ कोई ज्ञात हमला नहीं है। SHA256, 384 और 512 SHA2 परिवार के सभी भाग हैं, बस अलग-अलग मुख्य लंबाई का उपयोग करते हैं।

RIPEMD मैं बहुत अधिक टिप्पणी नहीं कर सकता, सिवाय इसके कि यह आमतौर पर SHA परिवारों के रूप में उपयोग नहीं किया जाता है, और इसलिए क्रिप्टोग्राफिक शोधकर्ताओं द्वारा बारीकी से जांच नहीं की गई है। अकेले उस कारण से मैं इस पर SHA फ़ंक्शंस के उपयोग की सिफारिश करूंगा। जिस कार्यान्वयन में आप इसका उपयोग कर रहे हैं वह काफी धीमा है, साथ ही यह इसे कम उपयोगी बनाता है।

निष्कर्ष में, कोई भी सबसे अच्छा कार्य नहीं है - यह सब इस बात पर निर्भर करता है कि आपको इसके लिए क्या चाहिए। प्रत्येक के साथ खामियों के प्रति सावधान रहें और आप अपने परिदृश्य के लिए सही हैश फ़ंक्शन का चयन करने में सक्षम होंगे ।


1
वास्तव में विस्तार के इस स्तर में जाने की सराहना करते हैं। यह बहुत मददगार है।
joelc

1
कुछ अनुप्रयोगों के लिए, यहां तक ​​कि एक गैर-क्रिप्टो-ग्रेड हैश फ़ंक्शन उपयुक्त हो सकता है। ओपी ने कभी उल्लेख नहीं किया कि यह विशेष रूप से पासवर्ड के लिए, या चुनौती-प्रतिक्रिया के लिए, या एक्सेस टोकन के लिए, या केवल स्ट्रिंग्स / फ़ाइलों के एक गुच्छा को अनुक्रमित करने के लिए है। दूसरी ओर, प्रदर्शन ओपी के लिए एक चिंता का विषय है ...
सेवा अलेक्सेयेव

111

सभी हैश फ़ंक्शन "टूटे" हैं

डब्बों में सिद्धांत का कहना है कि मुश्किल के रूप में है कि कोशिश के रूप में आप आप 2 छेद में अधिक से अधिक 2 कबूतरों फिट नहीं कर सकते करेंगे (बशर्ते आपने कबूतरों ऊपर कटा हुआ)। इसी तरह आप 2 ^ 128 स्लॉट में 2 ^ 128 + 1 नंबर फिट नहीं कर सकते। सभी हैश फ़ंक्शंस में परिमित आकार का एक हैश होता है, इसका मतलब है कि आप हमेशा एक टक्कर पा सकते हैं यदि आप "परिमित आकार" + 1 अनुक्रमों के माध्यम से खोज करते हैं। ऐसा करना संभव नहीं है। एमडी 5 के लिए नहीं और स्केन के लिए नहीं ।

MD5 / SHA1 / Sha2xx में कोई टक्कर टक्कर नहीं है

सभी हैश फ़ंक्शंस में टक्कर होती है, यह जीवन का एक तथ्य है। दुर्घटना से इन टकरावों में आना अंतर-लॉटरी लॉटरी जीतने के बराबर है । कहने का तात्पर्य यह है कि कोई भी अंतरजाल लॉटरी नहीं जीतता है , न कि जिस तरह से लॉटरी काम करती है। आप एक आकस्मिक MD5 / SHA1 / SHA2XXX हैश, कभी नहीं आएंगे। हर शब्द में हर शब्द, हर भाषा में, एक अलग मूल्य के लिए hashes। पूरे ग्रह के प्रत्येक मशीन पर प्रत्येक पथ का नाम, एक अलग MD5 / SHA1 / SHA2XXX हैश है। मुझे कैसे पता चलेगा, आप पूछ सकते हैं। ठीक है, जैसा कि मैंने पहले कहा, कोई भी कभी भी अंतर लॉटरी नहीं जीतता है।

लेकिन ... एमडी 5 टूट गया है

कभी-कभी यह तथ्य कि इसका टूटना कोई मायने नहीं रखता

जैसा कि यह खड़ा है कि एमडी 5 पर कोई पूर्व-छवि या दूसरा पूर्व-छवि हमले नहीं हैं

तो एमडी 5 के बारे में ऐसा क्या है, आप पूछ सकते हैं? किसी तीसरे पक्ष के लिए 2 संदेश उत्पन्न करना संभव है, जिनमें से एक ईवीआईएल है और दूसरा जो अच्छा है कि दोनों एक ही मूल्य पर हैश करते हैं। ( टकराव का हमला )

फिर भी, यदि आपको पूर्व-छवि प्रतिरोध की आवश्यकता है, तो वर्तमान RSA अनुशंसा MD5 का उपयोग नहीं करता है। सुरक्षा एल्गोरिदम की बात होने पर लोग सावधानी बरतते हैं।

तो मुझे .NET में किस हैश फंक्शन का उपयोग करना चाहिए?

  • MD5 का उपयोग करें यदि आपको गति / आकार की आवश्यकता है और जन्मदिन के हमलों या पूर्व-छवि हमलों की परवाह न करें।

मेरे बाद इसे दोहराएं, एमडी 5 टक्करों का कोई मौका नहीं है , दुर्भावनापूर्ण टकराव सावधानी से इंजीनियर हो सकते हैं। भले ही एमडी 5 पर आज तक कोई पूर्व-छवि हमले नहीं हुए हैं, सुरक्षा विशेषज्ञों की लाइन यह है कि एमडी 5 का उपयोग नहीं किया जाना चाहिए जहां आपको पूर्व-छवि हमलों से बचाव करने की आवश्यकता होती है। SAME SHA1 के लिए जाता है

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

  • यदि आप क्रिप्टोग्राफिक रूप से सुरक्षित हैश फ़ंक्शन चाहते हैं तो SHA2XX आधारित फ़ंक्शन का उपयोग करें।

किसी को भी SHA512 टक्कर नहीं मिली। कभी। उन्होंने वाकई बहुत कोशिश की है। उस मामले के लिए किसी को भी कभी SHA256 या 384 टक्कर नहीं मिली। ।

  • जब तक कि एक इंटरऑपरेबिलिटी परिदृश्य के लिए SHA1 या RIPEMD का उपयोग न करें।

RIPMED को SHAX और MD5 को एक ही जांच नहीं मिली है। SHA1 और RIPEMD दोनों जन्मदिन के हमलों की चपेट में हैं। वे .NET पर MD5 की तुलना में दोनों धीमी हैं और अजीब 20 बाइट आकार में आते हैं। इन कार्यों का उपयोग करने के लिए इसके बारे में, उनके बारे में भूल जाओ।

SHA1 टकराव के हमले 2 ^ 52 तक नीचे हैं, जब तक कि SHA1 टक्कर जंगली में नहीं होती तब तक बहुत लंबा नहीं होगा।

विभिन्न हैश फ़ंक्शन के बारे में अद्यतित जानकारी के लिए हैश फ़ंक्शन चिड़ियाघर पर एक नज़र है ।

लेकिन रुकिए, और भी है

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

समस्या यह है कि अगर किसी हमलावर को डेटाबेस से डंप हो जाता है, तो वह काफी प्रभावी रूप से जानवर-बल का उपयोग करके पासवर्ड का अनुमान लगा सकता है। प्रत्येक संयोजन वह केवल मिलिसेकंड का एक अंश लेता है, और वह सैकड़ों हजारों पासवर्ड एक सेकंड का प्रयास कर सकता है।

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


जबकि MD5 और SHA-1 दोनों ही कमजोर हो गए हैं, MD5 SHA-1 की तुलना में बहुत कमजोर है, जबकि केवल थोड़ा तेज है। वास्तविक MD5 टक्करों को वास्तविक-विश्व के कारनामों (CA प्रमाणपत्रों को बनाने के लिए) के लिए पाया और उपयोग किया जाता है, लेकिन जहां तक ​​मुझे पता है कि वास्तविक SHA-1 टक्कर नहीं मिली है (हालांकि ऑपरेशन की संख्या में कमी को बल से कम किया गया है)। और एमडी 5 कितना कमजोर है, यह देखते हुए मुझे आश्चर्य नहीं होगा कि एमडीए के लिए एसएचए -1 की तुलना में दूसरे प्राइमेज अटैक जल्द ही सामने आए। इस प्रकार, मुझे लगता है कि आपको SHA-1 का उपयोग करना चाहिए यदि आपको गति की आवश्यकता है और टक्कर प्रतिरोध की आवश्यकता नहीं है, और अन्यथा SHA-2 परिवार में से किसी एक का उपयोग करें।
ब्रायन कैंपबेल

1
@ अपने स्पष्ट रूप से स्पष्ट करें कि अगले कुछ वर्षों में लोग SHA1 पर टकराव के हमलों को चलाने में सक्षम होंगे, यह प्रभावी रूप से SHA1 को MD5 के रूप में उपयोगी बना देगा, CA प्रमाण पत्र एक टकराव का हमला है, इसी तरह कुछ वर्षों में लोग सक्षम होंगे SHA1 CA प्रमाणपत्रों पर समान हमला चलाने के लिए। हमला एक दुर्भावनापूर्ण पार्टी पर निर्भर करता है जो EVIL और GOOD प्रमाणपत्र बना रही है। एमडी 5 पर कोई ज्ञात प्राइमेज हमले नहीं हैं और यह तथ्य है कि टक्कर के हमले पूर्व-छवि के हमलों को कम या ज्यादा नहीं करते हैं।
सैम केसर

यह पासवर्ड के लिए आपके द्वारा उपयोग किए जाने वाले हैश के बारे में बहुत कम है, क्योंकि यह हैशेड है। यदि आपका नमक ज्ञात है, तो आपका डेटाबेस तुरंत एक शब्दकोश हमले के लिए असुरक्षित है; यदि आपका नमक प्रक्रियात्मक है, और आपकी फाइलसिस्टम से छेड़छाड़ की जाती है, तो आप (फिर से) असुरक्षित हैं; यदि आपका नमक छोड़ दिया जाता है तो आप फिर से समझौता कर सकते हैं। इस मुद्दे पर सुरक्षा, कोई फर्क नहीं पड़ता कि क्या है, हैशेड है। प्रमाण पत्र, मैं संबोधित नहीं करूंगा क्योंकि मैंने उनके साथ एक प्रोग्रामर (IE, निर्माण, समझ, आदि) के रूप में निपटाया नहीं है।
रॉबर्ट के

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

1
यह एक उत्कृष्ट उत्तर है क्योंकि यह व्यावहारिकता पर केंद्रित है। सुरक्षा के अलावा अन्य चीज़ों के लिए हैश का उपयोग किया जाता है (जैसे कि गैर-संवेदनशील डेटा के लिए कैश लुकअप कुंजी बनाना या यह निर्धारित करना कि कोई सीरीज़ ऑब्जेक्ट बदल गया है)। लक्षित हमले की संभावना लगभग शून्य होती है (कभी नहीं कहते हैं), और यहां तक ​​कि अगर एक हमला सफल रहा, तो इसका कोई भौतिक प्रभाव नहीं होगा। उत्कृष्ट काम सैद्धांतिक (सैद्धांतिक के बजाय) प्रभाव पर केंद्रित है।
DVK

35

अपडेट करें:

समय बदल गया है, हमारे पास SHA3 विजेता है। मैं SHA3 ​​प्रतियोगिता के विजेता केकेक (उर्फ SHA3 ) का उपयोग करने की सलाह दूंगा।

मूल उत्तर:

सबसे मजबूत करने के लिए मैं कहूंगा:

  1. RIPEMD BROKEN, का उपयोग कभी नहीं किया जाना चाहिए जैसा कि इस pdf में देखा जा सकता है
  2. MD-5 BROKEN, का उपयोग कभी नहीं किया जाना चाहिए, लैपटॉप के साथ 2 मिनट में तोड़ा जा सकता है
  3. SHA-1 BROKEN, का उपयोग कभी नहीं किया जाना चाहिए, मूलधन में टूट गया है, सप्ताह के अनुसार हमले बेहतर हो रहे हैं
  4. SHA-2 WEAK, शायद अगले कुछ वर्षों में टूट जाएगा। कुछ कमजोरियां पाई गई हैं। ध्यान दें कि आम तौर पर उच्च कुंजी आकार, कठिन हैश समारोह को तोड़ने के लिए है। जबकि मुख्य आकार = ताकत हमेशा सच नहीं होती है, यह ज्यादातर सच है। तो SHA-256 शायद SHA-512 से कमजोर है।
  5. Skein NO KNOWN WEAKNESSES, SHA-3 के लिए एक उम्मीदवार है । यह काफी नया है और इस प्रकार यह अप्रयुक्त है। इसे भाषाओं के एक समूह में लागू किया गया है।
  6. MD6 NO KNOWN WEAKNESSES, SHA-3 का एक और उम्मीदवार है। शायद स्किएन की तुलना में अधिक मजबूत है, लेकिन एकल कोर मशीनों पर धीमी है। स्केन की तरह यह अप्रयुक्त है। कुछ सुरक्षा दिमाग वाले डेवलपर्स इसका उपयोग मिशन महत्वपूर्ण भूमिकाओं में कर रहे हैं

व्यक्तिगत रूप से मैं MD6 का उपयोग करूंगा, क्योंकि कोई भी कभी भी पागल नहीं हो सकता है। यदि गति एक वास्तविक चिंता है तो मैं स्केन, या SHA-256 को देखूंगा।


5
मैं स्कीइन और एमडी 6 को सूची में उच्च स्थान पर नहीं रखूंगा; एक कारण है कि SHA-3 प्रतियोगिता 2012 के अंत तक समाप्त नहीं होगी। एक लंबे समय और आश्वस्त होने में बहुत सी आँखें लगती हैं कि एक हैश फ़ंक्शन वास्तव में सुरक्षित होने की संभावना है, और इन कार्यों में से कोई भी नहीं उस के लिए काफी लंबे समय के लिए किया गया है अभी तक।
एरिक बर्नेट

मैं आपकी भावनाओं से सहमत हूं, लेकिन मुझे लगता है कि समुदाय एक अजीब स्थिति में है। उपयोग में सभी हैश फ़ंक्शन खतरनाक रूप से टूटे होने के करीब हैं (शायद, शायद, SHA2 256-512 नहीं) और फिर भी हमें प्रतिस्थापन चुनने के लिए 2012 तक इंतजार करना होगा। अपना जहर चुनें: कमजोर / टूटा हुआ या अछूता (अधिकांश NIST उम्मीदवार 6 महीने से अधिक समय तक सार्वजनिक नहीं हुए हैं)? मुश्किल विकल्प।
एथन हेलेमैन

5
RIPEMD टूट गया है, लेकिन RIPEMD-128/160/256 अलग हैं, और टूटे नहीं हैं।
Bwooce

मैं .NET के लिए Skein के किसी भी प्रदर्शनकारी कार्यान्वयन से अवगत नहीं हूँ। मैं SkeinFish और nskein के पार आया हूं, और दोनों बहुत धीमी गति से थे ।
Cocowalla

1
मैं SHA-3 का उपयोग करने के साथ प्रतीक्षा करूंगा जब तक कि वास्तविक मानक वहां से बाहर न हो, कम से कम यदि आप वास्तव में एक मानक का पालन करना चाहते हैं। एल्गोरिथ्म में ही बहुत सारे विकल्प हैं।
पाओलो एबरमन

3

MD5 के बचाव में, एक मनमानी MD5 हैश के साथ फ़ाइल बनाने का कोई ज्ञात तरीका नहीं है। मूल लेखक को काम करने की टक्कर के लिए पहले से योजना बनानी चाहिए। इस प्रकार यदि रिसीवर प्रेषक पर भरोसा करता है, तो एमडी 5 ठीक है। MD5 टूट गया है अगर हस्ताक्षरकर्ता दुर्भावनापूर्ण है, लेकिन यह मानव-मध्य हमलों के लिए संवेदनशील होने के लिए ज्ञात नहीं है।


1
जब तक मैं इस क्षेत्र में एक विशेषज्ञ के माध्यम से नहीं कर रहा हूं, क्या यह आजकल क्रूर बल द्वारा मनमाने ढंग से एमडी 5 हैश की गणना करने के लिए संभव नहीं है?
mafu

@ मफू: देर से प्रतिक्रिया यहां, लेकिन किसी भी हैश की गणना जानवर बल के माध्यम से करना संभव है। यह सिर्फ एक बहुत लंबा समय लग सकता है।
वॉर्टी

@ इटज़ार्टी मैं विशेष रूप से आवश्यक समय का उल्लेख कर रहा था - चूंकि एमडी 5 बहुत छोटा है, मुझे लगा कि यह संभवत: इस पर एक उचित कंप्यूटिंग स्रोत फेंकने के लिए संभव हो सकता है (ई 3, या सस्ते कंप्यूटर ग्रिड कुछ ग्राफिक्स कार्ड के साथ कुछ मशीनें, कुछ उन पंक्तियों के साथ) और कुछ दिनों के भीतर, एक मनमानी MD5 हैश की गणना करने में सक्षम हो।
mafu

@ मफू एक पूर्व-छवि हमले में 128 बिट हैश के लिए 2 ^ 127 हैश चालान की लागत होती है। यह संभव से दूर है। 2 ^ 80 इनवोकेशन संभव है लेकिन पहले से ही बहुत महंगा है।
कोडइन्चौस

2

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


1
बहुत बार जब समस्या के समाधान पर चर्चा करते हुए मैं उल्लेख करता हूं कि मैं त्वरित पहचान के लिए एमडी 5 का उपयोग करता हूं (एक स्ट्रिंग हैशिंग), वे कहते हैं "लेकिन md5 टूट गया है ... इसका उपयोग न करें, sha1 का उपयोग करें" ... मैं वास्तव में इस की सदस्यता नहीं सोच रहा था अगर कुछ भी कुछ कमजोर हैश के साथ मौलिक रूप से टूट गया है, तो उन्हें बचा जाना चाहिए ... उदाहरण के लिए, वास्तविक काम के मामले जहां सामान्य डेटा टकराव पैदा करता है
सैम केसर

MD5 के रूप में देखकर पंद्रह साल तक लाखों लोगों के लिए ठीक काम किया, मुझे संदेह है कि यह आपके लिए ठीक है अगर हैश सुरक्षा महत्वपूर्ण नहीं है।
mqp

2
@ Sambo MD5 लगभग किसी भी मामले के लिए ठीक काम करता है, सिवाय जब आपके सिस्टम की वास्तविक सुरक्षा / अखंडता टकराव को रोकने पर निर्भर करती है
रेक्स एम

2

मैं इसमें झंकार करना चाहूंगा (इससे पहले कि md5 फट जाए) कि मैं अभी भी md5 का उपयोग बड़े पैमाने पर इसके क्रिप्टो के लिए अत्यधिक दोहन के बावजूद करता हूं।

जब तक आप टकरावों से बचाने की परवाह नहीं करते (आप अभी भी mm5 को hmac में उपयोग करने के लिए सुरक्षित हैं) और आप गति चाहते हैं (कभी-कभी आप धीमी हैश चाहते हैं) तो आप अभी भी md5 का उपयोग आत्मविश्वास से कर सकते हैं।


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

इसके अलावा, यदि डेटा या डेटा की आवश्यक सुरक्षा में दरार अवधि (इन दिनों iirc) के कुछ मिनटों की तुलना में कम उम्र होती है, तो MD5 बिल्कुल ठीक है। सिचुएशनली उपयोगी लेकिन फिर भी उपयोगी बिंदु है।
एनाकाटा

@annakata - ध्यान रखें कि आपको उन परिस्थितियों में प्रयोग करने योग्य होने के लिए कई संदेशों में पुन: उपयोग की जाने वाली चाबियों से बचना होगा।
स्टीव वेस्टब्रुक

2

BLAKE2 अल्गोरिथम पर एक नज़र रखना एक अच्छी विचारधारा होगी ।

जैसा कि यह वर्णित है, यह एमडी 5 से तेज है और कम से कम एसएचए -3 जितना सुरक्षित है। यह WinRar सहित कई सॉफ्टवेयर अनुप्रयोगों द्वारा भी कार्यान्वित किया जाता है ।


यह बहुत तेज़ हो सकता है सिवाय इसके कि कई कार्यान्वयनों में हार्डवेयर समर्थन होता है जो SHA-256 को काफी तेज बनाता है।
zaph

मैं सहमत हूँ। 2019 तक, ब्लेक 2 बी आज तक का सबसे अच्छा सामान्य-उद्देश्य हैश है। अन्य सभी विकल्पों की तुलना में महत्वपूर्ण रूप से तेज़, और कम सुरक्षित नहीं (किसी भी तरह से सार्थक तरीके से नहीं), और केवल 336 बाइट्स में निष्पादित किया जा सकता है RAM (168 के लिए blake2s), ओह, और यह छोटे-छोर वाले सीपीयू के लिए अनुकूलित है, जो है आज के सिस्टम पर प्रमुख एंडियन।
हन्सेन्रिक्रिक

0

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


1
हैश फ़ंक्शंस में आमतौर पर कुंजियों का उपयोग नहीं किया जाता है
एथन हेइलमैन

0

यहाँ आपके लिए मेरे सुझाव हैं:

  1. यदि आप हमलों की आशंका रखते हैं तो आपको एमडी 5 को भूल जाना चाहिए। ऑनलाइन उनके लिए कई इंद्रधनुष टेबल हैं , और आरआईएए जैसे निगमों को समतुल्य हैश के साथ दृश्यों का उत्पादन करने में सक्षम होने के लिए जाना जाता है।
  2. यदि आप कर सकते हैं तो एक नमक का उपयोग करें । संदेश में संदेश की लंबाई को शामिल करना एक उपयोगी हैश टक्कर बनाने के लिए बहुत मुश्किल बना सकता है।
  3. अंगूठे के एक सामान्य नियम के रूप में, अधिक बिट्स का अर्थ है कम टक्कर (कबूतर के सिद्धांत से) और धीमी गति से, और शायद अधिक सुरक्षित (जब तक आप एक गणित प्रतिभा जो कमजोरियों को पा सकते हैं)।

डेस्कटॉप इंटेल P4 कंप्यूटर के साथ 31 सेकंड में md5 टक्कर बनाने के लिए एक एल्गोरिथ्म का विवरण देने वाले पेपर के लिए यहां देखें।

http://eprint.iacr.org/2006/105


यह टिप्पणी बहुत पुरानी है और दफन होने के बजाय लगती है, लेकिन यह बिट - आरआईएए समतुल्य हैश के साथ दृश्यों का निर्माण करने में सक्षम होने के लिए जाना जाता है - मुझ पर छलांग लगाई, और मैं बहुत उत्सुक हूं कि इसके लिए क्या संदर्भ था। विशेष रूप से, MD5 को 8 साल पहले ब्रूटफोर करना 2017 की तुलना में थोड़ा कम तुच्छ था, इसलिए उनके पास एक बहुत अच्छा कारण होना चाहिए था।
०३६__
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.