必威电竞|足球世界杯竞猜平台

MD5
來源:互聯網

MD5即Message-Digest Algorithm5(信息摘要算法5),是計算機廣泛使用的散列算法之一(又譯摘要算法、哈希算法)。經MD2、MD3和MD4發展而來,誕生于20世紀90年代初。用于確保信息傳輸完整一致。雖然已被破解,但仍然具有較好的安全性,加之可以免費使用,所以仍廣泛運用于數字簽名、文件完整性驗證以及口令加密等領域。

MD5即Message-Digest Algorithm5(信息-摘要算法5),用于確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。

基本簡介

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

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

發展歷史

1992年8月,羅納德·李維斯特互聯網工程任務組(IETF)提交了一份重要文件,描述了這種算法的原理。由于這種算法的公開性和安全性,在90年代被廣泛使用在各種程序語言中,用以確保資料傳遞無誤等。

MD5由MD4、MD3、MD2改進而來,主要增強算法復雜度和不可逆性。MD5算法因其普遍、穩定、快速的特點,仍廣泛應用于普通數據的加密保護領域。

MD2

Rivest在1989年開發出MD2算法。在這個算法中,首先對信息進行數據補位,使信息的字節長度是16的倍數。然后,以一個16位的校驗和追加到信息末尾,并且根據這個新產生的信息計算出散列值。后來,Rogier和Chauvaud發現如果忽略了校驗和MD2將產生沖突。MD2算法加密后結果是唯一的(即不同信息加密后的結果不同)。

MD4

為了加強算法的安全性,Rivest在1990年又開發出MD4算法。MD4算法同樣需要填補信息以確保信息的比特位長度減去448后能被512整除(信息比特位長度mod512=448)。然后,一個以64位二進制表示的信息的最初長度被添加進來。信息被處理成512位damgard/merkle迭代結構的區塊,而且每個區塊要通過三個不同步驟的處理。Denboer和Bosselaers以及其他人很快地發現了攻擊MD4版本中第一步和第三步的漏洞。Dobbertin向大家演示了如何利用一部普通的個人電腦在幾分鐘內找到MD4完整版本中的沖突(這個沖突實際上是一種漏洞,它將導致對不同的內容進行加密卻可能得到相同的加密后結果)。

MD5

1991年,Rivest開發出技術上更為趨近成熟的MD5算法。它在MD4的基礎上增加了"安全帶"(safety-belts)的概念。雖然MD5比MD4復雜度大一些,但卻更為安全。這個算法很明顯的由四個和MD4設計有少許不同的步驟組成。在MD5算法中,信息-摘要的大小和填充的必要條件與MD4完全相同。Den boer和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相對MD4所作的改進:

MD5算法自誕生之日起,就有很多人試圖證明和發現它的不安全之處,即存在碰撞(在對兩個不同的內容使用MD5算法運算的時候,有可能得到一對相同的結果值)。2009年,中國科學院謝濤馮登國僅用了的碰撞算法復雜度,破解了MD5的碰撞抵抗,該攻擊在普通計算機上運行只需要數秒鐘。

破解方法

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

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

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

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

因此簡單的MD5加密是沒有辦法達到絕對的安全的,因為普通的MD5加密有多種暴力破解方式,因此如果想要保證信息系統或者網站的安全,需要對MD5進行改造,增強其安全性。但對于公司以及普通用戶來說,從算法上來破解MD5非常困難,因此MD5仍然算是一種安全的算法。

代碼簡介

C++實現

JAVA實現

VB2010實現

ECMAScript實現

JavaScript版本的實現代碼,可以用于瀏覽器中運行和計算文本字符串的MD5。

加密原理

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值(或類似的其它算法)的方式保存起來,用戶注冊的時候,系統是把用戶輸入的密碼計算成MD5值,然后再去和系統中保存的MD5值進行比較,如果密文相同,就可以認定密碼是正確的,否則密碼錯誤。通過這樣的步驟,系統在并不知道用戶密碼明碼的情況下就可以確定用戶登錄系統的合法性。這樣不但可以避免用戶的密碼被具有系統管理員權限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。

電子簽名

MD5算法還可以作為一種電子簽名的方法來使用,使用MD5算法就可以為任何文件(不管其大小、格式、數量)產生一個獨一無二的“數字指紋”,借助這個“數字指紋”,通過檢查文件前后MD5值是否發生了改變,就可以知道源文件是否被改動。我們在下載軟件的時候經常會發現,軟件的下載頁面上除了會提供軟件的下載地址以外,還會給出一串長長的字符串。這串字符串其實就是該軟件的MD5值,它的作用就在于下載該軟件后,對下載得到的文件用專門的軟件(如Windows MD5 check等)做一次MD5校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。利用MD5算法來進行文件校驗的方案被大量應用到軟件下載站、論壇數據庫、系統文件安全等方面。

垃圾郵件篩選

在電子郵件使用越來越普遍的情況下,可以利用MD5算法在郵件接收服務器上進行垃圾郵件的篩選,以減少此類郵件的干擾,具體思路如下:

參考資料 >

《計算機研究》:MD算法研究.www.cnki.com.cn.2011-12-31

生活家百科家居網