MD5真的已靠不住?同样校验,不同文件!

文章正文
发布时间:2024-07-19 08:22

  先来扫盲:

  MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:

  大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。

  我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如 HashX 等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

  示范一下:

  我们先下载 HashX 1.0.1.2 (504KB) 以及 世界之窗浏览器(The World) 2.2 Beta (556KB),文件都很小,方便大家测试。

  之后如图所示:

MD5检验

图1 将要检验的文件拖放到程序窗口,并按 Hash File

MD5检验

图2 得出检验结果,可按 Copy Output 进行复制

MD5检验

图3 可将发布者提供的MD5进行对比,另外还可使用其它算法(如SHA-1)进行检验

  大家可以尽管试一下:比如建立一个TXT文件,随便打些什么进去。检验一遍MD5之后记录下来。然后对TXT稍作改动,再检验一遍。就可以发现,原来只要稍微不同,出来的MD5就已经是完全不一样的了。

  这就是说,MD5校验的作用在于:可以知道自己从网络下载的文件,是否就是原发布者所提供的文件。很多人常抱怨使用迅雷下载的文件有问题,说到这里,相信大家已经明白,那是文件来源不一样了。以及有时候,发布者的网站可能被黑客入侵篡改,那么校验一番MD5,就可以知道是否曾被恶意植入病毒或木马了(如果网站服务器被入侵,通常发布者也不知情的)。

  但是!从今天起,上述一切,已变得不可靠了!

2

  原因在于两年前,王小云教授发布的破解算法开始,后来已经发展至可进行所谓的“MD5攻击”。

相关阅读:如何面对最强算法MD5被破译

老生常谈:从王小云教授成功破解MD5说起

  下面要说的“MD5碰撞”,简而言之就是:先得出一个字符串的MD5值,再根据这个值,逆算出另外一个不同的字符串——但是它们的MD5检验值是完全一致的!

  或许你会觉得,不同的字符串可以得出相同的MD5,也不算什么了不起的事情吧。这只不过是世上万千奇怪的数学题的一种而已。

  但是!你可曾想过,有没有可能,让两个程序文件的MD5一致,却又都能正常运行,并且可以做完全不同的事情么?

  答案是:还真的可以!

  

  

  这两个程序会在屏幕上打印出不同的字符,但是它们的MD5都是一致的。

  通读其论文后摘要如下:

  这几位密码学家使用的是“构造前缀碰撞法”(chosen-prefix collisions)来进行此次攻击(是王小云所使用的攻击方法的改进版本)。

  他们所使用的计算机是一台 Sony PS3,且仅用了不到两天。

  他们的结论:MD5 算法不应再被用于任何软件完整性检查或代码签名的用途。

  另:现在,如果仅仅是想要生成 MD5 相同而内容不同的文件的话,在任何主流配置的电脑上用几秒钟就可以完成了。

  这几位密码学家编写的“快速 MD5 碰撞生成器”:
  
  源代码:

  思考题:

  为什么微软发布补丁程序的时候,所使用的校验方法,不是MD5,而是SHA-1呢?

MSDN

(点击图片查看大图)