MD5演算法研究

來源:互聯網
上載者:User
演算法 綜述

  MD5的全稱是Message-Digest Algorithm 5(資訊-摘要演算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest開發出來,經MD2、MD3和MD4發展而來。它的作用是讓大容量資訊在用數位簽章軟體簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是MD2、MD4還是MD5,它們都需要獲得一個隨機長度的資訊併產生一個128位的資訊摘要。雖然這些演算法的結構或多或少有些相似,但MD2的設計與MD4和MD5完全不同,那是因為MD2是為8位機器做過設計最佳化的,而MD4和MD5卻是面向32位的電腦。這三個演算法的描述和C語言原始碼在Internet RFCs 1321中有詳細的描述(http://www.ietf.org/rfc/rfc1321.txt),這是一份最權威的文檔,由Ronald L. Rivest在1992年8月向IEFT提交。

  Rivest在1989年開發出MD2演算法。在這個演算法中,首先對資訊進行資料補位,使資訊的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到資訊末尾。並且根據這個新產生的資訊計算出散列值。後來,Rogier和Chauvaud發現如果忽略了檢驗和將產生MD2衝突。MD2演算法的加密後結果是唯一的--既沒有重複。

  為了加強演算法的安全性,Rivest在1990年又開發出MD4演算法。MD4演算法同樣需要填補資訊以確保資訊的位元組長度加上448後能被512整除(資訊位元組長度mod 512 = 448)。然後,一個以64位二進位表示的資訊的最初長度被添加進來。資訊被處理成512位Damg?rd/Merkle迭代結構的區塊,而且每個區塊要通過三個不同步驟的處理。Den Boer和Bosselaers以及其他人很快的發現了攻擊MD4版本中第一步和第三步的漏洞。Dobbertin向大家示範了如何利用一部普通的個人電腦在幾分鐘內找到MD4完整版本中的衝突(這個衝突實際上是一種漏洞,它將導致對不同的內容進行加密卻可能得到相同的加密後結果)。毫無疑問,MD4就此被淘汰掉了。

  儘管MD4演算法在安全上有個這麼大的漏洞,但它對在其後才被開發出來的好幾種資訊安全密碼編譯演算法的出現卻有著不可忽視的引導作用。除了MD5以外,其中比較有名的還有SHA-1、RIPE-MD以及HAVAL等。

  一年以後,即1991年,Rivest開發出技術上更為趨近成熟的MD5演算法。它在MD4的基礎上增加了"安全-帶子"(Safety-Belts)的概念。雖然MD5比MD4稍微慢一些,但卻更為安全。這個演算法很明顯的由四個和MD4設計有少許不同的步驟組成。在MD5演算法中,資訊-摘要的大小和填充的必要條件與MD4完全相同。Den Boer和Bosselaers曾發現MD5演算法中的假衝突(Pseudo-Collisions),但除此之外就沒有其他被發現的加密後結果了。

  Van Oorschot和Wiener曾經考慮過一個在散列中暴力搜尋衝突的函數(Brute-Force Hash Function),而且他們猜測一個被設計專門用來搜尋MD5衝突的機器(這台機器在1994年的製造成本大約是一百萬美元)可以平均每24天就找到一個衝突。但單從1991年到2001年這10年間,竟沒有出現替代MD5演算法的MD6或被叫做其他什麼名字的新演算法這一點,我們就可以看出這個瑕疵並沒有太多的影響MD5的安全性。上面所有這些都不足以成為MD5的在實際應用中的問題。並且,由於MD5演算法的使用不需要支付任何著作權費用的,所以在一般的情況下(非絕密應用領域。但即便是應用在絕密領域內,MD5也不失為一種非常優秀的中間技術),MD5怎麼都應該算得上是非常安全的了。

  演算法的應用

  MD5的典型應用是對一段資訊(Message)產生資訊摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多軟體在下載的時候都有一個檔案名稱相同,副檔名為.md5的檔案,在這個檔案中通常只有一行文本,大致結構如:

   MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461

  這就是tanajiya.tar.gz檔案的數位簽章。MD5將整個檔案當作一個大文本資訊,通過其無法復原的字串變換演算法,產生了這個唯一的MD5資訊摘要。如果在以後傳播這個檔案的過程中,無論檔案的內容發生了任何形式的改變(包括人為修改或者下載過程中線路不穩定引起的傳輸錯誤等),只要你對這個檔案重新計算MD5時就會發現資訊摘要不相同,由此可以確定你得到的只是一個不正確的檔案。如果再有一個第三方的認證機構,用MD5還可以防止檔案作者的"抵賴",這就是所謂的數位簽章應用。

  MD5還廣泛用於加密和解密技術上。比如在UNIX系統中使用者的密碼就是以MD5(或其它類似的演算法)經加密後儲存在檔案系統中。當使用者登入的時候,系統把使用者輸入的密碼計算成MD5值,然後再去和儲存在檔案系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道使用者密碼的明碼的情況下就可以確定使用者登入系統的合法性。這不但可以避免使用者的密碼被具有系統管理員許可權的使用者知道,而且還在一定程度上增加了密碼被破解的難度。

  正是因為這個原因,現在被駭客使用最多的一種破譯密碼的方法就是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字串表,另一種是用排列組合方法產生的,先用MD5程式計算出這些字典項的MD5值,然後再用目標的MD5值在這個字典中檢索。我們假設密碼的最大長度為8位位元組(8 Bytes),同時密碼只能是字母和數字,共26+26+10=62個字元,排列組合出的字典的項數則是P(62,1)+P(62,2)….+P(62,8),那也已經是一個很天文的數字了,儲存這個字典就需要TB級的磁碟陣列,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。這種加密技術被廣泛的應用於UNIX系統中,這也是為什麼UNIX系統比一般作業系統更為堅固一個重要原因。

  演算法描述

  對MD5演算法簡要的敘述可以為:MD5以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將產生一個128位散列值。

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

  MD5中有四個32位被稱作連結變數(Chaining Variable)的整數參數,他們分別為:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。

  當設定好這四個連結變數後,就開始進入演算法的四輪迴圈運算。迴圈的次數是資訊中512位資訊分組的數目。

  將上面四個連結變數複製到另外四個變數中:A到a,B到b,C到c,D到d。

  主迴圈有四輪(MD4隻有三輪),每輪迴圈都很相似。第一輪進行16次操作。每次操作對a、b、c和d中的其中三個作一次非線性函數運算,然後將所得結果加上第四個變數,文本的一個子分組和一個常數。再將所得結果向右環移一個不定的數,並加上a、b、c或d中之一。最後用該結果取代a、b、c或d中之一。
以一下是每次操作中用到的四個非線性函數(每輪一個)。

   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))
   (&是與,|是或,~是非,^是異或)

  這四個函數的說明:如果X、Y和Z的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。
F是一個逐位元運算的函數。即,如果X,那麼Y,否則Z。函數H是逐位奇偶操作符。

  假設Mj表示訊息的第j個子分組(從0到15),<<
   FF(a,b,c,d,Mj,s,ti)表示a=b+((a+(F(b,c,d)+Mj+ti)<<    GG(a,b,c,d,Mj,s,ti)表示a=b+((a+(G(b,c,d)+Mj+ti)<<    HH(a,b,c,d,Mj,s,ti)表示a=b+((a+(H(b,c,d)+Mj+ti)<<    II(a,b,c,d,Mj,s,ti)表示a=b+((a+(I(b,c,d)+Mj+ti)<<
  這四輪(64步)是:

  第一輪

   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)

  第二輪



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。