एमडी5

एमडी5 संदेश-डाइजेस्ट एल्गोरिथम एक व्यापक रूप से उपयोग किया जाने वाला हैश फ़ंक्शन है जो 128-बिट हैश मान का उत्पादन करता है। एमडी5 को रोनाल्ड रिवेस्ट द्वारा 1991 में पहले के हैश फ़ंक्शन एमडी4, को बदलने के लिए डिज़ाइन किया गया था और 1992 में आरएफसी 1321 के रूप में निर्दिष्ट किया गया था।

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

इतिहास और क्रिप्टएनलिसिस
एमडी5 एमआईटी के प्रोफेसर रोनाल्ड रिवेस्ट (रिवेस्ट, 1992) द्वारा डिज़ाइन किए गए संदेश डाइजेस्ट एल्गोरिदम की श्रृंखला में से एक है। जब विश्लेषणात्मक कार्य ने संकेत दिया कि एमडी5 के पूर्ववर्ती एमडी4 के असुरक्षित होने की संभावना थी, तो रिवेस्ट ने 1991 में एमडी5 को एक सुरक्षित प्रतिस्थापन के रूप में डिजाइन किया। (हंस डोबबर्टिन ने वास्तव में बाद में एमडी4 में कमजोरियों का पता लगाया।)

1993 में, डेन बोअर और बॉसेलर्स ने एमडी5 संपीड़न फ़ंक्शन के "छद्म-टकराव" को खोजने का एक प्रारंभिक, यद्यपि सीमित, परिणाम दिया; यानी, दो अलग-अलग इनिशियलाइज़ेशन वैक्टर जो एक समान डाइजेस्ट उत्पन्न करते हैं।

1996 में, डोबबर्टिन ने एमडी5 (डॉबबर्टिन, 1996) के संपीड़न कार्य की टक्कर की घोषणा की। यद्यपि यह पूर्ण एमडी5 हैश फ़ंक्शन पर हमला नहीं था, लेकिन यह क्रिप्टोग्राफरों के लिए प्रतिस्थापन पर स्विच करने की अनुशंसा करने के लिए पर्याप्त था,जैसे कि सहअ -1 (इसके बाद से भी समझौता किया गया) या आरआईपीईएमडी-160।

बर्थडे अटैक पर विचार करने के लिए हैश वैल्यू आकार (128 बिट्स) काफी छोटा है। एमडी5सीआरके मार्च 2004 में शुरू की गई एक वितरित परियोजना थी, ताकि यह प्रदर्शित किया जा सके कि जन्मदिन के हमले का उपयोग करके टकराव का पता लगाने के लिए एमडी5 व्यावहारिक रूप से असुरक्षित है।

एमडी5सीआरके 17 अगस्त 2004 के तुरंत बाद समाप्त हो गया, जब शियाओयुन वांग, डेंगगुओ फेंग, जुएजिया लाई और होंगबो यू द्वारा पूर्ण एमडी5 के लिए टकराव की घोषणा की गई थी। उनके विश्लेषणात्मक हमले को आईबीएम पी690 क्लस्टर पर केवल एक घंटे का समय लेने की सूचना दी गई थी।

1 मार्च 2005 को, आर्जेन लेन्स्ट्रा, ज़ियाओउन वांग और बेन्ने डी वेगर ने अलग-अलग सार्वजनिक कुंजियों और समान एमडी5 हैश मान के साथ दो X.509 प्रमाणपत्रों के निर्माण का प्रदर्शन किया, जो एक स्पष्ट से व्यावहारिक टकराव था। निर्माण में दोनों सार्वजनिक कुंजियों के लिए निजी कुंजी सम्मिलित थी। कुछ दिनों बाद, वलसटीमिल क्लीमा ने एक बेहतर एल्गोरिथ्म का वर्णन किया, जो एक नोटबुक कंप्यूटर पर कुछ घंटों में एमडी5 टक्करों का निर्माण करने में सक्षम था। 18 मार्च 2006 को, क्लिमा ने एक एल्गोरिथ्म प्रकाशित किया जो एक एकल नोटबुक कंप्यूटर पर एक मिनट के भीतर टकराव का पता लगा सकता था, एक विधि का उपयोग करके जिसे वह टनलिंग कहते हैं।

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

24 दिसंबर 2010 को, ताओ शी और डेंगगुओ फेंग ने पहले प्रकाशित सिंगल-ब्लॉक (512-बिट) एमडी5 टक्कर की घोषणा की। (पिछली टक्कर खोजों ने मल्टी-ब्लॉक हमलों पर भरोसा किया था।) "सुरक्षा कारणों" के लिए, शी और फेंग ने नए हमले के तरीके का खुलासा नहीं किया। उन्होंने क्रिप्टोग्राफिक समुदाय को चुनौती जारी की, 1 जनवरी 2013 से पहले एक अलग 64-बाइट टकराव के पहले खोजकर्ता को 10,000 अमेरिकी डॉलर का इनाम देने की पेशकश की गई। मार्क स्टीवंस ने चुनौती का जवाब दिया और एकल-ब्लॉक संदेशों के साथ-साथ निर्माण एल्गोरिदम और स्रोतों को प्रकाशित किया।

24 दिसंबर 2010 को, ताओ झी और डेंगगुओ फेंग ने पहले प्रकाशित एकल-ब्लॉक (512-बिट) MD5 टक्कर की घोषणा की। [12] (Previous collision discoveries had relied on multi-block attacks.) "सुरक्षा कारणों" से, ज़ी और फेंग ने हमले की नई विधि का खुलासा नहीं किया। उन्होंने क्रिप्टोग्राफिक समुदाय को एक चुनौती जारी की, जिसमें 1 जनवरी 2013 से पहले एक अलग 64-बाइट टक्कर के पहले खोजकर्ता को 10,000 अमेरिकी डॉलर का इनाम देने की पेशकश की गई। मार्क स्टीवंस ने चुनौती का जवाब दिया और एकल-ब्लॉक संदेशों के साथ-साथ निर्माण एल्गोरिदम और स्रोतों को प्रकाशित किया। [13]

2011 में एक सूचनात्मक आरएफसी 6151 को एमडी5 और एचएमएसी-एमडी5 में सुरक्षा कारणों को अद्यतन करने के लिए अनुमोदित किया गया था।

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

एमडी5 हैश फ़ंक्शन की सुरक्षा से गंभीर रूप से समझौता किया गया है। एक टकराव का हमला मौजूद है जो 2.6 GHz पेंटियम 4 प्रोसेसर (224.1 की जटिलता) वाले कंप्यूटर पर सेकंड के भीतर टकराव का पता लगा सकता है24.1)। इसके अलावा, एक चयनित-उपसर्ग टक्कर हमला भी है जो ऑफ-द-शेल्फ कंप्यूटिंग हार्डवेयर (जटिलता 239) का उपयोग करके सेकंड के भीतर निर्दिष्ट उपसर्गों के साथ दो इनपुट के लिए टक्कर उत्पन्न कर सकता है39). ऑफ-द-शेल्फ ग्राफ़िक्स प्रोसेसिंग युनिट  के उपयोग से टक्करों को खोजने की क्षमता में काफी मदद मिली है। एक एनवीडिया जीफोर्स 8800GS ग्राफ़िक्स प्रोसेसर पर, प्रति सेकंड 16-18 मिलियन हैश की गणना की जा सकती है। एक एनवीडिया जीफोर्स 8800 अल्ट्रा प्रति सेकंड 200 मिलियन से अधिक हैश की गणना कर सकता है।

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

2019 तक, व्यापक रूप से उपयोग की जाने वाली सामग्री प्रबंधन प्रणालियों में से एक चौथाई को अभी भी पासवर्ड हैशिंग के लिए एमडी5 का उपयोग करने की सूचना मिली थी।

सुरक्षा मुद्दों का अवलोकन
1996 में, एमडी5 के डिज़ाइन में एक त्रुटि पाई गई थी । जबकि उस समय इसे एक घातक कमजोरी नहीं माना गया था, क्रिप्टोग्राफर्स ने अन्य एल्गोरिदम, जैसे कि SHA-1, के उपयोग की अनुशंसा करना शुरू कर दिया था, जिसे तब से कमजोर भी पाया गया है। 2004 में यह दिखाया गया था कि एमडी5 टकराव - प्रतिरोधी नहीं है। जैसे, एमडी5 परिवहन परत सुरक्षा सार्वजनिक कुंजी प्रमाणपत्र या डिजिटल हस्ताक्षर जैसे अनुप्रयोगों के लिए उपयुक्त नहीं है जो डिजिटल सुरक्षा के लिए इस संपत्ति पर भरोसा करते हैं। शोधकर्ताओं ने अतिरिक्त रूप से एमडी5 में अधिक गंभीर खामियों की खोज की, और एक संभावित टकराव के हमले का वर्णन किया - इनपुट की एक जोड़ी बनाने की एक विधि जिसके लिए एमडी5 समान चेकसम का उत्पादन करता है। 2005, 2006 और 2007 में एमडी5 को तोड़ने में और प्रगति की गई। दिसंबर 2008 में, शोधकर्ताओं के एक समूह ने नकली एसएसएल प्रमाणपत्र वैधता के लिए इस तकनीक का इस्तेमाल किया।

2010 तक, सीएमयू सॉफ्टवेयर इंजीनियरिंग संस्थान एमडी5 को क्रिप्टोग्राफ़िक रूप से टूटा हुआ और आगे के उपयोग के लिए अनुपयुक्त मानता है, और अधिकांश अमेरिकी सरकारी अनुप्रयोगों को अब हैश कार्यों के SHA-2 परिवार की आवश्यकता होती है। 2012 में, फ्लेम मैलवेयर ने माइक्रोसॉफ्ट  डिजिटल हस्ताक्षर को नकली बनाने के लिए एमडी5 की कमजोरियों का फायदा उठाया।

टक्कर भेद्यता
1996 में, एमडी5 के संपीड़न कार्य में टकराव पाए गए, और हंस डोबबर्टिन ने आरएसए प्रयोगशालाओं के तकनीकी समाचार पत्र में लिखा, "प्रस्तुत हमला अभी तक एमडी5 के व्यावहारिक अनुप्रयोगों को खतरे में नहीं डालता है, लेकिन यह निकट आता है... भविष्य में एमडी5 को अब लागू नहीं किया जाना चाहिए... जहां टकराव प्रतिरोधी हैश फ़ंक्शन की आवश्यकता होती है।"

2005 में, शोधकर्ता एक ही हैश के साथ परिशिष्ट भाग दस्तावेजों और X.509 प्रमाणपत्रों के जोड़े बनाने में सक्षम थे । उस वर्ष बाद में, एम. डी. 5 के डिजाइनर रॉन रिवेस्ट ने लिखा कि "एम. डी. 5 और sha1 दोनों स्पष्ट रूप से टूट गए हैं (टकराव-प्रतिरोध के संदर्भ में)।

30 दिसंबर 2008 को, शोधकर्ताओं के एक समूह ने 25वीं कैओस कम्युनिकेशन कांग्रेस में घोषणा की कि कैसे उन्होंने एमडी5 टकराव का उपयोग एक मध्यवर्ती प्रमाणपत्र प्राधिकरण प्रमाणपत्र बनाने के लिए किया था जो इसके एमडी5 हैश द्वारा जाँच किए जाने पर वैध प्रतीत होता था। [24] शोधकर्ताओं ने स्विट्जरलैंड के लुसाने में ईपीएफएल में एक पीएस 3 क्लस्टर का उपयोग रैपिडएसएसएल द्वारा जारी एक सामान्य एसएसएल प्रमाणपत्र को उस जारीकर्ता के लिए एक कार्यशील सीए प्रमाणपत्र में बदलने के लिए किया, जिसका उपयोग अन्य प्रमाणपत्र बनाने के लिए किया जा सकता है जो वैध प्रतीत होते हैं और रैपिडएसएसएल द्वारा जारी किए जाते हैं। रैपिडएसएसएल प्रमाणपत्र जारी करने वाले वेरीसाइन ने कहा कि उन्होंने एक बार भेद्यता की घोषणा होने के बाद रैपिडएसएसएल के लिए अपने चेकसम एल्गोरिदम के रूप में एमडी5 का उपयोग करके नए प्रमाणपत्र जारी करना बंद कर दिया। यद्यपि वेरिसाइन ने MD5 का उपयोग करके हस्ताक्षरित मौजूदा प्रमाणपत्रों को रद्द करने से इनकार कर दिया, लेकिन एक्सप्लॉइट के लेखकों (अलेक्जेंडर सोतिरोव, मार्क स्टीवंस, जैकब एपलबौम, आर्जेन लेन्स्ट्रा, डेविड मोलनार, डैग अर्ने ओस्विक और बेन्ने डी वेगर) द्वारा उनकी प्रतिक्रिया को पर्याप्त माना गया था। ब्रूस श्नायर ने हमले के बारे में लिखा कि "हम पहले से ही जानते थे कि एमडी5 एक टूटा हुआ हैश फंक्शन है ,और किसी को भी अब MD5 का उपयोग नहीं करना चाहिए। एसएसएल शोधकर्ताओं ने लिखा, हमारा वांछित प्रभाव यह है कि प्रमाणन अधिकारी नए प्रमाणपत्र जारी करने में एमडी5 का उपयोग करना बंद कर देंगे। हम यह भी आशा करते हैं कि अन्य अनुप्रयोगों में एमडी5 के उपयोग पर भी पुनर्विचार किया जाएगा।

2012 में, माइक्रोसॉफ्ट के अनुसार, फ़्लेम (मैलवेयर) मैलवेयर के लेखकों ने विंडोज कोड-हस्ताक्षर प्रमाणपत्र बनाने के लिए एमडी5 टक्कर का उपयोग किया।

एमडी5 मर्कले-डैमगार्ड निर्माण का उपयोग करता है, इसलिए यदि एक ही हैश के साथ दो उपसर्गों का निर्माण किया जा सकता है, तो दोनों में एक सामान्य प्रत्यय जोड़ा जा सकता है ताकि टकराव का उपयोग करने वाले एप्लिकेशन द्वारा मान्य डेटा के रूप में स्वीकार किए जाने की अधिक संभावना हो। इसके अलावा, वर्तमान टकराव-ढूंढने की तकनीक एक मनमाना उपसर्ग निर्दिष्ट करने की अनुमति देती है: एक हमलावर दो टकराने वाली फाइलें बना सकता है जो दोनों एक ही सामग्री से शुरू होती हैं। सभी हमलावरों को दो टकराने वाली फाइलें उत्पन्न करने की आवश्यकता होती है, डेटा के 128-बाइट ब्लॉक के साथ एक टेम्पलेट फ़ाइल होती है, जो 64-बाइट सीमा पर संरेखित होती है, जिसे टक्कर-ढूँढने वाले एल्गोरिदम द्वारा स्वतंत्र रूप से बदला जा सकता है। एक उदाहरण एमडी5 टक्कर, जिसमें दो संदेश 6 बिट्स में भिन्न हैं:

d131dd02c5e6eec4 693d9a0698aff95c 2fcab5{{Background color|#87CEEB|8}712467eab4004583eb8fb7f89 55ad340609f4b302 83e4888325{{Background color|#87CEEB|7}{1415a 085125e8f7cdc99f d91dbd{{Background color|#87CEEB|f}280373 उपहास d8823e3156348f5b ae6dacd436c919c6 dd53e2{{Background color|#87CEEB|b}487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b67080{{Background color|#87CEEB|a}80d1e c69821bcb6a88393 96f965{{Background color|#87CEEB|2}btfhhh0

d131dd02c5e6eec4 693d9a0698aff95c 2fcab5{{Background color|#87CEEB|0}712467eab4004583eb8fb7f89 55ad340609f4b302 83e4888325{{Background color|#87CEEB|f}{1415a 085125e8f7cdc99f d91dbd{{Background color|#87CEEB|7}280373 उपहास d8823e3156348f5b ae6dacd436c919c6 dd53e2{{Background color|#87CEEB|3}487da03fd 02396306d248cda0 e99f33420f577ee8 ce54b67080{{Background color|#87CEEB|2}80d1e c69821bcb6a88393 96f965{{Background color|#87CEEB|a}b6ff72a70

दोनों एमडी5 हैश का उत्पादन करते हैं. दोनों नमूनों के बीच का अंतर यह है कि प्रत्येक निब्बल में अग्रणी बिट फ़्लिप किया गया है। उदाहरण के लिए, शीर्ष नमूना 0x87 में 20वां बाइट (ऑफ़सेट 0x13), बाइनरी में 10000111 है। बाइट में अग्रणी बिट (पहले कुतरने में भी अग्रणी बिट) को 00000111 बनाने के लिए फ़्लिप किया जाता है, जो कि 0x07 है, जैसा कि निचले नमूने में दिखाया गया है।

बाद में यह भी पाया गया कि अलग से चुने गए उपसर्गों के साथ दो फ़ाइलों के बीच टकराव का निर्माण करना संभव था। इस तकनीक का उपयोग 2008 में दुष्ट सीए प्रमाणपत्र के निर्माण में किया गया था। 2014 में एंटोन कुज़नेत्सोव द्वारा संदेश पासिंग इंटरफ़ेस का उपयोग करके समानांतर टकराव की खोज का एक नया संस्करण प्रस्तावित किया गया था, जिसने कंप्यूटिंग क्लस्टर पर 11 घंटे में टक्कर खोजने की अनुमति दी थी।

प्रीइमेज भेद्यता
अप्रैल 2009 में, एमडी5 के विरुद्ध एक हमला प्रकाशित किया गया था जो एमडी5 के प्रीइमेज प्रतिरोध को तोड़ता है। यह हमला केवल सैद्धांतिक है, 2 की कम्प्यूटेशनल जटिलता के साथ123.4 पूर्ण प्रीइमेज के लिए।

अनुप्रयोग
एमडी5 डाइजेस्ट का सॉफ़्टवेयर  की दुनिया में व्यापक रूप से उपयोग किया गया है ताकि कुछ आश्वासन दिया जा सके कि स्थानांतरित फ़ाइल बरकरार है। उदाहरण के लिए, फ़ाइल सर्वर प्रायः फ़ाइलों के लिए एक पूर्व-गणना किए गए एमडी5 (एमडी5sum के रूप में जाना जाता है) चेकसम प्रदान करते हैं, ताकि उपयोगकर्ता डाउनलोड की गई फ़ाइल के चेकसम की तुलना इससे कर सके। अधिकांश यूनिक्स-आधारित ऑपरेटिंग सिस्टम में उनके वितरण पैकेज में एमडी5 योग उपयोगिताएँ सम्मिलित हैं; Windows उपयोगकर्ता सम्मिलित PowerShell फ़ंक्शन Get-FileHash का उपयोग कर सकते हैं, एक Microsoft उपयोगिता स्थापित कर सकते हैं,  या तृतीय-पक्ष एप्लिकेशन का उपयोग सकते हैं। एंड्रॉइड रोम भी इस प्रकार के चेकसम का उपयोग करते हैं।

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

ऐतिहासिक रूप से, एमडी5 का उपयोग पासवर्ड के एक तरफ़ा हैश को संग्रहीत करने के लिए किया जाता रहा है, संग्रहीत पासवर्ड का फ़ॉर्म, प्रायः कुंजी खींचना के साथ। पासवर्ड भंडारण के लिए अनुशंसित हैश की सूची में NIST एमडी5 को सम्मिलित नहीं करता है।

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

एल्गोरिथम
एमडी5 एक चर-लंबाई संदेश को 128 बिट्स के निश्चित-लंबाई वाले आउटपुट में संसाधित करता है। इनपुट संदेश 512-बिट ब्लॉक (सोलह 32-बिट शब्द) के टुकड़ों में विभाजित है; संदेश पैडिंग (क्रिप्टोग्राफी) है ताकि इसकी लंबाई 512 से विभाज्य हो। पैडिंग निम्नानुसार काम करती है: पहले, एक बिट, 1, संदेश के अंत में जोड़ा जाता है। इसके बाद संदेश की लंबाई को 512 के गुणक से 64 बिट कम करने के लिए जितने आवश्यक हैं उतने शून्य हैं। शेष बिट्स 64 बिट्स से भरे हुए हैं जो मूल संदेश, मॉड्यूलो 2 64|undefined की लंबाई का प्रतिनिधित्व करते हैं। मुख्य MD5 एल्गोरिथ्म एक 128-बिट अवस्था पर संचालित होता है, जिसे चार 32-बिट शब्दों में विभाजित किया गया है, जिन्हें A, B, C और D से निरूपित किया गया है। इन्हें कुछ निश्चित स्थिरांकों के लिए आरंभीकृत किया जाता है। मुख्य एल्गोरिथ्म तब स्थिति को संशोधित करने के लिए प्रत्येक 512-बिट संदेश ब्लॉक का उपयोग करता है। एक संदेश खंड के प्रसंस्करण में चार समान चरण होते हैं, जिन्हें राउंड कहा जाता है; प्रत्येक राउंड एक गैर-रैखिक फ़ंक्शन F, मॉड्यूलर जोड़ और बाएं घूर्णन के आधार पर 16 समान संचालनों से बना होता है। चित्र 1 एक गोल के भीतर एक ऑपरेशन को दर्शाता है। चार संभावित कार्य हैं; प्रत्येक दौर में एक अलग कार्य का उपयोग किया जाता हैः
 * $$\begin{align}

F(B,C,D) &= (B\wedge{C}) \vee (\neg{B} \wedge{D}) \\ G(B,C,D) &= (B\wedge{D}) \vee (C \wedge \neg{D}) \\ H(B,C,D) &= B \oplus C \oplus D \\ I(B,C,D) &= C \oplus (B \vee \neg{D}) \end{align} $$

$$\oplus, \wedge, \vee, \neg$$ क्रमशः एक्सओआर, तार्किक संयोजन,  तार्किक विच्छेदन और  नकार ऑपरेशंस को निरूपित करें।

स्यूडोकोड
इस एल्गोरिथम के अनुसार MD5 हैश की गणना की जाती है। सभी मान Endianness|little-endian में हैं।

<अवधि शैली = रंग: हरा; >// : गणना करते समय सभी चर 32 बिट अहस्ताक्षरित हैं और रैप मोडुलो 2^32 हैं 'वार' इंट एस [64], के [64] 'वार' int मैं <अवधि शैली = रंग: हरा; >//s प्रति-राउंड शिफ्ट राशियों को निर्दिष्ट करता है एस [ 0..15]n:= { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22} s[16..31],:= { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20} s[32..47]9:= { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23} s[48..63]1:= { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21} <अवधि शैली = रंग: हरा; >// पूर्णांकों (रेडियन) की साइन के बाइनरी पूर्णांक भाग का उपयोग स्थिरांक के रूप में करें: 'के लिए' मैं 'से' 0 'से' 63 'करो' के [i]�: = मंजिल (232 × एब्स (पाप (i + 1))) के लिए समाप्त <अवधि शैली = रंग: हरा; >// (या केवल निम्न पूर्व संगणित तालिका का उपयोग करें): के [0..3]�:= {0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee} के [ 4 .. 7 ] := { 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501 } के [8..11]: = {0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be} के [12..15]: = {0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821} के [16..19]: = {0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa} के [20..23]: = {0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8} के [24..27]: = {0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed} के [28..31]: = {0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a} के [32..35]: = {0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c} के [36..39]: = {0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70} के [40..43]: = {0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05} के [44..47]: = {0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665} के [48..51]: = {0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039} के [52..55]: = {0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1} के [56..59]: = {0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1} के [60..63]: = {0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391} <अवधि शैली = रंग: हरा; >// प्रारंभिक चर: var int a0 := 0x67452301 // ए var int b0 := 0xefcdab89 // बी var int c0 := 0x98badcfe // सी var int d0 := 0x10325476 // डी <अवधि शैली = रंग: हरा; >// प्री-प्रोसेसिंग: एक 1 बिट जोड़ना संदेश में 1 बिट जोड़ें < // नोटिस: इनपुट बाइट्स को बिट स्ट्रिंग माना जाता है, // जहां पहला बिट बाइट का सबसे महत्वपूर्ण बिट है। <अवधि शैली = रंग: हरा; >// प्री-प्रोसेसिंग: शून्य के साथ पैडिंग 'जोड़ें' 0 बिट 'तक' संदेश की लंबाई बिट्स में ≡ 448 (मॉड 512) <अवधि शैली = रंग: हरा; >// सूचना: ऊपर दिए गए दो पैडिंग चरण सरल तरीके से लागू किए गए हैं // कार्यान्वयन में जो केवल पूर्ण बाइट्स के साथ काम करते हैं: 0x80 संलग्न करें // और पैड 0x00 बाइट्स के साथ ताकि बाइट्स में संदेश की लंबाई ≡ 56 (मॉड 64)। बिट्स 'मॉड' में मूल लंबाई 'संलग्न' करें 264 संदेश के लिए <अवधि शैली = रंग: हरा; >// संदेश को क्रमिक 512-बिट विखंडू में संसाधित करें: गद्देदार संदेश के प्रत्येक 512-बिट हिस्से के लिए करें चंक को सोलह 32-बिट शब्दों में तोड़ें M[j], 0 ≤ j ≤ 15 <अवधि शैली = रंग: हरा; > // इस खंड के लिए आरंभिक हैश मान: var int A := a0    var int बी := b0     var int C := c0     var int D := d0 <अवधि शैली = रंग: हरा; > // मेन लूप: मैं के लिए 0 से 63 करते हैं var int एफ, जी अगर 0 ≤ i ≤ 15 तब एफ�:= (बी और सी) या ((बी नहीं) और डी) जी�:= मैं वरना अगर 16 ≤ i ≤ 31 तब एफ: = (डी और बी) या ((डी नहीं) और सी) जी�:= (5×i + 1) मॉड 16 वरना अगर 32 ≤ i ≤ 47 तो एफ:= बी एक्सोर सी एक्सओआर डी जी := (3×i + 5) मॉड 16 वरना अगर 48 ≤ i ≤ 63 तो एफ := सी xor (बी या (डी नहीं)) जी := (7×i) मॉड 16 <अवधि शैली = रंग: हरा; > // a,b,c,d की नीचे दी गई परिभाषाओं से सावधान रहें एफ: = एफ + ए + के [i] + एम [जी] <अवधि शैली = रंग: हरा; > // M[g] 32-बिट ब्लॉक होना चाहिए ए:= डी डी:= सी सी := बी बी := बी + लेफ्टरोटेट (एफ, एस [i]) के लिए समाप्त <अवधि शैली = रंग: हरा; > // इस खंड के हैश को अब तक के परिणाम में जोड़ें: ए0 := ए0 + ए ब0 := ब0 + ब c0�:= c0 + C    डी0 := डी0 + डी के लिए समाप्त var char डाइजेस्ट [16] := a0 संलग्न b0 संलग्न c0 संलग्न d0 <अवधि शैली = रंग: हरा; >// (आउटपुट लिट्ल-एंडियन में है)

दिखाए गए मूल आरएफसी 1321 से फॉर्मूलेशन के बजाय, बेहतर दक्षता के लिए निम्नलिखित का उपयोग किया जा सकता है (उपयोगी अगर असेंबली भाषा का उपयोग किया जा रहा है - अन्यथा, कंपाइलर प्रायः पर उपरोक्त कोड को अनुकूलित करेगा। चूंकि प्रत्येक गणना इन फॉर्मूलेशन में दूसरे पर निर्भर है, यह उपरोक्त विधि की तुलना में प्रायः धीमा होता है जहां nand/और समानांतर हो सकता है): (0 ≤ i ≤ 15): F := D xor (B और (C xor D)) (16 ≤ i ≤ 31): F := C xor (D और (B xor C))

MD5 हैश
128-बिट (16-बाइट) MD5 हैश (जिसे संदेश डाइजेस्ट भी कहा जाता है) को प्रायः पर 32 हेक्साडेसिमल अंकों के अनुक्रम के रूप में दर्शाया जाता है। निम्नलिखित एक 43-बाइट ASCII इनपुट और संबंधित MD5 हैश प्रदर्शित करता है:

MD5 (त्वरित भूरी लोमड़ी आलसी कुत्ते के ऊपर कूदती है) = 9e107d9d372bb6826bd81d3542a419d6

हिमस्खलन प्रभाव के कारण, यहां तक ​​​​कि संदेश में एक छोटा सा परिवर्तन (अत्यधिक संभावना के साथ) एक अलग हैश में परिणाम देगा। उदाहरण के लिए, वाक्य के अंत में एक अवधि जोड़ना:

MD5 (त्वरित भूरी लोमड़ी आलसी कुत्ते के ऊपर कूद जाती है.) = e4d909c290d0fb1ca068ffaddf22cbd0

शून्य-लंबाई वाली स्ट्रिंग का हैश है:

एमडी5 ("") = d41d8cd98f00b204e9800998ecf8427e

MD5 एल्गोरिथम किसी भी संख्या में बिट्स वाले संदेशों के लिए निर्दिष्ट है; यह आठ बिट्स (ऑक्टेट (कंप्यूटिंग), बाइट्स) के गुणकों तक सीमित नहीं है। कुछ MD5 कार्यान्वयन जैसे कि md5sum ऑक्टेट तक सीमित हो सकते हैं, या वे प्रारंभिक रूप से अनिर्धारित लंबाई के संदेशों के लिए स्ट्रीमिंग का समर्थन नहीं कर सकते हैं।

कार्यान्वयन
नीचे क्रिप्टो++ग्राफी लाइब्रेरी की सूची दी गई है जो MD5 का समर्थन करती है:


 * बॉटन (प्रोग्रामिंग लाइब्रेरी)
 * उछालभरी कैसल (क्रिप्टोग्राफी)
 * criptlib
 * क्रिप्टो ++
 * लिबगक्रिप्ट
 * बिछुआ (क्रिप्टोग्राफिक लाइब्रेरी)
 * ओपनएसएसएल
 * wolfSSL

यह भी देखें

 * क्रिप्टोग्राफ़िक हैश फ़ंक्शंस की तुलना
 * हैश फ़ंक्शन सुरक्षा सारांश
 * हैश क्लैश
 * क्रिप्ट (C)#MD5-आधारित योजना
 * एमडी5डीप
 * md5sum
 * एमडी 6
 * एसएचए-1
 * एसएचए-2

अग्रिम पठन

 * Hans Dobbertin, Cryptanalysis of MD5 compress. Announcement on Internet, May 1996.
 * Hans Dobbertin, Cryptanalysis of MD5 compress. Announcement on Internet, May 1996.
 * Hans Dobbertin, Cryptanalysis of MD5 compress. Announcement on Internet, May 1996.