2016012016 杨帆 散列函数的应用及其安全性
作业题目:散列函数的应用及其安全性
一.给出散列函数的具体应用。
1)文件校验
我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2)数字签名
Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
3)鉴权协议
如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。
还有一些其他应用例如:
用于产生单向口令文件,这是大多数操作系统都在使用的口令机制;还能用作入侵检测和病毒检测。能够用于构建随机函数(PRF)或用作伪随机数发生器(PRNG);基于Hash函数的PRF可用于对称密码中的秘钥产生。
二.结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以结合下面给出的第一个链接。
链接1:https://www.win.tue.nl/hashclash/
链接2:http://www.win.tue.nl/hashclash/SoftIntCodeSign/
MD5 和SHA-1 是单项散列函数的典型代表,它们广泛地应用在信息安全和数字签名等各个领域,所以在一定程度上可以体现散列函数的发展。关于散列函数的安全性以及目前安全散列函数的发展:
2004、2005年王晓云教授有关MD5的“解密”提出了一个碰撞法,这个方法利用了MD5和SHA-1的一个“漏洞” --生日攻击原理:
- 我们都知道生日攻击是以概率论中的生日问题为数据基础的一种密码学攻击方法:
- 而根据生日悖论,如果哈希值的位数过短,很容易可以找到一组(两个)哈希值相同的输入,这就是一种最常用的生日攻击的应用。
1.生日攻击
也就是说:根据MD5和SHA1这种Hash算法的特点,因为他们是任意长度的字符串变成固定长度的摘要信息。
那么这里就有可能发生一个问题,就是不同的字符串在理论上是有可能产生相同的摘要信息。
2.王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性
王教授所谓的碰撞法,碰撞的就是不同的字符串所产生的摘要信息是一样的那些字符串。碰撞就是体现在这里。
根据SHA1和MD5等Hash算法,在设计时候,设计这个算法的人认为不同的字符串要产生相同结果的摘要信息的可能性几乎为零。而王教授则证明了SHA1和MD5等Hash算法产生的摘要信息规则是可以在比较短时间内被破解的。这样一来,原始数据的 Integrity 就被打破了。 所谓的破解,也就是体现在这里。
王小云的主要工作是给出了MD5,SHA-0的碰撞,以及SHA-1的理论破解,她证明了160位SHA-1,只需要大约2^69次计算就能找出来,而理论值是2^80次。她的寻找MD5碰撞的方法是极端高效的。传说王小云当时在会议上把碰撞写出来,结果被下面的人验证发现不对,原来她把MD5算法的一个步骤弄错了。但是她立马联系她的当时留在中国的学生,修正算法,并找到一个新的碰撞。这一个是对的。
例如:
- A给B写了个Email叫做Hello,然后通过王教授的碰撞法,可能得到HAHAHA这个字符串的摘要信息和Hello这个这个字符串产生的摘要信息是一样的。
- 因此,在前面的这个例子中。如果B收到的Email内容为HAHAHA,B也将认为是A发来的Email,并且没有被修改过!
MD5和SHA-1:
由于MD5 与SHA-1均是从MD4 发展而来,它们的结构和强度等特性有很多相似之处,SHA-1与MD5 的最大区别在于其摘要比MD5 摘要长 32 比特。对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度:MD5 是2128 数量级的操作,SHA-1 是2160 数量级的操作。产生具有相同摘要的两个报文的难度:MD5是 264 是数量级的操作,SHA-1 是280 数量级的操作。因而,SHA-1 对强行攻击的强度更大。
在2005年,密码学家证明SHA-1的破解速度比预期提高了2000倍。但是破解仍然是极其困难和昂贵的。在2017年2月23号,Google 宣布实现了 SHA-1 碰撞。但是随着计算机变得越来越快和越来越廉价,在互联网上停止使用SHA-1算法只是时间的问题。2017年2月23日,谷歌在blog上宣布实现了SHA-1的碰撞(https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html ),将会在90天内公开算法。之前实现暴力破解需要12,000,000个gpu算一年,现在需要110个GPU算一年,破解效率大为提高。
所以着眼于未来,安全从业者比以往更为迫切地需要转而使用更加安全的加密散列算法,例如SHA-256与SHA-3。
三.结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题。
本次作业为扩展有关散列函数安全性的知识扩展。
链接1:https://www.win.tue.nl/hashclash/
链接2:http://www.win.tue.nl/hashclash/SoftIntCodeSign/
查阅了一些相关资料,发现如今MD5面临的除了选择前缀碰撞算法,还有新型碰撞手法等等:
(一)软件安全方面的MD5隐患:
自从王小云破解MD5算法后,国内外对MD5碰撞的相关研究与恶意利用从未停止。就软件安全方面来说,陆续发现了一批利用MD5碰撞对抗安全软件的恶意样本。这些样本中,大部分采用早期的一种较为成熟的快速MD5碰撞利用方式,然而有一部分比较特殊,因其采用了新型的碰撞方式。
新型碰撞手法的大批量样本是由同一团伙制做,下图是该碰撞作者近两年对抗手法的演化的过程:
(二)前缀构造法:
早期的碰撞样本,主要采用“前缀构造法”,以同一个给定的前缀程序A为基础,在尾部添加不同的附加数据,得到两个具有相同MD5的样本B和C,如下图所示:
前缀构造法碰撞后的两个样本只有尾部少量字节不同,而程序代码是相同的。通过判断尾部数据的差异,两个样本可以执行不同的程序流程。由于这种碰撞手法是通过同一前缀程序碰撞生成的两个样本,如果其中有恶意代码流程则两个样本均包含恶意代码,所以比较容易被安全软件识别,隐蔽性较差。
(三)新型MD5碰撞手法:
而采用新型的MD5碰撞手法,得到两个MD5校验值相同的样本,一个是恶意程序,另一个则是正常程序,它们在功能和代码上完全不同。由两个不同的前缀程序A和B分别在尾部添加附加数据,构造出具有相同MD5的程序C和D,如下图所示:
这阶段碰撞样本的显著特点是,前缀程序中的正常程序大部分是带有签名的msi程序,在其尾部添加了碰撞数据后签名却还是有效的,这主要是利用了msi程序的特性——对任意带签名的msi程序,在其尾部可以任意添加修改附加数据而不影响签名的有效性,如下图所示。于是,MD5碰撞多了数字签名这个保护伞,大大提高了与安全软件的对抗强度。
例如:第二个链接
第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值是相同的,但两个文件的执行结果是完全不同的,这表明对MD5的信任作为验证工具软件的完整性,哈希函数中使用代码签名,已经成为问题。我们写的程序HelloWorld.cpp
用下面的c++源代码:#include "stdafx.h" int main(int argc, char* argv[]) { printf("Hello World ;-)\n"); return 0; }
我们还写了计划
GoodbyeWorld.cpp
用下面的c++源代码:#include "stdafx.h" int main(int argc, char* argv[]) { while(true) printf("Goodbye World :-(\n"); return 0; }此时这两个文件的MD5散列值是不同的,但是使用chosen-prefix前缀碰撞法,接下来仔细构造两组832字节,并附加两个文件的结束。这些2 * 832字节构造产生的文件,重命名
HelloWorld-colliding.exe
和GoodbyeWorld-colliding.exe
,它们是不同的文件,包含项目有不同的功能,它们都有MD5散列值码
18FCC4334F44FED60718E7DACD82DDDF
.
3.验证软件完整性时可能出现的问题:
(1)两个不同的程序,MD5可能是相同的。可以利用MD5的这个漏洞来伪造数字签名。
(2)不能通过校验MD5知道软件是否被侵入。是否曾被恶意植入病毒或木马。
(3)易被攻破而使安全性大大下降。如果有第三方在验证软件完整性时截取软件代码,使用快速MD5碰撞生成器,在短时间内伪造一份相同的MD5,并恶意篡改软件,那么安全性将会大大下降。
(4)感染病毒,传输故障
参考网站:
https://www.zhihu.com/question/54307104 生日攻击 https://blog.csdn.net/down177/article/details/43233797 MD5 和SHA-1的区别 https://www.zhihu.com/question/56234281 如何评价 2 月 23 日谷歌宣布实现了 SHA-1 碰撞 www.freebuf.com/articles/93780.html MD5碰撞演化之路 https://baike.baidu.com/item/MD5/212708?fr=aladdin&fromid=174909&fromtitle=MD5%E7%AE%97%E6%B3%95&qq-pf-to=pcqq.group MD5百度百科