先來掃盲:
MD5將整個文件當作一個大文本信息,通過其不可逆的字符串變換算法,產生了這個唯一的MD5信息摘要。為了讓讀者朋友對MD5的應用有個直觀的認識,筆者以一個比方和一個實例來簡要描述一下其工作過程:
大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為公安機關鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、 格式、數量)產生一個同樣獨一無二的“數字指紋”,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”都會發生變化。
我們常常在某些軟件下載站點的某軟件信息中看到其MD5值,它的作用就在於我們可以在下載該軟件后,對下載回來的文件用專門的軟件(如 HashX 等)做一次MD5校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。利用MD5算法來進行文件校驗的方案被大量應用到軟件下載站、論壇數據庫、系 統文件安全等方面。
示范一下:
我們先下載 HashX 1.0.1.2(504KB)以及 世界之窗瀏覽器(The World) 2.2 Beta(556KB),文件都很小,方便大家測試。
之后如圖所示:
圖1 將要檢驗的文件拖放到程序窗口,並按 Hash File
圖2 得出檢驗結果,可按 Copy Output 進行復制
圖3 可將發布者提供的MD5進行對比,另外還可使用其它算法(如SHA-1)進行檢驗
大家可以盡管試一下:比如建立一個TXT文件,隨便打些什么進去。檢驗一遍MD5之后記錄下來。然后對TXT稍作改動,再檢驗一遍。就可以發現,原來只要稍微不同,出來的MD5就已經是完全不一樣的了。
這就是說,MD5校驗的作用在於:可以知道自己從網絡下載的文件,是否就是原發布者所提供的文件。很多人常抱怨使用迅雷下載的文件有問題,說到這里,相 信大家已經明白,那是文件來源不一樣了。以及有時候,發布者的網站可能被黑客入侵篡改,那么校驗一番MD5,就可以知道是否曾被惡意植入病毒或木馬了(如 果網站服務器被入侵,通常發布者也不知情的)。
但是!從今天起,上述一切,已變得不可靠了!
原因在於兩年前,王小雲教授發布的破解算法開始,后來已經發展至可進行所謂的“MD5攻擊”。
相關閱讀:如何面對最強算法MD5被破譯
老生常談:從王小雲教授成功破解MD5說起
下面要說的“MD5碰撞”,簡而言之就是:先得出一個字符串的MD5值,再根據這個值,逆算出另外一個不同的字符串——但是它們的MD5檢驗值是完全一致的!
或許你會覺得,不同的字符串可以得出相同的MD5,也不算什么了不起的事情吧。這只不過是世上萬千奇怪的數學題的一種而已。
但是!你可曾想過,有沒有可能,讓兩個程序文件的MD5一致,卻又都能正常運行,並且可以做完全不同的事情么?
答案是:還真的可以!
http://www.win.tue.nl/hashclash/SoftIntCodeSign/HelloWorld-colliding.exe
http://www.win.tue.nl/hashclash/SoftIntCodeSign/GoodbyeWorld-colliding.exe
這兩個程序會在屏幕上打印出不同的字符,但是它們的MD5都是一致的。
通讀其論文后摘要如下:
這幾位密碼學家使用的是“構造前綴碰撞法”(chosen-prefix collisions)來進行此次攻擊(是王小雲所使用的攻擊方法的改進版本)。
他們所使用的計算機是一台 Sony PS3,且僅用了不到兩天。
他們的結論:MD5 算法不應再被用於任何軟件完整性檢查或代碼簽名的用途。
另:現在,如果僅僅是想要生成 MD5 相同而內容不同的文件的話,在任何主流配置的電腦上用幾秒鍾就可以完成了。
這幾位密碼學家編寫的“快速 MD5 碰撞生成器”:
http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip
源代碼:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5_source.zip
思考題:
為什么微軟發布補丁程序的時候,所使用的校驗方法,不是MD5,而是SHA-1呢?
如何進行MD5校驗
大家有沒有注意到下載一些軟件,它的信息里標注有MD5碼?
MD5在軟件發布時經常使用,是為了保證文件的正確性,防止一些人盜用程序,加木馬或者篡改版權,設計的一套驗證系統。每個文件都可以用MD5驗證程序算出一個固定的MD5碼來。
個人認為MD5驗證是很有必要到,否則下載的軟件很可能被篡改過,運行出錯或具有一定的危險性。
方法/步驟
-
首先我們在網上找到一款帶MD5碼的軟件進行下載,記下它的MD5碼。
-
軟件下載好后,我們需要用一款MD5驗證工具進行校驗。
我使用的是“Hash 1.0.4”,這款軟件大家可以在360軟件管家里找到,當然大家也可以使用其他MD5校驗工具。
-
然后我們打開“Hash 1.0.4”,它的界面如下圖所示。
-
可以看出“Hash 1.0.4”是一款英文的軟件,但大家不必畏懼,因為它的操作方法很簡單,直接把下載的軟件(下圖中的‘GHO鏡像安裝器’)拖動到“Hash 1.0.4”的空白處就好了。
-
最后我們找到“Hash 1.0.4”測出的MD5碼與步驟1中的MD5碼進行對比,如果發現兩者相同,那么說明,下載的軟件未被篡改過,可以放心使用。
大家可以看到步驟4中的MD5碼和步驟1中的MD5是相同的(一個是大寫一個是小寫但字母相同),因此證明我下載的這款軟件未被修改過。