MD5

MD5

MD5即Message-Digest Algorithm 5(信息摘要算法5),是計算機廣泛使用的散列算法之一(又譯摘要算法、哈希算法)。經MD2、MD3和MD4發展而來,誕生於20世紀90年代初。用於確保信息傳輸完整一致。雖然已被破解,但仍然具有較好的安全性,加之可以免費使用,所以仍廣泛運用於數字簽名、檔案完整性驗證以及口令加密等領域。MD5即Message-Digest Algorithm5(信息-摘要算法5),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流程式語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。

基本信息

基本簡介

MD5MD5
MD5的全稱是Message-digest Algorithm5(中文譯作信息摘要算法5),用於確保信息傳輸完整一致。是計算機廣泛使用的散列算法之一。它經MD2MD3MD4發展而來,在20世紀90年代初誕生。
它的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被“壓縮”成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是MD2MD4還是MD5,它們都需要獲得一個隨機長度的信息並產生一個128位的信息摘要。雖然這些算法的結構或多或少有些相似,但MD2的設計與MD4和MD5完全不同,那是因為MD2是為8位機器做過設計最佳化的,而MD4和MD5卻是面向32位的電腦。

發展歷史

MD5MD5
1989年,RonaldL.Rivest開發出MD2算法。在這個算法中,首先對信息進行數據補位,使信息的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾。並且根據這個新產生的信息計算出散列值。MD2的誕生揭開了人們對加密算法的新一輪研究。
很快有人發現如果忽略了檢驗和將產生MD2衝突。為了MD2的加強算法的安全性,RonaldL.Rivest又開發出MD3、MD4算法。
1991年,Rivest開發出技術上更為趨近成熟的MD5算法。它在MD4的基礎上增加了“安全-帶子”(safety-belts)的概念。雖然MD5比MD4稍微慢一些,但卻更為安全。這個算法很明顯的由四個和MD4設計有少許不同的步驟組成。在MD5算法中,信息摘要的大小和填充的必要條件與MD5完全相同。Denboer和Bosselaers曾發現MD5算法中的假衝突(pseudo-collisions),但除此之外就沒有其他被發現的加密後結果了。

相關研究

MD5算法破解
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仍然算是一種安全的算法。

加密原理

MD5MD5
MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。
在MD5算法中,首先需要對信息進行填充,使其位元組長度對512求餘數的結果等於448。因此,信息的位元組長度(BitsLength)將被擴展至N*512+448,即N*64+56個位元組(Bytes),N為一個正整數。填充的方法如下,在信息的後面填充一個1和無數個0個,直到滿足上面的條件時才停止用0對信息的填充。然後再在這個結果後面附加一個以64位二進制表示的填充前的信息長度。經過這兩步的處理,現在的信息位元組長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍數。這樣做的原因是為滿足後面處理中對信息長度的要求。MD5中有四個32位被稱作連結變數(ChainingVariable)的整數參數,他們分別為: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算法主要運用在數字簽名、檔案完整性驗證以及口令加密等方面。

盤點密碼學相關知識

盤點密碼學相關知識,密碼學是研究編制密碼和破譯密碼的技術科學。

相關詞條

相關搜尋

熱門詞條

聯絡我們