散列函数的应用及其安全性
作业题目:
散列函数的应用及其安全性。
内容要求:
(1) 给出散列函数的具体应用。
(2) 结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年
google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的
发展。问题2的回答可以参考下面给出的第一个链接。
(3)结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和
goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明
md5算法在验证软件完整性时可能出现的问题。
链接1:https://www.win.tue.nl/hashclash/
链接2:http://www.win.tue.nl/hashclash/SoftIntCodeSign/
(1) 给出散列函数的具体应用。
答:
1)文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据
篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能
防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完
整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命
令。
2)数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的
运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色
。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本
身进行数字签名是等效的。而且这样的协议还有其他的优点。
3)鉴权协议
如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但
不可被篡改的情况下,这是一种简单而安全的方法。
(2)散列函数的安全性以及目前散列函数的发展
散列函数的安全性
1)单向性(原像稳固性)
给定一个消息摘要y,很难找到符合h(x)=y的消息x。
2)第二原像稳固性
给定x,很难找到一个x’,满足h(x)=h(x’)。
3)碰撞稳固性
很难找到满足h(x)=h(x’)的二元组(x,x’)。
4)雪崩性
c=Hash(m),c的每一比特都与m的每一比特有关,并有高度敏感性
。即每改变m的一比特,都将对c产生明显影响。
散列函数的发展
1)目前,已经出现了SHA-3,但是还是采用的是SHA-2。之所以全世界没有迁
移到SHA-3,首要原因是世界上目前几乎没有任何软件或硬件支持该算法。
2)前量子计算算法的Grover算法和Shor算法已经可以破译当今广泛使用的密
码。Shor算法是一种量子计算机求解离散对数问题的算法,它能够攻破RSA、
DSA和ECDSA密码,Grover算法没有Shor算法有效,它的作用相当于把密码的秘
钥长度减少一半,密码技术人员可以通过加长秘钥长度来抵抗Grpver算法攻击
。
3)值得注意的是,国外的量子计算机发展迅速,已有像谷歌这样的著名公司
将量子计算机投入使用,用于提高信息搜索效率和研究量子人工智能。如今的
量子计算机还不足以通过执行Shor算法或Grover算法来大肆攻击现有密码。
4)MD5 和 SHA1 是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设
计的。MD4(RFC 1320)是 MIT 的Ronald L. Rivest在 1990 年设计的,MD
是 Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现--
它是基于 32位操作数的位操作来实现的。
(3)验证软件完整性时可能出现的问题
1)md5算法中的选择前缀碰撞
选择前缀冲突——前缀冲突只要求在碰撞后文件应该完全相等。在碰
撞之前,要找到碰撞的两个文件可以是任何东西:我们所选择的前缀碰撞查找
方法总是会产生一个冲突,该冲突可以被合并到两啥个文件中,而不管碰撞之前
存在什么数据。构造前缀碰撞法可制作两个内容不同但具有相同MD5验证码的
文件。例如所给出的两个可执行文件执行结果不同,但是其MD5相同。
2)md5算法来验证软件完整性时可能出现的问题
MD5是消息摘要,消息摘要是哈希算法的一种应用,而消息摘要算法
是一种碰撞要求极其严格的哈希算法。这些信息摘要算法通常散列都十分均匀
,且不容易产生哈希碰撞。由此,我们可以用MD5的压缩来作为软件的完整性
验证。但是,在使用MD5算法来验证完整性时,由于MD5算法是公开的,所有人
都可以获得和使用MD5算法,那就意味着别人可以利用相同的算法针对你的加
密值不断地进行计算。如果不对MD5算法进行一些处理,那么当我们将自己的
重要接口暴露在互联网上的时候,比如登陆接口,攻击者就可以同样利用MD5
加密算法对我们进行撞库攻击和关键信息比对。