有人問我說為什麼我在 Blog 所發佈的檔案中都有 MD5 這一大串數字呢? 稍微解釋一下, 這是怕檔案被竄改而為下載者所做的一點保護, 可能有人不太懂了, 舉個小例子:
火影忍者 253 話壓縮 zip 檔的 MD5 碼是 081fc582c8aecaf6a6b11f44f6a7de57, 但要是下載回來用 MD5 校驗值軟體檢測出來碼卻是 d27f060627dc33955cb8f7b5e1423b34, 那說明這個壓縮檔並非我原始丟出來的檔案, 至於還要不要執行它這就要考慮一下安全問題了.
話說 MD5 也不再是那麼的安全了, MD5 跟 SHA-1 兩大密碼演算密碼在去年八月跟今年二月都被大陸王小雲教授破解, 美國國家標準與技術研究院已經表示美國政府五年內將不再使用 SHA-1.
下面是轉載來的 MD5 介紹:
MD5的全稱是Message-Digest Algorithm 5(資訊-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest開發出來,經MD2、MD3和MD4發展而來。它的作用是讓大容量資訊在用數字簽名軟體簽署私人密匙前被”壓縮”成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的大整數)。不管是MD2、MD4還是MD5,它們都需要獲得一個隨機長度的資訊並產生一個128位的資訊摘要。雖然這些算法的結構或多或少有些相似,但MD2的設計與MD4和MD5完全不同,那是因為MD2是為8位機器做過設計優化的,而MD4和MD5卻是面向32位的電腦。這三個算法的描述和C語言源代碼在Internet RFCs 1321中有詳細的描述http://www.ietf.org/rfc/rfc1321.txt),這是一份最權威的文檔,由Ronald L. Rivest在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以及HAVAL等。
一年以后,即1991年,Rivest開發出技術上更為趨近成熟的MD5算法。它在MD4的基礎上增加了”安全-帶子”(Safety-Belts)的概念。雖然MD5比MD4稍微慢一些,但卻更為安全。這個算法很明顯的由四個和MD4設計有少酗ㄕP的步驟組成。在MD5算法中,資訊-摘要的大小和填充的必要條件與MD4完全相同。Den Boer和Bosselaers曾發現MD5算法中的假沖突(Pseudo-Collisions),但除此之外就沒有其他被發現的加密后結果了。
Van Oorschot和Wiener曾經考慮過一個在散列中暴力搜尋沖突的函數(Brute-Force Hash Function),而且他們猜測一個被設計專門用來搜索MD5沖突的機器(這台機器在1994年的制造成本大約是一百萬美元)可以平均每24天就找到一個沖突。但單從1991年到2001年這10年間,竟沒有出現替代MD5算法的MD6或被叫做其他什麼名字的新算法這一點,我們就可以看出這個瑕疵並沒有太多的影響MD5的安全性。上面所有這些都不足以成為MD5的在實際應用中的問題。並且,由於MD5算法的使用不需要支付任何版權費用的,所以在一般的情況下(非絕密應用領域。但即便是應用在絕密領域內,MD5也不失為一種非常優秀的中間技術),MD5怎麼都應該算得上是非常安全的了。