信息安全-散列函数的应用及其安全性

信息安全:有关散列函数安全性的知识扩展

作业题目:散列函数的应用及其安全性。


 

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

1)文件校验

  MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。它常被用在下面的2种情况下:

  第一是文件传送后的校验,将得到的目标文件计算 md5 checksum,与源文件的md5 checksum 比对,由两者 md5 checksum 的一致性,可以从统计上保证2个文件的每一个码元也是完全相同的。这可以检验文件传输过程中是否出现错误,更重要的是可以保证文件在传输过程中未被恶意篡改。一个很典型的应用是ftp服务,用户可以用来保证多次断点续传,特别是从镜像站点下载的文件的正确性。

  更出色的解决方法是所谓的代码签名,文件的提供者在提供文件的同时,提供对文件Hash值用自己的代码签名密钥进行数字签名的值,及自己的代码签名证书。文件的接受者不仅能验证文件的完整性,还可以依据自己对证书签发者和证书拥有者的信任程度,决定是否接受该文件。浏览器在下载运行插件和java小程序时,使用的就是这样的模式。

  第二是用作保存二进制文件系统的数字指纹,以便检测文件系统是否未经允许的被修改。不少系统管理/系统安全软件都提供这一文件系统完整性评估的功能,在系统初始安装完毕后,建立对文件系统的基础校验和数据库,因为散列校验和的长度很小,它们可以方便的被存放在容量很小的存储介质上。此后,可以定期或根据需要,再次计算文件系统的校验和,一旦发现与原来保存的值有不匹配,说明该文件已经被非法修改,或者是被病毒感染,或者被木马程序替代。TripWire就提供了一个此类应用的典型例子。

  更完美的方法是使用"MAC"。"MAC" 是一个与Hash密切相关的名词,即信息鉴权码(Message Authority Code)。它是与密钥相关的Hash值,必须拥有该密钥才能检验该Hash值。文件系统的数字指纹也许会被保存在不可信任的介质上,只对拥有该密钥者提供可鉴别性。并且在文件的数字指纹有可能需要被修改的情况下,只有密钥的拥有者可以计算出新的散列值,而企图破坏文件完整性者却不能得逞。 

2)数字签名
  Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。在这种签名协议中,双方必须事先协商好双方都支持的Hash函数和签名算法。

  签名方先对该数据文件进行计算其散列值,然后再对很短的散列值结果--如Md5是16个字节,SHA1是20字节,用非对称算法进行数字签名操作。对方在验证签名时,也是先对该数据文件进行计算其散列值,然后再用非对称算法验证数字签名。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。

  而且这样的协议还有其他的优点:

  首先,数据文件本身可以同它的散列值分开保存,签名验证也可以脱离数据文件本身的存在而进行。

  再者,有些情况下签名密钥可能与解密密钥是同一个,也就是说,如果对一个数据文件签名,与对其进行非对称的解密操作是相同的操作,这是相当危险的,恶意的破坏者可能将一个试图骗你将其解密的文件,充当一个要求你签名的文件发送给你。因此,在对任何数据文件进行数字签名时,只有对其Hash值进行签名才是安全的。 

3)鉴权协议
  如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

  需要鉴权的一方,向将被鉴权的一方发送随机串(“挑战”),被鉴权方将该随机串和自己的鉴权口令字一起进行 Hash 运算后,返还鉴权方,鉴权方将收到的Hash值与在己端用该随机串和对方的鉴权口令字进行 Hash 运算的结果相比较(“认证”),如相同,则可在统计上认为对方拥有该口令字,即通过鉴权。

  POP3协议中就有这一应用的典型例子:

S: +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us>
C: APOP mrose c4c9334bac560ecc979e58001b3e22fb
S: +OK maildrop has 1 message (369 octets)
  在上面的一段POP3协议会话中,双方都共享的对称密钥(鉴权口令字)是tanstaaf,服务器发出的挑战是<1896.697170952@dbc.mtview.ca.us>,客户端对挑战的应答是MD5("<1896.697170952@dbc.mtview.ca.us>tanstaaf") = c4c9334bac560ecc979e58001b3e22fb,这个正确的应答使其通过了认证。


 

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

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

1、生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即Hash值的长度。这种攻击对Hash函数提出了一个必要的安全条件,即消息摘要必须足够长。生日攻击通常用于寻找哈希函数的冲突。为了防止这种攻击,针对一个签名方案的哈希函数的输出的长度能够被广泛选择因此生日攻击变得计算上不可行的。

为了对抗弱抗冲突性,我们可能要穷举个数和散列值空间长度一样大的输入,即尝试2^128或2^160个不同的输入,目前一台高档个人电脑可能需要10^25年才能完成这一艰巨的工作,即使是最高端的并行系统,这也不是在几千年里的干得完的事。而因为"生日攻击"有效的降低了需要穷举的空间,将其降低为大约1.2*2^64或1.2*2^80,所以,强抗冲突性是决定Hash算法安全性的关键。

2、从王小云教授md5破解的报告来看,MD5 算法不应再被用于任何软件完整性检查或代码签名的用途。

MD5是一种摘要算法,它通常应用于数字签名中,用于标识原文的原始性--即在签名后未作任何的修改。如果可以用不同的原文可以产生相同的签名,这也就意味着签名可能失效,就已经可以证明这种摘要算法的不安全。

摘要算法的用途决定了,它只要能找到碰撞就足以让它失效,而并不需要找到原文

比如Linux的用户安全机制,只要得到用户密码文件(其中记录了密码的MD5),然后随便生成一个碰撞的原文(不一定要跟原密码相同),就可以用这个密码登录了。

但后面的程序发布的例子就要难得多,因为它必须能生成特定的碰撞,即在程序中插入病毒或木马后再填充一些数据使之生成与原来相同的MD5。

王小云的成果已经完全使Linux用的那种基于MD5的身份验证技术失效了,虽然从技术上说它被完全攻破,还为时尚早,但从法律角度上说,已经“动摇了差不多整个数字签名界的根基”。

现在刻意去伪造文件并产生相同的MD5码还做不到,但是,现在可以在短时间内找到两份相同的档案,他们的MD5码相同,那么,MD5作为数字签名的“法律意义”便失去了。

3、针对王小云教授等破译的以MD5为代表的Hash函数算法的报告,美国国家技术与标准局(NIST)于2004年8月24日发表专门评论,评论的主要内容为:“在最近的国际密码学会议(Crypto 2004)上,研究人员宣布他们发现了破解数种HASH算法的方法,其中包括MD4,MD5,HAVAL-128,RIPEMD还有 SHA-0。分析表明,于1994年替代SHA-0成为联邦信息处理标准的SHA-1的减弱条件的变种算法能够被破解;但完整的SHA-1并没有被破解,也没有找到SHA-1的碰撞。研究结果说明SHA-1的安全性暂时没有问题,但随着技术的发展,技术与标准局计划在2010年之前逐步淘汰SHA-1,换用其他更长更安全的算法(如SHA-224、SHA-256、SHA-384和SHA-512)来替代。”

      而著名计算机公司SUN的LINUX专家Val Henson则说:“以前我们说"SHA-1可以放心用,其他的不是不安全就是未知", 现在我们只能这么总结了:"SHA-1不安全,其他的都完了"

  在普林斯顿大学教授Edwards Felton的个人网站上,也有类似的评论。他说:“留给我们的是什么呢?MD5已经受了重伤;它的应用就要淘汰。SHA-1仍然活着,但也不会很长,必须立即更换SHA-1,但是选用什么样的算法,这需要在密码研究人员达到共识。”


  密码学家Markku-Juhani称“这是HASH函数分析领域激动人心的时刻。”

 


 

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

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

1、选择前缀碰撞法

早期的碰撞样本,主要采用“前缀构造法”,以同一个给定的前缀程序A为基础,在尾部添加不同的附加数据,得到两个具有相同MD5的样本B和C。

 

前缀构造法碰撞后的两个样本只有尾部少量字节不同,而程序代码是相同的。通过判断尾部数据的差异,两个样本可以执行不同的程序流程。由于这种碰撞手法是通过同一前缀程序碰撞生成的两个样本,如果其中有恶意代码流程则两个样本均包含恶意代码,所以比较容易被安全软件识别,隐蔽性较差。

而新型碰撞基于“选择前缀碰撞法”(Chosen-prefix collsion[[1]])实现的,其原理图大致如下:

通过选择不同的前缀,计算生日数和碰撞块添加到文件尾部,即可得到两个具有相同的MD5的文件。

2、链接所给的这两个程序会在屏幕上打印出不同的字符,但是它们的 MD5 都是一样的。

现在,如果仅仅是想要生成 MD5 相同而内容不同的文件的话,在任何主流配置的电脑上用几秒钟就可以完成了。

3、从以上,我们可以得出结论,在md5算法验证软件完整性的过程中,可能会出现以下问题:

  不同文件可能有相同的md5算法,故并不能保证所验证软件完全完整;

  有一定几率被入侵,但并不能被检测到,故安全性不能完全保证。

 

posted @ 2018-05-13 13:27  Olina_Chenry  阅读(399)  评论(0编辑  收藏  举报