一、给出散列函数的具体应用。
1)文件校验
MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验算法。
2)数字签名
因为非对称算法的运算速度比较慢,所以在数字签名协议中应用单向散列函数。对 Hash 值进行的数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。通过HASH处理我们可以使其仅仅作用于HASH摘要上,从而提高效率。
3)鉴权协议
如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。
4)安全数据的安全存储
由于HASH函数的单向性,我们可以实现口令,密码等安全数据的安全存储。
5)数据的校验
HASH函数有类似数据冗余校验的功能,但是它比简单的冗余校验碰撞的概率要小得多,所以用HASH来做关键数据的验证。
6)关键数据的衍生
因为HASH算法能够最大限度的保证其唯一性(从一个随机的种子数产生,并且不暴露种子本身秘密)。
二、结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。
生日问题:
在n个人中随机选取k个人,问当k为多大时能保证k个人中有两个人的生日是相同的?只要k=70,这其中两个人有相同生日的可能性就是99.9%。
2004、2005年王晓云教授有关MD5安全性:
王小云教授发现,可以很快的找到MD5的“碰撞”,就是两个文件可以产生相同的“指纹”。这意味着,当你在网络上使用电子签名签署一份合同后,还可能找到另外一份具有相同签名但内容迥异的合同,这样两份合同的真伪性便无从辨别。王小云教授的研究成果证实了利用MD5算法的碰撞可以严重威胁信息系统安全。
2017年google公司SHA-1的安全性:
希值可与 PDF 文件内容冲突 SHA-1破坏性攻击的速度仍然较暴力破解攻击快10万倍,这意味着前者确实具有可行性。
散列函数的安全性:
什么样的散列函数可以说是安全的呢?
第一、寻找两个输入得到相同的输出值在计算上是不可行的,这就是我们通常所说的抗碰撞的。
第二、找一个输入,能得到给定的输出在计算上是不可行的,即不可从结果推导出它的初始状态。
目前安全散列函数的发展:
SHA-2:2002年,NIST分别发布了SHA-256、SHA-384、SHA-512,这些算法统称SHA-2。2008年又新增了SHA-224。这些目前算是比较安全的
三、结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法在验证软件完整性时可能出现的问题。
什么是md5算法中的选择前缀碰撞:
以同一个给定的前缀程序A为基础,在尾部添加不同的附加数据,得到两个具有相同MD5的样本B和C,前缀构造法碰撞后的两个样本只有尾部少量字节不同,而程序代码是相同的。通过判断尾部数据的差异,两个样本可以执行不同的程序流程。由于这种碰撞手法是通过同一前缀程序碰撞生成的两个样本,如果其中有恶意代码流程则两个样本均包含恶意代码,所以比较容易被安全软件识别,隐蔽性较差。
可能出现的问题:
1、不同程序的MD5可能是一样的。比如说HelloWorld.exe和GoodbyeWorld.exe这两个程序,他们会在屏幕上打印出不同的字符,但是它们的MD5都是一致的。
2、容易对MD5进行冲撞攻击,普通的计算机可以在短时间内找到冲撞对。
3、可以利用MD5的这个漏洞来伪造数字签名
4、不能通过校验MD5从而确保软件安全性。
原文地址:https://www.cnblogs.com/fangnuonuo/p/9033104.html