MD5碰撞你也能实现

By | 2010年2月11日

文章开头先说明:这个不是什么新闻了,大概是08年的事。最近突然看到一些言论,才又想起了这么一回事。拿出来做文章只是当做科普,因为好多人都还不了解这么一回事。那我就科普一回,给各位介绍一下。

如果你还不知道什么是MD5

MD5即Message-Digest Algorithm 5(资讯-摘要演算法 5),用于确保资讯传输完整一致。 是电脑广泛使用的杂凑演算法之一(又译摘要演算法 、哈希演算法),主流程式語言普遍已有MD5实做。是电脑广泛使用的杂凑演算法之一(又译摘要演算法 、哈希演算法),主流程式语言普遍已有MD5实作。

维基百科的解释:http://zh.wikipedia.org/wiki/MD5

百度百科的解释:http://baike.baidu.com/view/7636.htm

简而言之,设计MD5的初衷,就是使每一个文件有不同的MD5,用于辨别和鉴定。

如果你在网上下载文件有留意过,就会发现MD5的踪迹。不仅如此,MD5还被广泛的运用于加密和验证。比如我们的wordpress,在处理用户密码的时候也用到了MD5。不过过程更复杂一些。

如果你知道了,但是却不明白MD5有什么用

如果A与B要通过网络传送文件,那么A可以把文件的MD5计算以后告诉B,再传送文件。B收到文件以后,也计算一次MD5。如果计算结果与A告知的一致,那么文件在传输过程中没有被篡改。当然,更常用的办法是:A与B事先约定一个密码,然后把文件用密码加密。加密后A计算MD5并告知B,同时发送加密后的文件。这样就算MD5值在A发往B的途中被篡改,也不能达到中间人攻击的效果。

当然,MD5还有更广泛的用途。

如果你明白了以上的内容,那么

你应该明白,MD5的设计初衷是:对于两个不同的文件而言,MD5应该是不同的。

但是事事无绝对,虽然在数学上,MD5是不能反推的,但是却能够以其他方式达到相同的效果,比如碰撞。

什么是碰撞

所谓碰撞,就是已知一个文件或者数据,构造另一个与其MD5值一样的文件或数据。

MD5推出至今已经有不少年了,但却一直没有更新。早在07年,就有人提出了MD5碰撞的可能。而这种可能,到了08年变为了现实。

由于涉及隐秘性,所以大多数研究机构都并未放出其最新的研究成果。各国的MD5碰撞计划究竟如何,我们也便不得而知。

也或许因为MD5已经岌岌可危,所以专家们便失去了对他的研究兴趣?

 不久以前,已经有机构宣布成功的破解了数字证书的认证,能够对数字证书进行仿冒。而该组织也宣称,安全起见,所有实验数据均已销毁。仅保留了部分理论性的论文。

如果你对理论没有兴趣,下面是实践

工具点我下载                源代码点我下载

解开以后只有一个可执行程序,需要在命令行运行。

首先,reizhi创建了一个txt,内容如下:

然后打开命令行,运行碰撞程序

上面显示出来的一长串数字就是输入文件的MD5了。下面显示,仅仅用了15.859s就完成了碰撞。

生成了1_msg1.txt和1_msg2.txt两个文件。打开看看就知道了。

一样吗?一眼就看出来了,肯定不一样,而且不一样的地方还不少。

那再看看MD5

一样吗?当然是一样的,都说是MD5碰撞了。不过,MD5碰撞,CRC和SHA-1当然不会一样,这个我就不检验了。

各位有兴趣就自行下载检验好了。

结论

呵呵,看到这各位肯定不用我来下结论了。MD5已经不够安全了,如果仍然只使用MD5那么肯定是很危险的一件事情。

而报告也指出,SHA-1的安全性也不够,能够在可接受的时间内被碰撞。

这些,就让那些专业人士去争吧,我们了解一下也就够了。

不过现在主流的破解MD5方式还是用暴力破解法。即穷举。此种方法对于弱密码很有效,不过要是你的密码足够强壮,也就不怕了。

附上两个MD5加解密的网站

www.cmd5.com

www.xmd5.org

14 thoughts on “MD5碰撞你也能实现

  1. stone

    应证了一句话:没有永远的安全,也没有永远打不开的锁,更没有永远解不了的密

    Reply
  2. 歪歪

    [yangcongtou::face001.gif]你的网站的评论中,要是有个引用就好了。。免得我还得复制,粘贴。

    没有永远的安全,也没有永远打不开的锁,更没有永远解不了的密。。。这句话非常敬佩。

    Reply
    1. reizhi Post author

      @歪歪, [yangcongtou::face021.gif]不是嵌套就行了么,还引用
      真高级[yangcongtou::face019.gif]

      Reply

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

滑动到最右以进行验证 *