散列函数的应用和安全性
① 密码学哈希函数被广泛应用于各种不同的的安全应用和网络协议中。
1) 文件校验
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2) 数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
3) 鉴权协议
挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。
② 结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以结合下面给出的第一个链接。
1) 生日攻击
生日攻击是利用概率论中的生日问题,找到冲突的Hash值,伪造报文,使身份验证算法失效。
2) MD5和SHA-1算法
MD5和SHA-1算法的核心是哈希函数。密码学哈希函数(Cryptography Hash Function,简称为哈希函数)又称杂凑函数,是在信息安全领域有广泛和重要应用的密码算法,主要作用是数据完整性验证和消息认证。它有一种类似于指纹的应用,所以有时候我们也把它叫做“数字指纹”。
关于两个函数加密的安全性解说
1.都是“不可逆”的函数。不存在一个算法能够由哈希值倒算出原始信息。
2.对原始信息的任何一点改变都会导致结果的哈希值巨大的不同。举个例子,假如原始数据是几百万字的文章,你在其中哪怕改动一个标点,计算出的哈希值都会有很大的变化。
3.运算代价是相对较低的。普通的AMDOpteron 2.2GHz的芯片,每秒可以计算出335MB数据的MD5值,可以计算192MB数据的SHA-1值。 参见https://en.wikipedia.org/wiki/SHA-1#Comparison_of_SHA_functions。
类似于1,除非通过蛮力的穷举法,否则无法找到两段不同的信息而有相同的哈希值。
2004年8月17日在美国加州圣巴巴拉举行了一次国际密码学学术年会(Crypto’2004),当晚来自中国山东大学的王小云教授做了关于破译 MD5、HAVAL-128、 MD4和RIPEMD算法的报告。
SHA-1已经被公众密码社群做了非常严密的检验而还没发现到有不安全的地方,它在一段时间被认为是安全的,直到2017.02.23,Google宣布攻破SHA-1。
3) 散列函数安全性
有两种方法可以攻击安全散列函数:密码分析法和暴力攻击法。散列函数抵抗暴力攻击的强度完全依赖于算法生成的散列码长度。Van Oorschot和Wiener曾经提出,花费1000万美元涉及一个被专门用来搜索MD5算法碰撞的机器,则平均24天内就可以找到一个碰撞。
伴随安全散列函数的发展,安全散列长度越来越长,因此我们可以使用有限定义域上的散列函数(俗称压缩函数)通过迭代方式拓展为具有无限定义域的散列函数。而最为代表性的就Merkle-Damgard结构。这个结构的好处是,如果压缩函数是抗碰撞的,那经过此结构处理后的散列函数也是抗碰撞的。SM3,HMAC就是基于这种结构,因为Merkle-Damgard结构并不能抵抗扩展攻击,因此HMAC引入了Key。
4) 常用的散列函数
1.MD4算法 1990年,MD4算法的前两圈已被Dobbertin等人攻破,证明MD4算法是不安全的,但整个算法并没有被攻破过。
2.MD5算法 2004年,王晓云教授做了关于破译 MD5、HAVAL-128、 MD4和RIPEMD算法的报告。
3.SHA-1 2017年,GOOGLE宣布实现了碰撞。
4.HAVAL 是MD5算法的改进版,HAVAL用高非线性的7-变量函数取代了MD5的简单非线性函数。
5.SHA-256 输出由SHA-1的160位扩大到256位,迭代次数由SHA-1的80次增加到128次。
6.SHA- 384 输出扩大到384位,迭代次数增加到192次。
7.SHA-512 输出扩大到512位,迭代次数增加到256次。
尽管有不建议被使用的算法,也不代表这就是完全过时的,事实上,就是因为有就得算法被发现问题,才会不断和更新新的算法,现有的优秀的算法都是在旧的算法的基础上改动的。
散列函数目前还是使用最为广泛的加密算法,尽管会出现安全性的问题,在找到新的更为有效的算法之前,应该会持续发展,更新算法并且网站也开始随之更新。但是旧的算法尽管使用的人数更少了,也依旧会有可能被继续发现安全性能的缺失。
③.结合MD5中的选择前缀碰撞及链接中的helloworld.exe和goodbyworld.exe两个可执行文件的MD5消息摘要值和两个文件的执行结果说明MD5算法来验证软件完整性时可能出现的问题。
1)MD5算法:它的全称是message-digest algorithm 5(信息-摘要算法),经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。
2)MD5算法的选择前缀碰撞:如果两个文件存在任何碰撞(冲突)的地方,发生前缀碰撞后,这两个文件完全相同,即得到相同的MD5。第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的MD5消息摘要值相同,即文件内容不同,但是MD5相同,这说明MD5算法存在着不安全性。正如第二问中谈到,利用王晓云教授的方法,MD5算法已经被彻底攻破。
3)MD5算法来验证软件完整性时可能出现的问题:
<1>无法保证文件的来源可靠性,即不能确认接收方接收到的文件与发送方的发出文件一致;
<2>无法保证文件的完整性和正确性,即文件可能被篡改或损坏;
<3>当验证效率较低时,会出现验证时间过长,给中间攻击者的攻击行为提供足够的攻击时间而增加安全风险。