MD5校验并不陌生,它常常被用于文件的一致性校验,在各大下载站都可以看到它的身影。MD5可以为任何文件产生一个同样独一无二的“数字指纹”,如果对文件做了任何改动,哪怕仅仅修改了1字节,其MD5值都会发生变化。正是因此,利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。

突然产生这样一个想法:不同文件也可以有相同的MD5校验值。

MD5校验值的长度是固定的128Bit,其总共有2的128次方种不同的值;而被MD5校验的文件长度却是任意的:可以是1Bit、1KB甚至1GB,也就是说可以有正无穷个不同的文件。用这有限的2的128次方种不同的值去匹配正无穷个文件,结果是必然有重复的。同一个MD5值有多少不同的文件呢?答案一定是正无穷个

相同MD5校验值的文件可以有正无穷个?这有点不可思议了

那岂不是说,我们从某网站下载了一个文件,经检测下载的文件的MD5校验值与网站上提供的一致。即使这样,我们仍然不能保证这个文件就是网站上提供的那个文件,因为还有正无穷个MD5完全一样的文件,或许我们下载到的是另一个文件,只不过其MD5与网站上那个文件一致罢了。

想到这里我有点邪恶了,下载到不同的文件,MD5校验值却相同?

这意味着什么?有没有可能出现这么一种情况:网站上提供的是某杀毒软件下载,而实际下载的却是一个病毒,偏偏他们的MD5校验值是相同的?如果存在这种情况,即使我们检测过MD5的一致性,也难免要中招了。

据说某数字卫士安全软件是通过MD5来判断病毒的,如果真是这样的话某数字安全卫士岂不是要把病毒当作安全软件?

想的很邪恶,那会不会有两个可执行文件,MD5值相同,执行结果却完全不同呢?

亲手制造两个MD5完全相同,但执行结果完全不同的可执行文件

从统计概率上来说,这种情况(存在MD5相同功能不同的两个可执行文件)是一定存在的。但我始终坚信:这只是概率上存在,若要人为做出这么两个可执行文件是不可能的,直到今天,我亲自打破了它。

现在我的C盘中已经有了这么两个文件,分别为1.exe和2.exe,它们的MD5是一样的:6E763063AAE609957DBEF281CAC6EEE4。

SameMD5

这不是简单的文件复制,它们真的是不同的两个文件,只是MD5相同罢了。他们运行的结果是完全不同的:放上两张图片展示其不同的运行结果

SameMD5-1

(这是1.exe)

SameMD5-2

(这是2.exe)

或许,也许,可能还是有点无法接受?但这确实是真实存在的。下面提供这两个文件,实在无法接受可以下载之后自行对比MD5以及运行测试

下载地址:百度网盘(提取码:tewt)

一个小发现,百度云盘(网盘)是通过MD5来判断文件是否相同的:

安装百度云上传插件后,如果上传的文件与百度云已有文件重复,可以“极速秒传”。但百度云是如何判断两个文件重复呢?既然制造出MD5相同的两个不同文件,那不妨上传试一下。先安装好百度云上传插件之后,上传1.exe,然后上传2.exe。正如猜测的那样,上传2.exe时提示“极速秒传”。百度认为2.exe与1.exe是两个一样的文件,这说明百度云的判断标准是MD5校验。

BaiduYunMD5

不该再用MD5作为文件检查的方式了,至少不应该是唯一方式

既然可以人为的做出具有相同MD5校验值的不同程序,那用MD5校验作为文件检查的方式自然不那么可靠了。就像本文开头幻想的那样,下载的病毒程序与安全网站提供的MD5完全相同。

标签: Windows

已有 85 条评论

  1. 支持 支持 呵呵

  2. 过来学习下技术哈!

    1. FROYO

      欢迎来访~~~

  3. 从来不检查MD5值的飘过~~~~

    1. FROYO

      话说现在没多少人检测MD5了,MD5要成摆设啊

  4. 不应该是这个样子,MD5应该是独有的。

    1. sxgkwei

      。。。。MD5都能独有。,我去。

    2. FROYO

      必然不是独有的,MD5是有限的,文件是无限的

  5. MD5确实是个神奇的编码

    1. FROYO

      MD5正在被破解

  6. 确实是有这个可能,不过只要不刻意为之,这个校验方式还是问题不大。

  7. 这种情况不让我意外 ,我意外的是你是怎么做出两个MD5校验值相同的文件的?这个超级关键啊~~~

    1. FROYO

      用那个碰撞器fastcoll产生的

      1. 碰撞器?我得网上找找去,这东西就是暴力破解器啊!!

        1. FROYO

          破解不了,只能生成md5相同的两个文件

  8. 原来如此,06年就已经有公开的fastcoll碰撞生成器了

    1. FROYO

      对对,就是这个东西

  9. 另外你这两个文件是怎么生成的,根据之前nature论文上爆出的那个序列串?

  10. 不同时见证md5和SHA1的hash么

    1. FROYO

      SHA1是不同的

评论已关闭