MD5的全稱是Message-Digest Algorithm 5,由麻省理工學院計算機科學實驗室和RSA數據安全公司的羅納德·L·李維斯特在90年代初開發,由MD2、MD3和MD4開發。其作用是在用數字簽名軟件簽署私鑰之前,將大容量的信息“壓縮”成安全的格式(即將任意長度的字節串轉換成壹定長度的大整數)。無論是MD2、MD4還是MD5,都需要得到壹個隨機長度的信息,生成壹個128位的信息摘要。雖然這些算法的結構或多或少有些相似,但MD2的設計與MD4和MD5完全不同,因為MD2是為8位機優化的,而MD4和MD5是為32位機設計的。互聯網RFCs 1321(http://www . IETF . org/RFC/RFC 1321 . txt)對這三種算法的描述和C語言的源代碼都有詳細的描述,這是羅納德·L·李維斯特在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,哈弗等。
壹年後,也就是1991年,Rivest開發出了技術上更成熟的MD5算法。它在MD4的基礎上增加了“安全帶”的概念。雖然MD5比MD4稍慢,但它更安全。該算法顯然由四個步驟組成,與MD4設計略有不同。在MD5算法中,信息摘要的大小和填充的必要條件與MD4完全相同。Den Boer和Bosselaers曾經發現了MD5算法中的偽碰撞,但是沒有其他發現的加密結果。
Van Oorschot和Wiener曾經考慮過壹個暴力哈希函數來搜索哈希中的沖突,他們猜測壹個專門設計來搜索MD5沖突的機器(這個機器的制造成本在1994年大約是壹百萬美元)平均每24天就可以發現壹個沖突。但是在1991到2001的10年中,並沒有出現新的算法叫MD6來代替MD5,所以我們可以看到這個缺陷並沒有對MD5的安全性造成太大的影響。以上都不足以成為MD5實際應用中的問題。而且,由於使用MD5算法不需要支付任何版權費用,壹般來說(非絕密應用領域。但即使用在絕密領域,MD5也是壹種優秀的中間技術),MD5在任何情況下都應該被認為是非常安全的。