एमडी5: Difference between revisions
(Created page with "{{short description|Message-digest hashing algorithm}} {{Use dmy dates|date=April 2014}} {{Infobox cryptographic hash function | name = MD5 | caption = 848ca0f914b8836f4e4aa8...") |
No edit summary |
||
| Line 22: | Line 22: | ||
}} | }} | ||
'''एमडी5 संदेश-डाइजेस्ट एल्गोरिथम''' एक व्यापक रूप से उपयोग किया जाने वाला [[हैश फ़ंक्शन]] है जो 128-[[बिट]] हैश मान उत्पन्न करता है। एमडी5 को [[रोनाल्ड रिवेस्ट]] द्वारा 1991 में पहले के हैश फ़ंक्शन एमडी4, को बदलने के लिए डिज़ाइन किया गया था<ref name="Ron Barak">{{cite book|last=Ciampa|first=Mark|title=CompTIA Security+ 2008 in depth|year=2009|publisher=Course Technology/Cengage Learning|location=Australia; United States|page=[https://archive.org/details/comptiasecurity20000ciam/page/290 290]|url=https://archive.org/details/comptiasecurity20000ciam|url-access=registration|isbn=978-1-59863-913-1}}</ref> और 1992 में [[आरएफसी 1321]] के रूप में निर्दिष्ट किया गया था। | |||
एमडी5 का उपयोग अनजाने में भ्रष्टाचार के खिलाफ [[डेटा अखंडता]] को सत्यापित करने के लिए [[चेकसम]] के रूप में किया जा सकता है। ऐतिहासिक रूप से इसे [[क्रिप्टोग्राफ़िक हैश फ़ंक्शन]] के रूप में व्यापक रूप से उपयोग किया जाता था; हालांकि, यह व्यापक कमजोरियों से पीड़ित पाया गया है। यह अन्य गैर-क्रिप्टोग्राफ़िक उद्देश्यों के लिए उपयुक्त रहता है, उदाहरण के लिए, एक [[विभाजित डेटाबेस]] में किसी विशेष कुंजी के लिए विभाजन का निर्धारण करने के लिए, और अधिक हालिया [[सुरक्षित हैश एल्गोरिदम]] की तुलना में कम कम्प्यूटेशनल आवश्यकताओं के कारण इसे प्राथमिकता दी जा सकती है।<ref>{{cite book |last1=Kleppmann |first1=Martin |title=Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems |date=April 2, 2017 |publisher=O'Reilly Media |isbn=978-1449373320 |page=203 |edition=1}}</ref> | |||
== इतिहास और क्रिप्ट विश्लेषण == | == इतिहास और क्रिप्ट विश्लेषण == | ||
MD5 [[मैसाचुसेट्स की तकनीकी संस्था]] (रिवेस्ट, 1992) के प्रोफेसर रोनाल्ड रिवेस्ट द्वारा डिजाइन किए गए [[संदेश संग्रह]] एल्गोरिदम की श्रृंखला में से एक है। जब विश्लेषणात्मक कार्य ने संकेत दिया कि MD5 के पूर्ववर्ती MD4 के असुरक्षित होने की संभावना थी, तो रिवेस्ट ने 1991 में MD5 को एक सुरक्षित प्रतिस्थापन के रूप में डिजाइन किया। ([[हंस डोबबर्टिन]] ने वास्तव में बाद में MD4 में कमजोरियों का पता लगाया।) | MD5 [[मैसाचुसेट्स की तकनीकी संस्था]] (रिवेस्ट, 1992) के प्रोफेसर रोनाल्ड रिवेस्ट द्वारा डिजाइन किए गए [[संदेश संग्रह]] एल्गोरिदम की श्रृंखला में से एक है। जब विश्लेषणात्मक कार्य ने संकेत दिया कि MD5 के पूर्ववर्ती MD4 के असुरक्षित होने की संभावना थी, तो रिवेस्ट ने 1991 में MD5 को एक सुरक्षित प्रतिस्थापन के रूप में डिजाइन किया। ([[हंस डोबबर्टिन]] ने वास्तव में बाद में MD4 में कमजोरियों का पता लगाया।) | ||
| Line 169: | Line 167: | ||
इस एल्गोरिथम के अनुसार MD5 हैश की गणना की जाती है।<ref>{{Cite web|url=https://referencesource.microsoft.com/#System.Workflow.Runtime/MD5HashHelper.cs,5a97802b6014fccc,references|title = Reference Source}}</ref> सभी मान [[Endianness]]|little-endian में हैं। | इस एल्गोरिथम के अनुसार MD5 हैश की गणना की जाती है।<ref>{{Cite web|url=https://referencesource.microsoft.com/#System.Workflow.Runtime/MD5HashHelper.cs,5a97802b6014fccc,references|title = Reference Source}}</ref> सभी मान [[Endianness]]|little-endian में हैं। | ||
<अवधि शैली = रंग: हरा; >// : गणना करते समय सभी चर 32 बिट अहस्ताक्षरित हैं और रैप मोडुलो 2^32 हैं | <अवधि शैली = रंग: हरा; >// : गणना करते समय सभी चर 32 बिट अहस्ताक्षरित हैं और रैप मोडुलो 2^32 हैं | ||
'वार' इंट एस [64], के [64] | 'वार' इंट एस [64], के [64] | ||
'वार' int मैं | 'वार' int मैं | ||
<अवधि शैली = रंग: हरा; >//s प्रति-राउंड शिफ्ट राशियों को निर्दिष्ट करता है | <अवधि शैली = रंग: हरा; >//s प्रति-राउंड शिफ्ट राशियों को निर्दिष्ट करता है | ||
एस [ 0..15] := { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22} | एस [ 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[16..31],:= { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20} | ||
s[32..47] := { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23} | s[32..47]9:= { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23} | ||
s[48..63] := { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21} | s[48..63]1:= { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21} | ||
<अवधि शैली = रंग: हरा; >// पूर्णांकों (रेडियन) की साइन के बाइनरी पूर्णांक भाग का उपयोग स्थिरांक के रूप में करें: | <अवधि शैली = रंग: हरा; >// पूर्णांकों (रेडियन) की साइन के बाइनरी पूर्णांक भाग का उपयोग स्थिरांक के रूप में करें: | ||
'के लिए' मैं 'से' 0 'से' 63 'करो' | 'के लिए' मैं 'से' 0 'से' 63 'करो' | ||
के [i] : = मंजिल (2<sup>32</sup> × एब्स (पाप (i + 1))) | के [i]�: = मंजिल (2<sup>32</sup> × एब्स (पाप (i + 1))) | ||
के लिए समाप्त | के लिए समाप्त | ||
<अवधि शैली = रंग: हरा; >// ''(या केवल निम्न पूर्व संगणित तालिका का उपयोग करें):'' | <अवधि शैली = रंग: हरा; >// ''(या केवल निम्न पूर्व संगणित तालिका का उपयोग करें):'' | ||
के [0..3] := {0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee} | के [0..3]�:= {0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee} | ||
के [ 4 .. 7 ] := { 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501 } | के [ 4 .. 7 ] := { 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501 } | ||
के [8..11]: = {0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be} | के [8..11]: = {0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be} | ||
| Line 201: | Line 199: | ||
के [60..63]: = {0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391} | के [60..63]: = {0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391} | ||
<अवधि शैली = रंग: हरा; >// ''प्रारंभिक चर:'' | <अवधि शैली = रंग: हरा; >// ''प्रारंभिक चर:'' | ||
var ''int'' a0 := 0x67452301 <span style= color:green; >// ए</span> | var ''int'' a0 := 0x67452301 <span style= color:green; >// ए</span> | ||
var ''int'' b0 := 0xefcdab89 <span style= color:green; >// बी</span> | var ''int'' b0 := 0xefcdab89 <span style= color:green; >// बी</span> | ||
| Line 207: | Line 205: | ||
var ''int'' d0 := 0x10325476 <span style= color:green; >// डी</span> | var ''int'' d0 := 0x10325476 <span style= color:green; >// डी</span> | ||
<अवधि शैली = रंग: हरा; >// ''प्री-प्रोसेसिंग: एक 1 बिट जोड़ना'' | <अवधि शैली = रंग: हरा; >// ''प्री-प्रोसेसिंग: एक 1 बिट जोड़ना'' | ||
संदेश में 1 बिट जोड़ें < | संदेश में 1 बिट जोड़ें < | ||
// नोटिस: इनपुट बाइट्स को बिट स्ट्रिंग माना जाता है, | // नोटिस: इनपुट बाइट्स को बिट स्ट्रिंग माना जाता है, | ||
| Line 216: | Line 214: | ||
<अवधि शैली = रंग: हरा; >// सूचना: ऊपर दिए गए दो पैडिंग चरण सरल तरीके से लागू किए गए हैं | <अवधि शैली = रंग: हरा; >// सूचना: ऊपर दिए गए दो पैडिंग चरण सरल तरीके से लागू किए गए हैं | ||
// कार्यान्वयन में जो केवल पूर्ण बाइट्स के साथ काम करते हैं: 0x80 संलग्न करें | // कार्यान्वयन में जो केवल पूर्ण बाइट्स के साथ काम करते हैं: 0x80 संलग्न करें | ||
// और पैड 0x00 बाइट्स के साथ ताकि बाइट्स में संदेश की लंबाई ≡ 56 (मॉड 64)। | // और पैड 0x00 बाइट्स के साथ ताकि बाइट्स में संदेश की लंबाई ≡ 56 (मॉड 64)। | ||
बिट्स 'मॉड' में मूल लंबाई 'संलग्न' करें 2<sup>64</sup> संदेश के लिए | बिट्स 'मॉड' में मूल लंबाई 'संलग्न' करें 2<sup>64</sup> संदेश के लिए | ||
<अवधि शैली = रंग: हरा; >// ''संदेश को क्रमिक 512-बिट विखंडू में संसाधित करें:'' | <अवधि शैली = रंग: हरा; >// ''संदेश को क्रमिक 512-बिट विखंडू में संसाधित करें:'' | ||
गद्देदार संदेश के प्रत्येक ''512-बिट'' हिस्से के लिए करें | गद्देदार संदेश के प्रत्येक ''512-बिट'' हिस्से के लिए करें | ||
चंक को सोलह 32-बिट शब्दों में तोड़ें M[j], 0 ≤ j ≤ 15 | चंक को सोलह 32-बिट शब्दों में तोड़ें M[j], 0 ≤ j ≤ 15 | ||
<अवधि शैली = रंग: हरा; > // ''इस खंड के लिए आरंभिक हैश मान:'' | <अवधि शैली = रंग: हरा; > // ''इस खंड के लिए आरंभिक हैश मान:'' | ||
var ''int'' A := a0 | var ''int'' A := a0 | ||
var ''int'' बी := b0 | var ''int'' बी := b0 | ||
var ''int'' C := c0 | var ''int'' C := c0 | ||
var ''int'' D := d0 | var ''int'' D := d0 | ||
<अवधि शैली = रंग: हरा; > // ''मेन लूप:'' | <अवधि शैली = रंग: हरा; > // ''मेन लूप:'' | ||
मैं के लिए 0 से 63 करते हैं | मैं के लिए 0 से 63 करते हैं | ||
var ''int'' एफ, जी | var ''int'' एफ, जी | ||
अगर 0 ≤ i ≤ 15 तब | अगर 0 ≤ i ≤ 15 तब | ||
एफ�:= (बी और सी) या ((बी नहीं) और डी) | |||
जी�:= मैं | |||
वरना अगर 16 ≤ i ≤ 31 तब | वरना अगर 16 ≤ i ≤ 31 तब | ||
एफ: = (डी और बी) या ((डी नहीं) और सी) | एफ: = (डी और बी) या ((डी नहीं) और सी) | ||
जी�:= (5×i + 1) मॉड 16 | |||
वरना अगर 32 ≤ i ≤ 47 तो | वरना अगर 32 ≤ i ≤ 47 तो | ||
एफ:= बी एक्सोर सी एक्सओआर डी | एफ:= बी एक्सोर सी एक्सओआर डी | ||
| Line 243: | Line 241: | ||
एफ := सी xor (बी या (डी नहीं)) | एफ := सी xor (बी या (डी नहीं)) | ||
जी := (7×i) मॉड 16 | जी := (7×i) मॉड 16 | ||
<अवधि शैली = रंग: हरा; > // ''a,b,c,d'' की नीचे दी गई परिभाषाओं से सावधान रहें | <अवधि शैली = रंग: हरा; > // ''a,b,c,d'' की नीचे दी गई परिभाषाओं से सावधान रहें | ||
एफ: = एफ + ए + के [i] + एम [जी] <अवधि शैली = रंग: हरा; > // ''M[g] 32-बिट ब्लॉक होना चाहिए'' | एफ: = एफ + ए + के [i] + एम [जी] <अवधि शैली = रंग: हरा; > // ''M[g] 32-बिट ब्लॉक होना चाहिए'' | ||
ए:= डी | ए:= डी | ||
डी:= सी | डी:= सी | ||
| Line 250: | Line 248: | ||
बी := बी + लेफ्टरोटेट (एफ, एस [i]) | बी := बी + लेफ्टरोटेट (एफ, एस [i]) | ||
के लिए समाप्त | के लिए समाप्त | ||
<अवधि शैली = रंग: हरा; > // ''इस खंड के हैश को अब तक के परिणाम में जोड़ें:'' | <अवधि शैली = रंग: हरा; > // ''इस खंड के हैश को अब तक के परिणाम में जोड़ें:'' | ||
ए0 := ए0 + ए | ए0 := ए0 + ए | ||
ब0 := ब0 + ब | ब0 := ब0 + ब | ||
c0�:= c0 + C | |||
डी0 := डी0 + डी | डी0 := डी0 + डी | ||
के लिए समाप्त | के लिए समाप्त | ||
var ''char'' डाइजेस्ट [16] := a0 संलग्न b0 संलग्न c0 संलग्न d0 <अवधि शैली = रंग: हरा; >// ''(आउटपुट लिट्ल-एंडियन में है)'' | var ''char'' डाइजेस्ट [16] := a0 संलग्न b0 संलग्न c0 संलग्न d0 <अवधि शैली = रंग: हरा; >// ''(आउटपुट लिट्ल-एंडियन में है)'' | ||
दिखाए गए मूल आरएफसी 1321 से फॉर्मूलेशन के बजाय, बेहतर दक्षता के लिए निम्नलिखित का उपयोग किया जा सकता है (उपयोगी अगर असेंबली भाषा का उपयोग किया जा रहा है - अन्यथा, कंपाइलर आमतौर पर उपरोक्त कोड को अनुकूलित करेगा। चूंकि प्रत्येक गणना इन फॉर्मूलेशन में दूसरे पर निर्भर है, यह उपरोक्त विधि की तुलना में अक्सर धीमा होता है जहां nand/और समानांतर हो सकता है): | दिखाए गए मूल आरएफसी 1321 से फॉर्मूलेशन के बजाय, बेहतर दक्षता के लिए निम्नलिखित का उपयोग किया जा सकता है (उपयोगी अगर असेंबली भाषा का उपयोग किया जा रहा है - अन्यथा, कंपाइलर आमतौर पर उपरोक्त कोड को अनुकूलित करेगा। चूंकि प्रत्येक गणना इन फॉर्मूलेशन में दूसरे पर निर्भर है, यह उपरोक्त विधि की तुलना में अक्सर धीमा होता है जहां nand/और समानांतर हो सकता है): | ||
| Line 354: | Line 352: | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
<!-- | <!-- | ||
| Line 359: | Line 358: | ||
[[Category: Machine Translated Page]] | [[Category: Machine Translated Page]] | ||
[[Category:Created On 11/05/2023]] | [[Category:Created On 11/05/2023]]--> | ||
Revision as of 11:05, 22 May 2023
| General | |
|---|---|
| Designers | Ronald Rivest |
| First published | April 1992 |
| Series | MD2, MD4, MD5, MD6 |
| Cipher detail | |
| Digest sizes | 128 bit |
| Block sizes | 512 bit |
| Structure | Merkle–Damgård construction |
| Rounds | 4[1] |
| Best public cryptanalysis | |
| A 2013 attack by Xie Tao, Fanbao Liu, and Dengguo Feng breaks MD5 collision resistance in 218 time. This attack runs in less than a second on a regular computer.[2] MD5 is prone to length extension attacks. | |
एमडी5 संदेश-डाइजेस्ट एल्गोरिथम एक व्यापक रूप से उपयोग किया जाने वाला हैश फ़ंक्शन है जो 128-बिट हैश मान उत्पन्न करता है। एमडी5 को रोनाल्ड रिवेस्ट द्वारा 1991 में पहले के हैश फ़ंक्शन एमडी4, को बदलने के लिए डिज़ाइन किया गया था[3] और 1992 में आरएफसी 1321 के रूप में निर्दिष्ट किया गया था।
एमडी5 का उपयोग अनजाने में भ्रष्टाचार के खिलाफ डेटा अखंडता को सत्यापित करने के लिए चेकसम के रूप में किया जा सकता है। ऐतिहासिक रूप से इसे क्रिप्टोग्राफ़िक हैश फ़ंक्शन के रूप में व्यापक रूप से उपयोग किया जाता था; हालांकि, यह व्यापक कमजोरियों से पीड़ित पाया गया है। यह अन्य गैर-क्रिप्टोग्राफ़िक उद्देश्यों के लिए उपयुक्त रहता है, उदाहरण के लिए, एक विभाजित डेटाबेस में किसी विशेष कुंजी के लिए विभाजन का निर्धारण करने के लिए, और अधिक हालिया सुरक्षित हैश एल्गोरिदम की तुलना में कम कम्प्यूटेशनल आवश्यकताओं के कारण इसे प्राथमिकता दी जा सकती है।[4]
इतिहास और क्रिप्ट विश्लेषण
MD5 मैसाचुसेट्स की तकनीकी संस्था (रिवेस्ट, 1992) के प्रोफेसर रोनाल्ड रिवेस्ट द्वारा डिजाइन किए गए संदेश संग्रह एल्गोरिदम की श्रृंखला में से एक है। जब विश्लेषणात्मक कार्य ने संकेत दिया कि MD5 के पूर्ववर्ती MD4 के असुरक्षित होने की संभावना थी, तो रिवेस्ट ने 1991 में MD5 को एक सुरक्षित प्रतिस्थापन के रूप में डिजाइन किया। (हंस डोबबर्टिन ने वास्तव में बाद में MD4 में कमजोरियों का पता लगाया।)
1993 में, डेन बोअर और बॉसेलर्स ने हैश टक्कर खोजने का एक प्रारंभिक, हालांकि सीमित, परिणाम दिया। MD5 वन-वे संपीड़न फ़ंक्शन का छद्म-टकराव; यानी, दो अलग-अलग प्रारंभिक वेक्टर जो एक समान डाइजेस्ट उत्पन्न करते हैं।
1996 में, डोबबर्टिन ने MD5 (डॉबबर्टिन, 1996) के संपीड़न समारोह की टक्कर की घोषणा की। हालांकि यह पूर्ण MD5 हैश फ़ंक्शन पर हमला नहीं था, यह क्रिप्टोग्राफ़रों के लिए प्रतिस्थापन के लिए स्विच करने की सिफारिश करने के लिए काफी करीब था, जैसे कि SHA-1 (तब भी समझौता किया गया) या RIPEMD-160।
जन्मदिन के हमले पर विचार करने के लिए हैश मान (128 बिट्स) का आकार काफी छोटा है। MD5CRK मार्च 2004 में शुरू किया गया एक वितरित कंप्यूटिंग था, यह प्रदर्शित करने के लिए कि जन्मदिन के हमले का उपयोग करके टकराव का पता लगाकर MD5 व्यावहारिक रूप से असुरक्षित है।
MD5CRK 17 अगस्त 2004 के तुरंत बाद समाप्त हो गया, जब Xiaoyun Wang, Dengguo Feng, Xuejia Lai, और Hongbo Yu द्वारा पूर्ण MD5 के लिए हैश टक्कर की घोषणा की गई।[5][6] उनके विश्लेषणात्मक हमले को IBM p690 क्लस्टर पर केवल एक घंटा लगने की सूचना मिली थी।[7] 1 मार्च 2005 को, अर्जेन लेनस्ट्रा, वैंग ओलम्पिक, और बेने डे वेगर ने अलग-अलग सार्वजनिक कुंजियों और समान MD5 हैश मान के साथ दो X.509 प्रमाणपत्रों के निर्माण का प्रदर्शन किया, जो प्रत्यक्ष रूप से व्यावहारिक टकराव था।[8] निर्माण में दोनों सार्वजनिक कुंजियों के लिए निजी कुंजी शामिल थी। कुछ दिनों बाद, Vlastimil Klima ने एक बेहतर एल्गोरिथम का वर्णन किया, जो एक नोटबुक कंप्यूटर पर कुछ घंटों में MD5 टक्करों का निर्माण करने में सक्षम था।[9] 18 मार्च 2006 को, क्लिमा ने एक एल्गोरिथ्म प्रकाशित किया जो एक एकल नोटबुक कंप्यूटर पर एक मिनट के भीतर टकराव का पता लगा सकता है, एक विधि का उपयोग करके वह टनलिंग कहता है।[10] टिप्पणियों के लिए एमडी5 से संबंधित विभिन्न अनुरोध # आरएफसी प्राप्त करना प्रकाशित किया गया है। 2009 में, संयुक्त राज्य साइबर कमान ने अपने आधिकारिक प्रतीक के एक भाग के रूप में अपने मिशन स्टेटमेंट के MD5 हैश मान का उपयोग किया।[11] 24 दिसंबर 2010 को, ताओ झी और डेंगगुओ फेंग ने पहले प्रकाशित सिंगल-ब्लॉक (512-बिट) एमडी5 टकराव की घोषणा की।[12] (पिछली टक्कर खोजों ने मल्टी-ब्लॉक हमलों पर भरोसा किया था।) सुरक्षा कारणों से, शी और फेंग ने नए हमले के तरीके का खुलासा नहीं किया। उन्होंने क्रिप्टोग्राफिक समुदाय के लिए एक चुनौती जारी की, 1 जनवरी 2013 से पहले एक अलग 64-बाइट टक्कर के पहले खोजकर्ता को यूएस $ 10,000 का इनाम देने की पेशकश की। निर्माण एल्गोरिथ्म और स्रोत।[13] 2011 में एक सूचनात्मक आरएफसी 6151[14] MD5 में सुरक्षा विचारों को अद्यतन करने के लिए अनुमोदित किया गया था[15] और HMAC-MD5।[16]
सुरक्षा
किसी भी क्रिप्टोग्राफिक हैश फ़ंक्शन की एक बुनियादी आवश्यकता यह है कि यह कम्प्यूटेशनल जटिलता सिद्धांत होना चाहिए # एक ही मूल्य के हैश वाले दो अलग-अलग संदेशों को खोजने के लिए इंट्रेक्टेबिलिटी। MD5 इस आवश्यकता को भयावह रूप से विफल करता है; इस तरह के टक्कर प्रतिरोध को एक साधारण होम कंप्यूटर पर सेकंड में पाया जा सकता है। 31 दिसंबर 2008 को, CMU सॉफ्टवेयर इंजीनियरिंग संस्थान ने निष्कर्ष निकाला कि MD5 अनिवार्य रूप से क्रिप्टोग्राफिक रूप से टूटा हुआ था और आगे उपयोग के लिए अनुपयुक्त था।[17] MD5 की कमजोरियों का क्षेत्र में शोषण किया गया है, जो 2012 में ज्वाला मैलवेयर द्वारा सबसे बदनाम है। As of 2019[update], सुरक्षा विशेषज्ञों द्वारा इसकी अच्छी तरह से प्रलेखित कमजोरियों और बहिष्करण के बावजूद, MD5 का व्यापक रूप से उपयोग किया जाना जारी है।[18]
MD5 हैश फ़ंक्शन की सुरक्षा से गंभीर रूप से समझौता किया गया है। एक टकराव का हमला मौजूद है जो 2.6 GHz पेंटियम 4 प्रोसेसर (2 की जटिलता) वाले कंप्यूटर पर सेकंड के भीतर टकराव का पता लगा सकता है24.1).[19] इसके अलावा, एक चुना-उपसर्ग टक्कर हमला भी है जो ऑफ-द-शेल्फ कंप्यूटिंग हार्डवेयर (जटिलता 2) का उपयोग करके सेकंड के भीतर निर्दिष्ट उपसर्गों के साथ दो इनपुट के लिए टक्कर उत्पन्न कर सकता है39).[20] ऑफ-द-शेल्फ ग्राफ़िक्स प्रोसेसिंग युनिट के उपयोग से टक्करों को खोजने की क्षमता में काफी मदद मिली है। एक NVIDIA GeForce 8400GS ग्राफ़िक्स प्रोसेसर पर, प्रति सेकंड 16-18 मिलियन हैश की गणना की जा सकती है। एक NVIDIA GeForce 8800 Ultra प्रति सेकंड 200 मिलियन से अधिक हैश की गणना कर सकता है।[21] इन हैश और टकराव के हमलों को सार्वजनिक रूप से विभिन्न स्थितियों में प्रदर्शित किया गया है, जिसमें दस्तावेज़ फ़ाइलों को टकराना भी शामिल है[22][23] और डिजिटल प्रमाण पत्र।[24]2015 तक, MD5 को अभी भी काफी व्यापक रूप से उपयोग किए जाने के लिए प्रदर्शित किया गया था, विशेष रूप से सुरक्षा अनुसंधान और एंटीवायरस कंपनियों द्वारा।[25] 2019 तक, व्यापक रूप से उपयोग की जाने वाली सामग्री प्रबंधन प्रणालियों के एक चौथाई को अभी भी पासवर्ड हैशिंग के लिए MD5 का उपयोग करने की सूचना मिली थी।[18]
सुरक्षा मुद्दों का अवलोकन
1996 में, MD5 के डिज़ाइन में एक दोष पाया गया। जबकि उस समय इसे एक घातक कमजोरी नहीं माना गया था, क्रिप्टोग्राफर्स ने अन्य एल्गोरिदम, जैसे कि SHA-1, के उपयोग की सिफारिश करना शुरू कर दिया था, जो तब से कमजोर भी पाया गया है।[26] 2004 में यह दिखाया गया था कि MD5 टक्कर-प्रतिरोधी नहीं है।[27] जैसे, MD5 परिवहन परत सुरक्षा सार्वजनिक कुंजी प्रमाणपत्र या डिजिटल हस्ताक्षर जैसे अनुप्रयोगों के लिए उपयुक्त नहीं है जो डिजिटल सुरक्षा के लिए इस संपत्ति पर भरोसा करते हैं। शोधकर्ताओं ने अतिरिक्त रूप से MD5 में अधिक गंभीर खामियों की खोज की, और एक संभावित टकराव के हमले का वर्णन किया - इनपुट की एक जोड़ी बनाने की एक विधि जिसके लिए MD5 समान चेकसम का उत्पादन करता है।[5][28] 2005, 2006 और 2007 में MD5 को तोड़ने में और प्रगति की गई।[29] दिसंबर 2008 में, शोधकर्ताओं के एक समूह ने नकली एसएसएल प्रमाणपत्र वैधता के लिए इस तकनीक का इस्तेमाल किया।[24][30] 2010 तक, सीएमयू सॉफ्टवेयर इंजीनियरिंग संस्थान एमडी5 को क्रिप्टोग्राफ़िक रूप से टूटा हुआ और आगे के उपयोग के लिए अनुपयुक्त मानता है,[31] और अधिकांश अमेरिकी सरकारी अनुप्रयोगों को अब हैश कार्यों के SHA-2 परिवार की आवश्यकता होती है।[32] 2012 में, Flame (मैलवेयर) मैलवेयर ने Microsoft डिजिटल हस्ताक्षर को नकली बनाने के लिए MD5 की कमजोरियों का फायदा उठाया।[33]
टक्कर भेद्यता
1996 में, MD5 के संपीड़न समारोह में टकराव पाए गए, और हंस डोबबर्टिन ने RSA प्रयोगशालाओं के तकनीकी समाचार पत्र में लिखा, प्रस्तुत हमले से अभी तक MD5 के व्यावहारिक अनुप्रयोगों को खतरा नहीं है, लेकिन यह काफी करीब आता है ... भविष्य में MD5 नहीं होना चाहिए लंबे समय तक लागू किया जाएगा ... जहां टकराव-प्रतिरोधी हैश फ़ंक्शन की आवश्यकता होती है।[34] 2005 में, शोधकर्ता परिशिष्ट भाग दस्तावेज़ों के जोड़े बनाने में सक्षम थे[35] और X.509 प्रमाणपत्र[36] उसी हैश के साथ। उस वर्ष बाद में, MD5 के डिजाइनर रॉन रिवेस्ट ने लिखा कि md5 और sha1 दोनों स्पष्ट रूप से टूट गए हैं (टक्कर-प्रतिरोध के संदर्भ में)।[37] 30 दिसंबर 2008 को, शोधकर्ताओं के एक समूह ने 25वीं अराजकता संचार कांग्रेस में घोषणा की कि कैसे उन्होंने एक इंटरमीडिएट सर्टिफिकेट अथॉरिटी सर्टिफिकेट बनाने के लिए MD5 टक्करों का उपयोग किया था जो इसके MD5 हैश द्वारा चेक किए जाने पर वैध प्रतीत होता था।[24]शोधकर्ताओं ने स्विट्ज़रलैंड के लॉज़ेन में इकोले पॉलीटेक्निक फेडेरेल डी लॉज़ेन में पीएस 3 क्लस्टर का इस्तेमाल किया[38] रैपिडएसएसएल द्वारा जारी किए गए एक सामान्य एसएसएल प्रमाणपत्र को उस जारीकर्ता के लिए एक कार्यशील सीए प्रमाणपत्र में बदलने के लिए, जिसका उपयोग तब अन्य प्रमाणपत्र बनाने के लिए किया जा सकता है जो वैध प्रतीत होंगे और रैपिडएसएसएल द्वारा जारी किए जाएंगे। रैपिडएसएसएल प्रमाणपत्र जारी करने वाले Verisign ने कहा कि एक बार भेद्यता की घोषणा होने के बाद उन्होंने रैपिडएसएसएल के लिए अपने चेकसम एल्गोरिथम के रूप में एमडी5 का उपयोग करके नए प्रमाणपत्र जारी करना बंद कर दिया।[39] हालांकि Verisign ने MD5 का उपयोग करके हस्ताक्षरित मौजूदा प्रमाणपत्रों को रद्द करने से इनकार कर दिया, लेकिन उनकी प्रतिक्रिया को एक्सप्लॉइट के लेखकों (अलेक्जेंडर सोतिरौ, मार्क स्टीवंस (क्रिप्टोलॉजी), जैकब एपेलबाउम, अर्जेन लेनस्ट्रा, डेविड मोलनार, डैग अर्ने ओस्विक, और बेने डी वेगर) द्वारा पर्याप्त माना गया था। .[24]ब्रूस श्नेयर ने हमले के बारे में लिखा है कि हम पहले से ही जानते थे कि MD5 एक टूटा हुआ हैश फ़ंक्शन है और अब किसी को भी MD5 का उपयोग नहीं करना चाहिए।[40] एसएसएल शोधकर्ताओं ने लिखा, हमारा वांछित प्रभाव यह है कि प्रमाणन प्राधिकरण नए प्रमाणपत्र जारी करने में एमडी5 का उपयोग करना बंद कर देंगे। हम यह भी आशा करते हैं कि अन्य अनुप्रयोगों में MD5 के उपयोग पर भी पुनर्विचार किया जाएगा।[24]
2012 में, Microsoft के अनुसार, फ़्लेम (मैलवेयर) मैलवेयर के लेखकों ने Windows कोड-हस्ताक्षर प्रमाणपत्र बनाने के लिए MD5 टक्कर का उपयोग किया।[33]
MD5 मर्कले-डैमगार्ड निर्माण का उपयोग करता है, इसलिए यदि एक ही हैश के साथ दो उपसर्गों का निर्माण किया जा सकता है, तो दोनों में एक सामान्य प्रत्यय जोड़ा जा सकता है ताकि टक्कर का उपयोग करने वाले एप्लिकेशन द्वारा मान्य डेटा के रूप में स्वीकार किए जाने की अधिक संभावना हो। इसके अलावा, वर्तमान टकराव-ढूंढने की तकनीक एक मनमाना उपसर्ग निर्दिष्ट करने की अनुमति देती है: एक हमलावर दो टकराने वाली फाइलें बना सकता है जो दोनों एक ही सामग्री से शुरू होती हैं। सभी हमलावरों को दो टकराने वाली फाइलें उत्पन्न करने की आवश्यकता होती है, डेटा के 128-बाइट ब्लॉक के साथ एक टेम्पलेट फ़ाइल होती है, जो 64-बाइट सीमा पर संरेखित होती है, जिसे टक्कर-ढूँढने वाले एल्गोरिदम द्वारा स्वतंत्र रूप से बदला जा सकता है। एक उदाहरण MD5 टक्कर, दो संदेशों के साथ 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
दोनों MD5 हैश का उत्पादन करते हैं 79054025255fb1a26e4bc422aef54eb4.[41]
दो नमूनों के बीच का अंतर यह है कि प्रत्येक कुतरना में अग्रणी बिट फ़्लिप किया गया है। उदाहरण के लिए, शीर्ष नमूना 0x87 में 20वां बाइट (ऑफ़सेट 0x13), बाइनरी में 10000111 है। बाइट में अग्रणी बिट (पहले कुतरने में भी अग्रणी बिट) को 00000111 बनाने के लिए फ़्लिप किया जाता है, जो कि 0x07 है, जैसा कि निचले नमूने में दिखाया गया है।
बाद में अलग-अलग चुने गए उपसर्गों के साथ दो फ़ाइलों के बीच टकराव का निर्माण करना भी संभव पाया गया। इस तकनीक का उपयोग 2008 में दुष्ट सीए प्रमाणपत्र के निर्माण में किया गया था। 2014 में एंटोन कुज़नेत्सोव द्वारा संदेश पासिंग इंटरफ़ेस का उपयोग करके समानांतर टकराव की खोज का एक नया संस्करण प्रस्तावित किया गया था, जिसने कंप्यूटिंग क्लस्टर पर 11 घंटे में टक्कर खोजने की अनुमति दी थी।[42]
प्रीइमेज भेद्यता
अप्रैल 2009 में, एमडी5 के खिलाफ एक हमला प्रकाशित किया गया था जो एमडी5 के प्रीइमेज प्रतिरोध को तोड़ता है। यह हमला केवल सैद्धांतिक है, 2 की कम्प्यूटेशनल जटिलता के साथ123.4 पूर्ण प्रीइमेज के लिए।[43][44]
अनुप्रयोग
MD5 डाइजेस्ट का सॉफ़्टवेयर की दुनिया में व्यापक र