MD5值算法原理


MD5原理說明

一、MD5算法介紹。

MD5“Message-Digest Algorithm 5信息-摘要算法從名字來看就知道它是從MD3MD4發展而來的一種加密算法其主要通過采集文件的信息摘要以此進行計算並加密。通過MD5算法進行加密,文件就可以獲得一個唯一的MD5值,這個值是獨一無二的,就像我們的指紋一樣,因此我們就可以通過文件的MD5值來確定文件是否正確,密碼進行加密后也會生成MD5值,論壇就是通過MD5值來驗證用戶的密碼是否正確的。

 

二、MD5算法實現。

MD5是輸入不定長度信息,輸出固定長度128-bits的算法。經過程序流程,生成四個32位數據,最后聯合起來成為一個128-bits散列。基本方式為,求余、取余、調整長度、與鏈接變量進行循環運算。得出結果。

1、填充編碼。

MD5算法中,首先需要對信息進行填充,使其位長對512求余的結果等於448。因此,信息的位長(Bits Length)將被擴展至N*512+448N為一個非負整數,N可以是零。填充的方法如下,在信息的后面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然后,在這個結果后面附加一個以64位二進制表示的填充前信息長度。經過這兩步的處理,現在的信息的位長=N*512+448+64=(N+1*512,即長度恰好是512的整數倍。這樣做的原因是為滿足后面處理中對信息長度的要求。

                          MD5原理說明

 2、算法實現。

如右圖,一個MD5運算由類似的64次循環構成,分成4組16次。F 一個非線性函數;一個函數運算一次。Mi 表示一個 32-bits 的輸入數據,Ki表示一個 32-bits 常數,用來完成每次不同的計算。

主循環有四輪(MD4只有三輪),每輪循環都很相似。第一輪進行16次操作。每次操作對abcd中的其中三個作一次非線性函數運算,然后將所得結果加上第四個變量,文本的一個子分組和一個常數。再將所得結果向左環移一個不定的數,並加上abcd中之一。最后用該結果取代abcd中之一。

以下是每次操作中用到的四個非線性函數(每輪一個)。

F(X, Y, Z) =(X&Y) | ((~X) & Z)

  G(X, Y, Z) =(X&Z) | (Y & (~Z))

  H(X, Y, Z) =X^Y^Z

  I(X, Y, Z)=Y^(X|(~Z))

       &;是與,|是或,~是非,^是異或)

具體這64次循環(分4輪)過程函數如下:

                              

 

第一輪:(MD5一共4輪)

FF(a,b,c,d,M0,7,0xd76aa478

  FF(d,a,b,c,M1,12,0xe8c7b756

  FF(c, d, a, b, M2,17, 0x242070db)

  FF(b,c,d,a,M3,22,0xc1bdceee)

  FF(a,b,c,d,M4,7,0xf57c0faf)

  FF(d,a,b,c,M5,12,0x4787c62a)

  FF(c,d,a,b,M6,17,0xa8304613

  FF(b,c,d,a,M7,22,0xfd469501

  FF(a,b,c,d,M8,7,0x698098d8

  FF(d,a,b,c,M9,12,0x8b44f7af)

  FF(c,d,a,b,M10,17,0xffff5bb1

  FF(b,c,d,a,M11,22,0x895cd7be)

  FF(a,b,c,d,M12,7,0x6b901122

  FF(d,a,b,c,M13,12,0xfd987193

  FF(c, d, a, b, M14,17, 0xa679438e)

  FF(b,c,d,a,M15,22,0x49b40821

  第二輪

  GG(a,b,c,d,M1,5,0xf61e2562

  GG(d,a,b,c,M6,9,0xc040b340

  GG(c,d,a,b,M11,14,0x265e5a51

  GG(b,c,d,a,M0,20,0xe9b6c7aa)

  GG(a,b,c,d,M5,5,0xd62f105d)

  GG(d,a,b,c,M10,9,0x02441453

  GG(c,d,a,b,M15,14,0xd8a1e681

  GG(b,c,d,a,M4,20,0xe7d3fbc8

  GG(a,b,c,d,M9,5,0x21e1cde6

  GG(d,a,b,c,M14,9,0xc33707d6

  GG(c,d,a,b,M3,14,0xf4d50d87

  GG(b,c,d,a,M8,20,0x455a14ed)

  GG(a,b,c,d,M13,5,0xa9e3e905

  GG(d,a,b,c,M2,9,0xfcefa3f8

  GG(c,d,a,b,M7,14,0x676f02d9

  GG(b,c,d,a,M12,20,0x8d2a4c8a)

  第三輪

  HH(a,b,c,d,M5,4,0xfffa3942

  HH(d,a,b,c,M8,11,0x8771f681

  HH(c,d,a,b,M11,16,0x6d9d6122

  HH(b,c,d,a,M14,23,0xfde5380c)

  HH(a,b,c,d,M1,4,0xa4beea44

  HH(d,a,b,c,M4,11,0x4bdecfa9

  HH(c,d,a,b,M7,16,0xf6bb4b60

  HH(b,c,d,a,M10,23,0xbebfbc70

  HH(a,b,c,d,M13,4,0x289b7ec6

  HH(d,a,b,c,M0,11,0xeaa127fa)

  HH(c,d,a,b,M3,16,0xd4ef3085

  HH(b,c,d,a,M6,23,0x04881d05

  HH(a,b,c,d,M9,4,0xd9d4d039

  HH(d,a,b,c,M12,11,0xe6db99e5

  HH(c,d,a,b,M15,16,0x1fa27cf8

  HH(b,c,d,a,M2,23,0xc4ac5665

  第四輪

  a,b,c,d,M0,6,0xf4292244

  d,a,b,c,M7,10,0x432aff97

  c,d,a,b,M14,15,0xab9423a7

  b,c,d,a,M5,21,0xfc93a039

  a,b,c,d,M12,6,0x655b59c3

  d,a,b,c,M3,10,0x8f0ccc92

  c,d,a,b,M10,15,0xffeff47d)

  b,c,d,a,M1,21,0x85845dd1

  a,b,c,d,M8,6,0x6fa87e4f)

  d,a,b,c,M15,10,0xfe2ce6e0)

  c,d,a,b,M6,15,0xa3014314

  b,c,d,a,M13,21,0x4e0811a1

  a,b,c,d,M4,6,0xf7537e82

  d,a,b,c,M11,10,0xbd3af235

  c,d,a,b,M2,15,0x2ad7d2bb)

  b,c,d,a,M9,21,0xeb86d391

 

 

三、MD5算法的不足。

現在看來,MD5已經較老,散列長度通常為128位,隨着計算機運算能力提高,找到“碰撞”是可能的。因此,在安全要求高的場合不使用MD5。

2004年,王小雲教授證明MD5數字簽名算法可以產生碰撞。2007年,Marc Stevens,Arjen K. Lenstra和Benne de Weger進一步指出通過偽造軟件簽名,可重復性攻擊MD5算法。研究者使用前綴碰撞法(chosen-prefix collision),使程序前端包含惡意程序,利用后面的空間添上垃圾代碼湊出同樣的MD5 Hash值。2007年,荷蘭埃因霍芬技術大學科學家成功把2個可執行文件進行了MD5碰撞,使得這兩個運行結果不同的程序被計算出同一個MD5。2008年12月科研人員通過MD5碰撞成功生成了偽造的SSL證書,這使得在https協議中服務器可以偽造一些根CA的簽名

MD5被攻破后,在Crypto2008上, Rivest提出了MD6算法,該算法的Block size為512 bytes(MD5的Block Size是512 bits), Chaining value長度為1024 bits, 算法增加了並行 機制,適合於多核CPU。 在安全性上,Rivest宣稱該算法能夠抵抗截至目前已知的所有的 攻擊(包括差分攻擊)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM