作业五 散列函数的应用及其安全性

作业五 散列函数的应用及其安全性

————————————————————————————————————

题目内容要求

一、给出散列函数的具体应用

二、结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以参考下面给出的第一个链接

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

链接1:https://www.win.tue.nl/hashclash/

链接2:http://www.win.tue.nl/hashclash/SoftIntCodeSign/

————————————————————————————————————

一、散列函数的具体应用

  散列Hash函数是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数,通常应用在只需要加密、不需要解密的特殊应用场合。单项散列(Hash)函数H(M)作用于一任意长度的消息M,它返回一固定长度的散列值h:h=H(M)作为初始消息的独一无二的“数字指纹”,从而能保证数据的完整性和惟一性。其具体应用包括以下四点

1文件校验

  我们比较熟悉的校验算法有奇偶校验和CRC校验,这两种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。MD5 Hash算法的“数字指纹”特性,使它成为目前应用最广泛的一种文件完整性校验和算法,不少Unix系统有提供md5 checksum的命令。

2数字签名

  哈希算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单项散列函数扮演了一个重要的角色。对hash值,又称“数字摘要”进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。

(3)鉴权协议

  如下的鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。以上就是一些关于hash以及其相关的一些基本预备知识。

————————————————————————————————————

二、说明散列函数的安全性以及目前安全散列函数的发展

1.生日攻击

(1)生日悖论

  是指如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%。从引起逻辑矛盾的角度来说生日悖论并不是一种悖论,从这个数学事实与一般直觉相抵触的意义上,它才称得上是一个悖论。大多数人会认为,23人中有2人生日相同的概率应该远远小于50%。

2)生日攻击

  利用“两个集合相交”问题的原理生成散列函数碰撞,达到目的的攻击称为生日攻击,也称为平方根攻击。生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即Hash值的长度。

3)生日攻击原理

  由此我们可以将它用在碰撞,得到不同Message有着相同tag。

假设:取样次数为N,M:M1-Mn,取值在tag:1-B中,并且假设分布随机均匀相互独立。

取样次数n与B的关系,n=1.2*B^0.5(这是生日悖论中最坏的情况。)

证明:M2不等于M1的概率为(B-1)/B,同理可得M3为(B-2)/B,M4为(B-3)/B...Mn为(B-n+1)/B。

因此,其中有碰撞的概率为:1-(1-1/B)(1-2/B).....(1-(k-1)/B)>= (1-e)^(-n^2/2B)

因为n=1.2*B^0.5,因此(1-e)^(-n^2/2B)=1-e^-0.72=0.53>50%

结论,因此使用生日攻击,我们只需2^(n/2)次寻找,就有50%概率能找到相同tag的两个不同Message。

2.MD5的安全性

  MD5是一个较为古老的算法,一度被广泛应用于安全领域。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。

  不过,由于MD5的弱点被不断发现以及计算机能力不断的提升,通过碰撞的方法有可能构造两个具有相同MD5的信息,使MD5算法在目前的安全环境下有一点落伍。从实践角度,不同信息具有相同MD5的可能性还是非常低的,通常认为是不可能的,通过碰撞的方法也很难碰撞出复杂信息的MD5数值。因此,MD5算法还是被广泛的用作检验文件是否变化的散列函数,很多类似迅雷、旋风这样的下载工具,都可以通过MD5来验证,用户下载下来的文件是否被修改。而MD5最大的问题在于,md5已经被证明可以进行碰撞攻击。王晓云等人发现了当前所用的HASH算法存在的问题,同时也必将帮助未来的新的HASH算法设计者考虑到这方面的问题,使得新的HASH算法具有更好的安全性。

3.google公司SHA-1的安全性

1)MD5SHA-1的比较

  由于MD5SHA-1均是从MD4发展而来,它们的结构和强度等特性有很多相似之处,表(1)是对MD5SHA-1的结构比较。SHA-1MD5的最大区别在于其摘要比MD5摘要长32比特。对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度:MD52128数量级的操作,SHA-12160数量级的操作。产生具有相同摘要的两个报文的难度:MD5264是数量级的操作,SHA-1280数量级的操作。因而,SHA-1对强行攻击的强度更大。但由于SHA-1的循环步骤比MD5多(80:64)且要处理的缓存大(160比特:128比特),SHA-1 的运行速度比MD5慢。

 

(2) SHA-1算法

  该算法的原始规范于1993年作为美国政府标准机构NIST(国家标准与技术研究院)的安全散列标准FIPS PUB 180发布。现在这个版本通常被称为SHA-0。它在出版后不久被国家安全局撤回,并被1995年发布的FIPS PUB 180-1修订版所取代,通常称为SHA-1。SHA-1与SHA-0的不同之处仅在于其压缩功能的消息调度中的单个按位旋转; 根据美国国家安全局的说法,这项工作已经完成,以纠正原有算法中的一个缺陷,从而降低了其密码安全性。然而,国家安全局并没有提供任何进一步的解释或确定哪些缺陷被纠正。随后在SHA-0和SHA-1中报告了弱点。SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。

 

4.安全散列函数结构

  因为所需的安全散列长度越来越长,因此我们可以使用有限定义域上的散列函数(俗称压缩函数)通过迭代方式拓展为具有无限定义域的散列函数。而最为代表性的就Merkle-Damgard结构

 

  这个结构的好处是,如果压缩函数是抗碰撞的,那经过此结构处理后的散列函数也是抗碰撞的。SM3,HMAC就是基于这种结构,因为Merkle-Damgard结构并不能抵抗扩展攻击,因此HMAC引入了Key。

————————————————————————————————————

三、说明md5算法来验证软件完整性时可能出现的问题

(1)md5算法中的选择前缀碰撞

  选择前缀冲突——前缀冲突只要求在碰撞后文件应该完全相等。在碰撞之前,要找到碰撞的两个文件可以是任何东西:我们所选择的前缀碰撞查找方法总是会产生一个冲突,该冲突可以被合并到两个文件中,而不管碰撞之前存在什么数据。构造前缀碰撞法可制作两个内容不同但具有相同MD5验证码的文件例如所给出的两个可执行文件执行结果不同,但是其MD5相同。

2md5算法来验证软件完整性时可能出现的问题

  MD5是消息摘要,消息摘要是哈希算法的一种应用,而消息摘要算法是一种碰撞要求极其严格的哈希算法。这些信息摘要算法通常散列都十分均匀,且不容易产生哈希碰撞。由此,我们可以用MD5的压缩来作为软件的完整性验证。但是,在使用MD5算法来验证完整性时,由于MD5算法是公开的,所有人都可以获得和使用MD5算法,那就意味着别人可以利用相同的算法针对你的加密值不断地进行计算。如果不对MD5算法进行一些处理,那么当我们将自己的重要接口暴露在互联网上的时候,比如登陆接口,攻击者就可以同样利用MD5加密算法对我们进行撞库攻击和关键信息比对。

————————————————————————————————————

四、参考附录

[1] https://blog.csdn.net/jerry81333/article/details/52763070

[2] https://blog.csdn.net/raptor/article/details/97270

[3] https://blog.csdn.net/down177/article/details/43233797

 

posted on 2018-05-10 19:52  裴有毒  阅读(361)  评论(0编辑  收藏  举报