MD5碰撞原理简单介绍及其实现

MD5碰撞原理简单介绍及其实现

MD5是什么

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16[字节]的散列值(hash value)),用于确保信息传输完整一致。MD5由美国密码学家[罗纳德·李维斯特](Ronald Linn Rivest)设计,于1992年公开,用以取代[MD4]算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如[SHA-2]。2004年,证实MD5算法无法防止碰撞,因此不适用于安全性认证,如[SSL]公开密钥认证或是[数字签名]等用途。

MD5的原理

直接看百度上的图就一目了然了
MD5碰撞原理简单介绍及其实现

MD5的“破解”

2004年,我国中科院院士王小云证实md5算法无法防止碰撞,因此,不适用于安全性认证。在2005年,王小云院士提出了md5哈希碰撞,公式如下

f(f(s, M), M') = f(f(s, N), N')

所谓的“破解”其实用“碰撞”一词语更为妥当,因为她的研究成果表明了给定消息 M1,能够计算获取 M2,使得 M2 产生的散列值与 M1 产生的散列值相同,即:

MD5(M1)=MD5(M2)

于是乎MD5不满足抗碰撞性,于是不再是安全的散列算法
但是
直到现在,给出一个MD5散列值,然后通过计算还原出原文来是不可能的的。也就是说通过一个MD5后的密文,回推明文目前还是没有方法的。
这里给出相关论文:http://www.paper.edu.cn/scholar/paper/wangxiaoyun-2

碰撞实现

这里介绍一个MD5碰撞的工具:fastcoll,fastcoll 可以用来对给定的前缀快速生成md5碰撞 (也就是说,生成两个不同的文件,每个文件都是在给定的内容后面附加一段东西生成的)
给出其主页:https://www.win.tue.nl/hash*/
相关文章:https://homepages.cwi.nl/~stevens/papers/eprint-2006-104-S.pdf

下面给出示例,我们创建一个文本文档在里面写入123456789
MD5碰撞原理简单介绍及其实现
将其拖入fastcoll后得到两个文件
MD5碰撞原理简单介绍及其实现
MD5碰撞原理简单介绍及其实现
经过检验可以发现,第一个文档和第二个文档字符串不同,但最终MD5值相同MD5碰撞原理简单介绍及其实现
MD5碰撞原理简单介绍及其实现

其他

之前打比赛的时候学习过一点技巧,可以通过python来爆破md5中的几位,下面给出一份示例python代码

1.  import hashlib
2.  for i in range(0,9999999999999999):
3.  md5=hashlib.md5(str(i).encode("utf-8")).hexdigest()
4.  if md5[0:5]=="66666": #md5后前五位是66666
5.  print(i)
6.  print("no result")

该脚本实现了纯数字通过MD5加密后相应位数是特定字符的功能

最后

thanks for reading

上一篇:人人都要学的项目管理课网盘下载


下一篇:使用wireshark提取rtp视频流中的h264裸流