md5碰撞介绍及工具,并对百度网盘进行碰撞
前言
本文介绍md5碰撞及其工具,并对百度网盘进行md5碰撞攻击实验。熟悉者可直接跳过下面的介绍到差分攻击和构造前缀碰撞法
什么是MD5
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,对于任意的输入,可以产生出一个128位(16字节)的散列值(hash value),通过对比这个散列值确保信息完整一致。
Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。MD5就是一种散列函数,它不能称作加密算法,也不是压缩算法,因为不能够通过MD5值得到原来的输入。
MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。打个比方: 每个人的的指纹独一无二,这是公安机关鉴别罪犯身份的方法之一;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。
我们常常在某些下载站点的信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用某些软件计算出其MD5值,与给定的MD5值比较是否相等,以确保我们获得的文件与该站点提供的文件为同一文件。
另外,在百度网盘里,也用到了md5,它的“秒传”就是通过md5来实现的。在上传大文件前计算md5值,通过判断数据库中是否已经存在一个文件和要上传的文件有相同的md5值,来判断数据库中是否已经保存了这个大文件。如果已经保存则直接添加一个链接即可,不用再上传文件。Onedrive则是直接上传,不判断(应该是这样)。
MD5算法的特点:
- 输入任意长度的信息,经过摘要处理,输出为128位的信息。(数字指纹)
- 不同输入产生不同的结果,(绝大部分情况下,如果不同的输入能产生相同的结果就是“碰撞”)
- 根据128位的输出结果不可能反推出输入的信息(不可逆)
MD5算法作用:
- 防止数据被篡改(比如传输一个文件,并传输它的md5值,接收方可以对收到的文件进行md5计算后比较和发送过来的md5值是否一样,不一样说明不是同一个文件)
- 防止直接显示明文。(比如用在数据库存储密码,只需比较输入密码的md5值和数据库里的md5值是否相同,而不用传输明文;但数据库即使采用md5存储密码也是有可能出现安全漏洞的,比如计算常用密码的md5值,然后比较数据库中是否有同样的项)
- 数字签名(因为难以由md5值得到原来的值,所以可以通过给出原来的值证明我确实是我)
MD5算法的原理可简要的叙述为:MD5码以512位分组