MD5 作為一個主要的Hash函數(shù)一直被廣泛使用,而MD5的安全問題也一直被詬病。 而黑客圈里也開始流行利用MD5的漏洞來偽造Windows Update。 最近安全研究人員Nat McHugh在他的博客中展示了MD5存在的安全問題。
Nat McHugh展示里兩張不同的搖滾歌星的圖片, 這兩張圖片盡管分別是不同的人, 但是卻有相同的MD5值。 Nat McHugh寫道:“這兩張圖片的原始圖片是我從Internet上找到的。 而實(shí)際上給我任何的數(shù)據(jù), 我都能夠找到一個相同的MD5’碰撞(編者注:就是兩個不同的文件具有相同的MD5值)’”. 而通過NatMcHugh那樣采用填充數(shù)據(jù)的方式尋找MD5碰撞在主流的云計(jì)算平臺比如Amazon的云平臺上只需要幾個小時, 大約耗費(fèi)的成本不足1美元。
于此相比, 如果采用暴力破解的方式尋找MD5碰撞目前來說如果不采用超級計(jì)算機(jī)的話依然是不現(xiàn)實(shí)的。 而McHugh采用的方法則是分別在兩個文件的后面填充一些特定的數(shù)據(jù)從而使得修改后的文件具有相同的MD5。這種攻擊方式被稱為可選前綴碰撞(Chosen Prefix Collision)。 而針對MD5的可選前綴碰撞攻擊最早在2007年就已經(jīng)出現(xiàn)了。
在可選前綴碰撞攻擊中, 一些特別的用于碰撞的數(shù)據(jù)被添加的文件的尾端, 而這些數(shù)據(jù)之前的數(shù)據(jù)可以完全不同。 在博客中 Nat McHugh寫道:“可選前綴碰撞攻擊時通過不斷地添加接近碰撞的數(shù)據(jù)塊從而慢慢地把MD5內(nèi)部狀態(tài)的不同之處慢慢減小直到兩個MD5值變得相同。 在此之前,兩個文件的長度必須一致,而文件比特的不同必須是一種特定的形式。 然后可以通過”生日“攻擊方式實(shí)驗(yàn)不同的隨機(jī)數(shù)值直到找到碰撞。 這一方式大大降低了碰撞攻擊的復(fù)雜度。”
而另一位安全研究學(xué)者M(jìn)arc Stevens則寫了一個利用可選前綴碰撞的自動化框架。 有興趣的讀者可以參考https://code.google.com/p/hashclash/。 Nat McHugh就是利用這個框架來進(jìn)行的。 他利用Marc Stevens的工具, 用Linux命令行進(jìn)行自動操作。 在Amazon云平臺利用GPU進(jìn)行計(jì)算,大約花了10個小時,總共花費(fèi)了約0.65美元。
MD5的安全碰撞弱點(diǎn)最早是由山東大學(xué)的王小云教授在2005年提出的。 此后經(jīng)過不同的安全專家的研究, 發(fā)展出了不同的算法。 不過, 這些碰撞攻擊的方法的缺陷就是找到的碰撞可能是無意義的數(shù)據(jù)。 而可選前綴碰撞的一個優(yōu)點(diǎn)就是可以使得找到一個有意義的碰撞。 這一使得黑客就有可能利用這樣的攻擊來偽造基于MD5的數(shù)字證書。 事實(shí)上, 在2012年發(fā)現(xiàn)的美國用來攻擊伊朗等國工控系統(tǒng)的“火焰“病毒, 就是利用了針對MD5的可選后綴碰撞攻擊, 偽造了微軟的數(shù)字證書, 以Windows Update的方式入侵系統(tǒng)的。