MD5

MD5

計算機算法
MD5即Message-Digest Algorithm5(信息摘要算法5),是計算機廣泛使用的散列算法之一(又譯摘要算法、哈希算法)。經MD2、MD3和MD4發展而來,誕生于20世紀90年代初。用于确保信息傳輸完整一緻。雖然已被破解,但仍然具有較好的安全性,加之可以免費使用,所以仍廣泛運用于數字簽名、文件完整性驗證以及口令加密等領域。MD5的全稱是Message-digest Algorithm5(信息-摘要算法),用于确保信息傳輸完整一緻。[1]是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。将數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。
    中文名:消息摘要算法 外文名: 别名: 英文名:MD5 其他外文名:Message Digest Algorithm MD5 别稱:摘要算法 提出時間:1991年 應用學科:信息技術 适用領域:軟件下載站、論壇數據庫

基本簡介

MD5的全稱是Message-digest Algorithm5(中文譯作信息摘要算法5),用于确保信息傳輸完整一緻。是計算機廣泛使用的散列算法之一。它經MD2、MD3和MD4發展而來,在20世紀90年代初誕生。

它的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被“壓縮”成一種保密的格式(就是把一個任意長度的字節串變換成一定長的大整數)。不管是MD2、MD4還是MD5,它們都需要獲得一個随機長度的信息并産生一個128位的信息摘要。雖然這些算法的結構或多或少有些相似,但MD2的設計與MD4和MD5完全不同,那是因為MD2是為8位機器做過設計優化的,而MD4和MD5卻是面向32位的電腦。

發展曆史

1989年,Ronald L.Rivest開發出MD2算法。在這個算法中,首先對信息進行數據補位,使信息的字節長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾。并且根據這個新産生的信息計算出散列值。MD2的誕生揭開了人們對加密算法的新一輪研究。

很快有人發現如果忽略了檢驗和将産生MD2沖突。為了MD2的加強算法的安全性,Ronald L.Rivest又開發出MD3、MD4算法。

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

相關研究

2004年8月17日的美國加州聖巴巴拉的國際密碼學會議(Crypto2004)上,來自中國山東大學的王小雲教授做了破譯MD5、HAVAL-128、MD4和RIPEMD算法的報告,公布了MD系列算法的破解結果。宣告了世界通行密碼标準MD5不再安全。

2008年,荷蘭埃因霍芬技術大學科學家成功把2個可執行文件進行了MD5碰撞,使得這兩個運行結果不同的程序被計算出同一個MD。2008年12月一組科研人員通過MD5碰撞成功生成了僞造的SSL證書,這使得在https協議中服務器可以僞造一些根CA的簽名。

破解方法

對信息系統或者網站系統來說,MD5算法主要用在用戶注冊口令的加密,對于普通強度的口令加密,可以通過以下三種方式進行破解:

(1)在線查詢密碼。一些在線的MD5值查詢網站提供MD5密碼值的查詢,輸入MD5密碼值後,如果在數據庫中存在,那麼可以很快獲取其密碼值。

(2)使用MD5破解工具。網絡上有許多針對MD5破解的專用軟件,通過設置字典來進行破解。

(3)通過社會工程學來獲取或者重新設置用戶的口令。

因此簡單的MD5加密是沒有辦法達到絕對的安全的,因為普通的MD5加密有多種暴力破解方式,因此如果想要保證信息系統或者網站的安全,需要對MD5進行改造,增強其安全性。但對于公司以及普通用戶來說,從算法上來破解MD5非常困難,因此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是逐位奇偶操作符。所有這些完成之後,将A,B,C,D分别加上a,b,c,d。然後用下一分組數據繼續運行算法,最後的輸出是A,B,C和D的級聯。最後得到的A,B,C,D就是輸出結果,A是低位,D為高位,DCBA組成128位輸出結果。

軟件應用

MD5加密算法由于其具有較好的安全性,加之商業也可以免費使用該算法,因此該加密算法被廣泛使用,md5算法主要運用在數字簽名、文件完整性驗證以及口令加密等方面。

相關詞條

相關搜索

其它詞條