2016012032 王慧珍 散列函数的应用及其安全性

一、散列函数的具体应用。

       1.消息认证

        消息认证是用来验证消息完整性的一种机制,能够确保收到的数据和发送时的一样。此外,通常还要求消息认证机制确保发送方声称的身份是真实有效的。Hash函数将可变长度的数据块M作为输入,产生固定长度的hash值 h = H(M),H(M)称为消息摘要。若通过消息认证码(MAC),即带密钥的Hash函数来实现消息认证,验证方能够确定发送方的身份。下图是使用对称密码算法E只对Hash码进行加密而实现的消息认证图解:

       

 

        2. 数字签名

        在进行数字签名过程中使用用户的私钥加密消息的Hash值,其他任何知道该用户公钥的人都能够通过数字签名来验证消息的完整性。若攻击者想要篡改消息,则需要知道发送方的私钥。这种方法既提供了消息认证又提供了数字签名。下图是使用发送方私钥利用公钥算法对Hash码进行加密而实现数字签名的图解:

        

        3.其他应用

       (1)密码存储

        在用户进行网站登录时,如果服务器直接存储用户密码,则如果服务器被攻击者所攻击,用户的密码就会遭到泄露。最典型的事件就是CSDN的密码明文存储事件了。为了解决这个问题,服务器可以仅存储用户密码的哈希结果。当用户输入登录信息后,服务器端可以计算密码的哈希结果,并与存储的哈希结果进行对比,如果结果相同,则允许用户登录。由于服务器不直接存储用户密码,因此即使服务器被攻击者攻击,用户的密码也不会被泄露。

       (2)产生单项口令文件

        比如操作系统存储口令的Hash值而不是口令本身,这样一来黑客即使能够访问口令文件,也不能获取真正的口令。当用户输入口令时,操作系统将比对输入口令的Hash值和存储在口令文件中的Hash值。大多操作系统都使用了这样的口令保护机制。

       (3)入侵检测和病毒检测

        将每个文件的Hash值H(F)存储再安全系统中,随后就能够通过重新计算H(F)来判断文件是否被修改过。入侵者只能够改变F,而不能够改变H(F)。

       (4)构建随机函数或伪随机数发生器

        基于Hash函数的PRF可用于对称密码中的密钥产生。

 

 

二、结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。

        1.散列函数的安全性

        散列函数的安全性体现在如下抗冲突性质:

        (1)  对于任意给定的h,找到满足H(x)=h的x很难(抗原像攻击性)。

        (2)  对于任意给定的数据块x,找到满足H(y)=H(x)的y ≠ x很难(抗弱碰撞性)。

        (3)  找到满足H(x) = H(y)的任意一对(x,y)很难(抗强碰撞性)。

        对于Hash函数的攻击分为两类:穷举攻击和密码分析。

        穷举攻击不依赖于任何算法的细节,仅与Hash码的长度有关,分为原像攻击、第二原像攻击和碰撞攻击。原像攻击和第二原像攻击是指攻击者对给定的Hash值h,试图找到满足H(y)=h的y,对于m位的Hash值,其穷举规模大约是2m。碰撞攻击是指攻击者试图找到两个消息或数据块x和y,满足H(x)=H(y),其穷举规模为2m/2

        密码分析是是对密码算法进行攻击,主要集中在对压缩算法f的内部结构进行分析。任何Hash函数都存在有碰撞,能要求的仅是找出碰撞在计算上是不可行的。评价Hash算法抗密码分析能力的方法是将其与穷举攻击所需的代价相比,也就是说,理想的Hash函数算法要求密码分析攻击所需的代价大于或等于穷举攻击所需的代价。

生日攻击就是一种碰撞攻击,它是利用概率论中的生日问题,考虑如果降低一定的计算量,能不能有比较高的概率找到一组碰撞。若找到冲突的Hash值,伪造报文,因为伪造报文与有效报文的Hash值相同,所以它们产生相同的签名,使身份验证失效。生日攻击的防范方法有三:

①  使用安全的Hash算法:安全的Hash算法生成的Hash值有足够多的位数。这样,攻击者在寻找两个具有相同Hash值的文件时就会非常困难。

②  加盐:在为文件签名之前,先向文件添加一个随机值,然后计算Hash值,再将文件、签名和随机值一起发送给接收者。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。

③  改动文件:在为文件签名之前,对消息或文件做少许改动。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。

 

2004年,王晓云教授利用差分攻击实现了实际可行的MD5碰撞搜索算法,能够在可计算时间内找到碰撞。目前的进展是,基于王晓云教授论文的改进算法,有人可以做到用笔记本在几小时内找到碰撞,因此MD5已被攻破,不再安全。

 

Google在2017年实现了对SHA-1算法的攻击,原理也是碰撞攻击。他们与CWI团队合作共同创造了两个PDF文件,其中一个为正常文件件,另外一个则是经过篡改的损坏文件,这两个PDF文件的内容完全不同,但是他们有着相同的Hash值,这说明现SHA-1算法被破解已经成为现实。不过需要注意的是,这次SHA-1算法破解的计算量相当于单个CPU计算6500年和单个GPU计算110年,因此就目前的PC硬件来看,依靠一台电脑完成破解是不现实的。然而密码学家认为,如果利用云计算技术来破解的话,这件事情将简单很多,可能只需要17万美元的预算即可完成,因此尽快改用安全性更高的SHA-2或SHA-3算法才是正确的做法。

 

        2.目前安全散列函数的发展

        MD5和SHA-1分别在2004年和2017年被攻破,目前MD5已基本被淘汰,而SHA-1由于攻击成本太高,还没到已经彻底不安全的程度,还在被大量使用,但已经有多家大型科技企业宣布逐步放弃SHA-1算法。现在,新生成的https数字证书已经基本淘汰了SHA-1,微软已经确定会放弃在Edge以及IE浏览器上继续使用SHA-1算法的TLS证书,Google的Chrome在56版之后也会提示SHA-1加密的HTTPS网页并不安全,Mozilla则确定在2017年7月开始停止SHA-1的支持。未来SHA-2应该会成为主流安全散列函数,它包括SHA-256、SHA-384、SHA-512系列。

        链接推荐:https://www.zhihu.com/question/56234281 (关于SHA-1碰撞)

 

 

三、结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和helloworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法在验证软件完整性时可能出现的问题。

        选择前缀碰撞是指选取一对任意的MD5消息前缀后,再构造一对后缀使得两部分级联后的消息对发生碰撞。在第二个链接中,HelloWorld.exe和GoodbyeWorld.exe是两个不同的可执行文件,它们MD5的Hash值也不同。但通过选择前缀碰撞,在两个文件后面都加上两块832个字节(不影响原功能),形成新的文件,分别命名为HelloWorld-colliding.exe和GoodbyeWorld-colliding.exe,这时会发现新的两个文件的Hash值是相同的,而它们各自的内容和功能都是不同的,这就找到了MD5的一对碰撞。附加选择前缀碰撞的好处在于,任何程序可以毫无影响地与其它任何程序碰撞。以上情况可以说明md5并不能保证软件的完整性,有可能出现两个不同的软件但Hash值相同的情况。

posted on 2018-05-13 21:57  -亲爱的缤纷筒  阅读(178)  评论(0编辑  收藏  举报