MD5 作为一个主要的Hash函数一直被广泛使用,而MD5的安全问题也一直被诟病。 而黑客圈里也开始流行利用MD5的漏洞来伪造Windows Update。 最近安全研究人员Nat McHugh在他的博客中展示了MD5存在的安全问题。
Nat McHugh展示里两张不同的摇滚歌星的图片, 这两张图片尽管分别是不同的人, 但是却有相同的MD5值。 Nat McHugh写道:“这两张图片的原始图片是我从Internet上找到的。 而实际上给我任何的数据, 我都能够找到一个相同的MD5’碰撞(编者注:就是两个不同的文件具有相同的MD5值)’”. 而通过NatMcHugh那样采用填充数据的方式寻找MD5碰撞在主流的云计算平台比如Amazon的云平台上只需要几个小时, 大约耗费的成本不足1美元。
于此相比, 如果采用暴力破解的方式寻找MD5碰撞目前来说如果不采用超级计算机的话依然是不现实的。 而McHugh采用的方法则是分别在两个文件的后面填充一些特定的数据从而使得修改后的文件具有相同的MD5。这种攻击方式被称为可选前缀碰撞(Chosen Prefix Collision)。 而针对MD5的可选前缀碰撞攻击最早在2007年就已经出现了。
在可选前缀碰撞攻击中, 一些特别的用于碰撞的数据被添加的文件的尾端, 而这些数据之前的数据可以完全不同。 在博客中 Nat McHugh写道:“可选前缀碰撞攻击时通过不断地添加接近碰撞的数据块从而慢慢地把MD5内部状态的不同之处慢慢减小直到两个MD5值变得相同。 在此之前,两个文件的长度必须一致,而文件比特的不同必须是一种特定的形式。 然后可以通过”生日“攻击方式实验不同的随机数值直到找到碰撞。 这一方式大大降低了碰撞攻击的复杂度。”
而另一位安全研究学者Marc Stevens则写了一个利用可选前缀碰撞的自动化框架。 有兴趣的读者可以参考https://code.google.com/p/hashclash/。 Nat McHugh就是利用这个框架来进行的。 他利用Marc Stevens的工具, 用Linux命令行进行自动操作。 在Amazon云平台利用GPU进行计算,大约花了10个小时,总共花费了约0.65美元。
MD5的安全碰撞弱点最早是由山东大学的王小云教授在2005年提出的。 此后经过不同的安全专家的研究, 发展出了不同的算法。 不过, 这些碰撞攻击的方法的缺陷就是找到的碰撞可能是无意义的数据。 而可选前缀碰撞的一个优点就是可以使得找到一个有意义的碰撞。 这一使得黑客就有可能利用这样的攻击来伪造基于MD5的数字证书。 事实上, 在2012年发现的美国用来攻击伊朗等国工控系统的“火焰“病毒, 就是利用了针对MD5的可选后缀碰撞攻击, 伪造了微软的数字证书, 以Windows Update的方式入侵系统的。