2016012030+王超超+散列函数的应用及其安全性

一、散列函数的具体应用

1.单向散列函数在密码学中的应用

    A.数字签名技术

      a. 利用单向散列函数计算出需要签名的消息的邮摘,再利用签名算法对邮摘签名来代替直接对原来的消息进行签名。

       b.有效地提高了签名的效率和速度,也减少了传输的信息量,节约了网络的带宽。

    B.消息的完整性认证

       a.通常做法是文件的所有者用Hash算法计算出文件的Hash值,自己保存Hash值的一份拷贝,然后把文件存放在一个公开的地方。需要验证一个           文件的完整性时,就用一个Hash算法计算存储文件的Hash值,和原来自己保存的Hash值相比较,相等则完整,反之则有改动。

        b.实际中使用 在网络上利用Hash函数进行完整性鉴别

              

        这种方法实现了再不安全的通信信道上的完整性认证,广泛地使用在电子商务的认证系统中。

     C.一种改进的用户密钥管理方案

         a.用户的口令使用DES算法加密后存放在机器中的,但该算法对被加密的数据的长度有要求,即用户不能输入过长的密钥。

         b.利用单向散列函数提出一种安全的用户密钥管理方案 如果K=E(H(P1))

         

          这个方法改进后允许用户输入任意长度的口令,由于单项散列函数的单向性,还可以弥补DES的一些不有缺陷,同时能够对付穷举攻击的威胁。2.其他方面的应用

    A.保密增强邮件 PEM(Privacy Enhanced Mail)

          因特网保密性增强邮件标准,提供的消息完整性检查中的鉴别使用的单项散列函数MD2和MD5,邮件加密软件PGP 中2.6.3版本中使用的单项散列            函数是MD5。

    B.文件校验

        a.奇偶校验和CRC校验并没有抗数据篡改的能力

        b.MD5 Hash算法的“数字指纹特性”,使它成为目前应用最广泛的一种文件网整形校验和(Checksum)算法

        c.应用场景为:

           文件传送后的校验 得到的目标文件计算md5 checksum与源文件的做比对

           用作保存二进制文件系统的数字指纹,以便检测文件系统是否未经允许的被修改

    C.鉴权协议

         pop3协议中就有这一应用:

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

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

1.散列函数的安全性

   A.MD5和SHA-1算法

       a.MD5和SHA-1算法的核心是哈希函数。密码学哈希函数(Cryptography Hash Function,简称为哈希函数)又称杂凑函数,是在信息安全领域有广          泛和重要应用的密码算法,主要作用是数据完整性验证和消息认证。它有一种类似于指纹的应用,所以有时候我们也把它叫做“数字指纹”。因为它         具有以下特性:原始信息只要改变一点点,哪怕是几比特,对应的消息摘要也会改变很大。

       b.2004年8月17日在美国加州圣巴巴拉举行了一次国际密码学学术年会(Crypto’2004),当晚来自中国山东大学的王小云教授做了关于破译 MD5、              HAVAL-128、 MD4和RIPEMD算法的报告。

       c.SHA-1已经被公众密码社群做了非常严密的检验而还没发现到有不安全的地方,它在一段时间被认为是安全的,直到2017.02.23,Google宣布攻        破SHA-1。

结果显示是目前还不受Google发现的这个碰撞攻击方法影响。SHA-1发布于1993年,至今已经24年,计算机系技术这二十年是日新月异,二十多年已经很了不起了,加密算法都不得不在计算效率与破解难度之间权衡。一般来说十年左右更新一代,继任者sha-2发布于2001年,sha-3发布于2015年。实际的影响应该很有限。对于中国网站来说连https都没部署,大部分还是明文保存密码的,即使一些比较尊重客户的网站,也仅仅使用了早已经被公开碰撞方法的MD5加密方法而已。Google,facebook,微软,苹果等早已经换成了暂时安全的sha-256,sha-512等算法,属于sha-2系列,也已经发布快十五年了。应该很快就可以看到国际主流的网站更换sha-3算法了。

  B.关于生日攻击

     生日攻击是利用概率论中的生日问题,找到冲突的Hash值,伪造报文,使身份验证算法失效。

     防范方法:

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

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

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

  C.散列函数的安全性

       a.通过对于生日攻击的了解,散列函数的安全性是有待提高的。生日攻击并没有利用任何HASH函数的性质,是对任何HASH都适用的普适的攻击          方法,应对方法也很简单,增加HASH的长度,但是很难完成。

       b.以为相对于安全的MD5和SHA-1算法,在相继公布被实现碰撞之后,可以预见,之后的算法发现碰撞只是实现计算机更好性能的 时间长短而             已。

       举个例子:中国铁道部的12306使用SHA-1算法,上传Google的验证网站散列函数的安全性

结果显示是目前还不受Google发现的这个碰撞攻击方法影响。SHA-1发布于1993年,至今已经24年,计算机系技术这二十年是日新月异,二十多年已经很了不起了,加密算法都不得不在计算效率与破解难度之间权衡。一般来说十年左右更新一代,继任者sha-2发布于2001年,sha-3发布于2015年。实际的影响应该很有限。对于中国网站来说连https都没部署,大部分还是明文保存密码的,即使一些比较尊重客户的网站,也仅仅使用了早已经被公开碰撞方法的MD5加密方法而已。Google,facebook,微软,苹果等早已经换成了暂时安全的sha-256,sha-512等算法,属于sha-2系列,也已经发布快十五年了。应该很快就可以看到国际主流的网站更换sha-3算法了。

2.安全散列函数的发展

   A.MD4

      1990年Ronald L. Rivest设计,通过三圈的操作将任意长度的消息变换成128位的哈希值。

    B.MD5

      Rivest于1991年对MD4的改进版本。运用了四轮变换,并且每轮加上前一轮的结果。

    C.HAVAL

      为MD5的改进版本。轮数可以为3、4或5,输出长度分别为128、160、192或224位。

    D.SHA-1

      由NIST开发,1993年发表。输入最大长度为2^64位的数据,输出160位的消息摘要。

    E.SHA-256

      输出由160位扩大到256位,迭代次数由80次增加到128次。

   F.SHA-384

      输出扩大到384位,迭代次数增加到192次。

   H.SHA-512

      输出扩大到512位,迭代次数增加到256次。

 

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

MD5算法是一种摘要算法,它可以从多个字节组成的串中计算出由32个字节构成的“特征串”。对于超过32字节的串来说,MD5计算得出的值必然是其一个子集,所以必然存在两个(或更多)不同的串能够得出相同MD5值的情况,这种情况就叫做MD5碰撞。

几位密码学家使用 “构造前缀碰撞法”(chosen-prefix collisions)来进行攻击(是王小云所使用的攻击方法的改进版本),他们所使用的计算机是一台Sony PS3,且仅用了不到两天。如果仅仅是想要生成MD5 相同而内容不同的文件的话,在任何主流配置的电脑上用几秒钟就可以完成。

  他们的结论:MD5 算法不应再被用于任何软件完整性检查或代码签名的用途。

验证软件完整性时可能出现的问题:

   A.文件不完整的情况

        a.感染病毒

        b.植入木马/后门/人为篡改

        c.传输故障

   B.可能出现的问题

       a.如果有第三方在验证软件完整性时截取软件代码,使用快速MD5碰撞生成器,在短时间内伪造一份相同的MD5,并恶意篡改软件,那么安全性            将会大大下降

       b.当软件过大时,在验证过程中所需的时间也会大大增加,对于第三方而言,攻击的成功概率也会增加

       c.网站链接中的Vulnerability analysis也给出了一些问题分析:

On the other hand, there is the viewpoint of the relying party, i.e. the user downloading hashed or signed code who needs some guarantee that this software can be trusted. This relying party can not be sure anymore that the published hash value or the digital signature is valid for only the executable file he downloaded. There might very well be a sibling file with the same hash value or digital signature, while only one of these siblings went through the proper hashing or signing procedure. Especially when the software integrity verification takes place under the hood, with the user not knowing that the operating system or some hidden application is silently verifying digital signatures on software to be installed, the user may be more easily lured into installing malware.

Note that it is not necessary for an attacker to build both executables from source code. It is perfectly well possible to take as the first file any executable from any source, and as the second file produce a second executable as malware. Then a byte block to be appended to both files can be found such that the resulting files have the same MD5 hash value. If an attacker can then get the first file to be signed, e.g. by the original software vendor, this signature will also be valid for the attacker-constructed malware.

      d.即使用户能保证下载的文件的网站是能信任的,网站也不能保证用户下载到本地的文件是正确的。特别是当软件完整性验证发生在电脑主机下           时,当用户不知道操作系统或某些隐藏的应用程序在安装软件时默默地验证数字签名时,用户可能更容易被诱骗安装恶意软件。

      e.攻击者也不需要从源代码中构造出两个文件,完全可以将第一个文件作为任何源的任何可执行文件,并且作为第二个文件生成第二个可执行文件       作为恶意软件。然后,可以找到要附加到两个文件的字节块,使得得到的文件具有相同的MD5哈希值。攻击者只需要获取第一个文件就可以了。

 

 

猜你喜欢

转载自www.cnblogs.com/wangcc493/p/9016648.html