a.MD5和SHA-1算法的核心是哈希函数。密码学哈希函数(Cryptography Hash Function,简称为哈希函数)又称杂凑函数,是在信息安全领域有广 泛和重要应用的密码算法,主要作用是数据完整性验证和消息认证。它有一种类似于指纹的应用,所以有时候我们也把它叫做“数字指纹”。因为它 具有以下特性:原始信息只要改变一点点,哪怕是几比特,对应的消息摘要也会改变很大。
b.2004年8月17日在美国加州圣巴巴拉举行了一次国际密码学学术年会(Crypto’2004),当晚来自中国山东大学的王小云教授做了关于破译 MD5、 HAVAL-128、 MD4和RIPEMD算法的报告。
c.SHA-1已经被公众密码社群做了非常严密的检验而还没发现到有不安全的地方,它在一段时间被认为是安全的,直到2017.02.23,Google宣布攻 破SHA-1。
结果显示是目前还不受Google发现的这个碰撞攻击方法影响。SHA-1发布于1993年,至今已经24年,计算机系技术这二十年是日新月异,二十多年已经很了不起了,加密算法都不得不在计算效率与破解难度之间权衡。一般来说十年左右更新一代,继任者sha-2发布于2001年,sha-3发布于2015年。实际的影响应该很有限。对于中国网站来说连https都没部署,大部分还是明文保存密码的,即使一些比较尊重客户的网站,也仅仅使用了早已经被公开碰撞方法的MD5加密方法而已。Google,facebook,微软,苹果等早已经换成了暂时安全的sha-256,sha-512等算法,属于sha-2系列,也已经发布快十五年了。应该很快就可以看到国际主流的网站更换sha-3算法了。
B.关于生日攻击
生日攻击是利用概率论中的生日问题,找到冲突的Hash值,伪造报文,使身份验证算法失效。
防范方法:
a.使用安全的Hash算法:安全的Hash算法生成的Hash值有足够多的位数。这样,攻击者在寻找两个具有相同Hash值的文件时就会非常困难。
b.加盐:在为文件签名之前,先向文件添加一个随机值,然后计算Hash值,再将文件、签名和随机值一起发送给接收者。这样,攻击者必须找出具 有特定Hash值的伪造文件,这非常困难。
c.改动文件:在为文件签名之前,对消息或文件做少许改动。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。
C.散列函数的安全性
a.通过对于生日攻击的了解,散列函数的安全性是有待提高的。生日攻击并没有利用任何HASH函数的性质,是对任何HASH都适用的普适的攻击 方法,应对方法也很简单,增加HASH的长度,但是很难完成。
b.以为相对于安全的MD5和SHA-1算法,在相继公布被实现碰撞之后,可以预见,之后的算法发现碰撞只是实现计算机更好性能的 时间长短而 已。
举个例子:中国铁道部的12306使用SHA-1算法,上传Google的验证网站散列函数的安全性
结果显示是目前还不受Google发现的这个碰撞攻击方法影响。SHA-1发布于1993年,至今已经24年,计算机系技术这二十年是日新月异,二十多年已经很了不起了,加密算法都不得不在计算效率与破解难度之间权衡。一般来说十年左右更新一代,继任者sha-2发布于2001年,sha-3发布于2015年。实际的影响应该很有限。对于中国网站来说连https都没部署,大部分还是明文保存密码的,即使一些比较尊重客户的网站,也仅仅使用了早已经被公开碰撞方法的MD5加密方法而已。Google,facebook,微软,苹果等早已经换成了暂时安全的sha-256,sha-512等算法,属于sha-2系列,也已经发布快十五年了。应该很快就可以看到国际主流的网站更换sha-3算法了。
2.安全散列函数的发展
A.MD4
1990年Ronald L. Rivest设计,通过三圈的操作将任意长度的消息变换成128位的哈希值。
B.MD5
Rivest于1991年对MD4的改进版本。运用了四轮变换,并且每轮加上前一轮的结果。
C.HAVAL
为MD5的改进版本。轮数可以为3、4或5,输出长度分别为128、160、192或224位。
D.SHA-1
由NIST开发,1993年发表。输入最大长度为2^64位的数据,输出160位的消息摘要。
E.SHA-256
输出由160位扩大到256位,迭代次数由80次增加到128次。
F.SHA-384
输出扩大到384位,迭代次数增加到192次。
H.SHA-512
输出扩大到512位,迭代次数增加到256次。