由來
是當前公認的強度最高的加密算法。出現在MD5之前的是MD2和MD4,間隔分別只有一年。雖然三者的算法結構多少有點相似,但是由於MD2誕生於8位計算機的時代,因此它的設計與後來出現的MD4、MD5完全不同,因此不能進行簡單的替代。然而,無論是MD2、MD4還是MD5,它們都是在獲得一個隨機長度信息的基礎上產生一個128位信息摘要的算法。
MD2算法是Rivest在1989年開發的,它很慢(因為是為8位機器設計的),但相當安全。在這個算法中,首先要對信息進行數據補位,使信息的位元組長度是16的倍數。然後,以一個16位的檢驗和追加到信息末尾,並且根據這個新產生的信息計算出散列值(Hash),最終運算結果即為類似於“d41d8cd98f00b204e9800998ecf8427e”的摘要,而且這個值是唯一的。
為了加強算法的安全性,Rivest在1990年又開發出MD4算法。MD4算法同樣需要填補信息以確保信息的位元組長度加上448後能被512整除(信息位元組長度除以512的餘數為448)。然後,一個以64位二進制表示的信息的最初長度被添加進來。信息被處理成512位Merkle疊代結構的區塊,而且每個區塊要通過三個不同步驟的處理,最終生成摘要。
然而MD4存在一個嚴重漏洞,那就是“衝突”(Collisions)。“衝突”是所有基於“摘要”的算法都要面對的最大問題,由於它們是根據“不完整”的數據內容產生的密文,如果運算過程存在暇癖,就會在處理某些不同數據時產生相同的摘要,這後果可是致命的,因為“摘要”算法的原則是原數據不可還原,因此驗證的過程並不同於簡單加密運算里的“數據還原匹配”,驗證端同樣要根據原數據(甚至連原數據都沒有,而僅僅是最初保存的摘要)進行運算得到的摘要作為憑據與客戶端發來的摘要進行匹配檢驗,如果兩段字元串完全相同,即視為驗證通過。這是在“摘要算法”理論上“不可逆且唯一”的基礎上採用的安全檢驗方法,驗證方可以不需要索取原數據,而只要擁有一個有效的摘要即可完成對客戶端的身份確認,大大減少了原數據被入侵者掌握的幾率。
但是這樣的驗證的方式就產生了一個“看似不可能”的缺陷:假如入侵者能偽造出一段數據,使之能在通過“摘要”計算後產生的摘要與真正的原數據產生的摘要一樣,那么入侵者便能冒充原數據持有者通過身份驗證。這在理論上是不可能的,然而現實總是不會讓人那么愉快,由於算法不可避免的出現了漏洞,使得這個構想成為了事實,這就是“衝突”的來源:某兩個或多個數據產生的摘要出現了完全雷同的現象,使得用戶能在輸入了即使不是原數據的密碼後能順利通過驗證,因為身份檢驗程式發現原本儲存的用戶信息的簽名數據與接收到的數據的運算結果完全一致,於是認為請求方為合法用戶,就給予通過了。這種運算結果相同的現象,就是“衝突”。
現狀
“衝突”會造成非常危險的後果,因此MD4被無情的拋棄了,取而代之的是在MD4基礎上加強了算法的MD5,它在MD4的基礎上增加了“安全帶”(Safety Belts)的概念,雖然MD5比MD4稍微慢一些,但卻大大減小了衝突的發生率,雖然很早以前就有專家發現MD5算法在專門用於尋找“衝突”的機器上平均每24天就會產生一個“衝突”,但是對於一般套用來說,這種幾率已經非常低微,因此MD5至今仍然是最強健的加密算法。