一、给出散列函数的具体应用
(1)错误校正
使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做冗余效验。
(2)语音识别
从一个已知列表中匹配一个MP3文件可以使用传统的散列函数——例如MD5,但是这种方案会对时间平移、CD读取错误、不同的音频压缩算法或者音量调整的实现机制等情况非常敏感。
(3)信息安全领域(三个方面)
1)文件效验
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,此算法具有抗数据篡改的能力
2)数字签名
由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名。
3) 鉴权协议
挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。
二、结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。
(1)简述生日攻击
利用“两个集合相交”问题的原理生成散列函数碰撞,达到目的的攻击称为生日攻击,也称为平方根攻击。
(2)MD5和SHA-1的破解
2005年美国密码会议上,王小云教授给出了计算MD5等散列算法的碰撞的方法,该方法可以很快的找到MD5的“碰撞”,就是两个文件可以产生相同的“指纹”。 2017年2月23日,谷歌在blog上宣布实现了SHA-1的碰撞。
(3)对于散列函数攻击的方式
1)穷举攻击(又称暴力攻击)
暴力攻击的强度完全依赖于算法生成的散列码长度。可以对任何类型的散列函数进行攻击,典型代表是“生日攻击”。下面贴出了了生日悖论的描述。
2)密码分析法
依赖于对散列函数的结构和代数性质分析,采用针对散列函数弱性质的方法进行攻击。这类攻击方法有中间相遇攻击、差分分析等。
(4)安全散列函数的发展
目前使用最多的哈希函数有MD(Message-Digest Algorithm)系列(MD4、MD5、HAVAL、RIPEMD)和SHA系列(SHA-1、SHA-256)
1)MD4
1990年Ronald L. Rivest设计,通过3圈的操作将任意长度的消息变换成128位的哈希值。MD4算法的前两圈已被Dobbertin等人攻破,证明MD4算法是不安全的,但整个算法并没有被攻破过。
2)MD5
MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,经过一系列处理之后,其输出是4个32位字的级联,与 MD4 相同。MD5算法被王小云证明是可攻破的,因此也已经不安全了。
3)HAVAL
HAVAL是MD5的改进版本,其轮数可以是3、4或5(每轮16步),输出长度分别为128、160、192或224位。HAVAL用高非线性的7-变量函数取代了MD5的简单非线性函数。
4)SHA1
SHA由美国国家标准技术研究所NIST开发,与1993年发表,SHA-1是基于MD4设计的。输入最大长度为2^64位的数据,输出160位的消息摘要,同样以512位数据块进行处理。
5)SHA-256
输出由SHA-1的160位扩大到256位,迭代次数由SHA-1的80次增加到128次
6)SHA-384
输出扩大到384位,迭代次数增加到192次
7)SHA-512
输出扩大到512位,迭代次数增加到256次
|
输入位数 |
输出位数 |
迭代次数 |
分组长度 |
找到碰撞 |
|
MD4 |
无限 |
128bit |
48 |
512bit |
是 |
|
MD5 |
无限 |
128bit |
64 |
512bit |
是 |
|
SHA-1 |
264-1 |
160bit |
80 |
512bit |
理论260 |
|
SHA-2 |
SHA-256 |
264-1 |
256bit |
64 |
512bit |
否 |
SHA-384 |
2128-1 |
384bit |
80 |
1024bit |
否 |
|
SHA-512 |
2128-1 |
512bit |
80 |
1024bit |
否 |
|
SHA-3 |
224/256/384/512 |
24 |
否 |
三、结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法在验证软件完整性时可能出现的问题。
(1)运行两个可执行文件helloworld.exe和goodbyworld.exe
(2)比较两个可行性文件的md5消息摘要值
安装MD5效验工具
经比较,这两个可执行文件md5消息摘要值相同,但两个程序会在屏幕上打印出不同的字符,这是用 “构造前缀碰撞法”(chosen-prefix collisions)来进行此次攻击的(是王小云所使用的攻击方法的改进版本)。其结论是MD5 算法不应再被用于任何软件完整性检查或代码签名的用途。
(3)可能出现的问题
攻击者可能会伪造一个与双方沟通文件MD5值完全相同的文件,文件完整性无法被保障和文件签名的目的也无法达到。