2016012072+张济吨+散列函数的应用及其安全性

一、散列函数的具体应用

1.消息认证

        消息认证是用来验证消息完整性的一种机制或服务。消息认证确保收到的数据确实和发送时的一样(及没有修改、插入、删除或重放)。此外,还要求消息认证机制确保发送方的身份是真实有效的。当散列函数用于提供消息认证功能时,散列函数值通常称为消息摘要。

       消息认证中使用散列函数的本质:发送者根据待发送的消息使用函数计算一组Hash值,然后将Hash值和消息一同发送过去。接受者收到后对于消息执行同样的Hash计算,并将计算的结果与收到的Hash值比较,如果不匹配,则可推断出消息或者Hash值遭到更改。

2.数字签名

       在进行数字签名的过程使用用户的私钥加密消息的Hash值,其他任何知道该用户的公钥的人都能通过数字签名来验证消息的完整性。在这种情况下,攻击者需要知道用户的私钥才能修改数据。数字签名的应用比消息认证更广泛。 

      使用方案:(a)使用发送方的私钥,利用公钥密码算法进队Hash码进行加密。这个方法可以提供认证;由于只有发送方可以产生加密后的Hash码,所以还提供了数字签名,这个就是数字签名的本质。(b)若希望既有保密性,又有数字签名,可现用发送方的私钥对Hash码加密,再用对称密码中对消息和公钥算法加密结果进行加密,这个技术更常用。

3.用于产生单向口令文件

      操作系统存储的是口令的Hash值,而不是口令本身。因为黑客即使能访问口令文件,也不能获取到真正的口令(口令文件存的是Hash值)。当用户输入口令时,操作系统将比对输入口令的Hash值和存储在口令文件中的Hash值。大多数操作系统都采用这种口令保护机制。

4.用于入侵检测和病毒检测

       将每个文件的Hash值H(F)存储在安全系统中,随后就能通过重新计算H(F)来判断文件是否被修改,因为入侵者只能改变文件F,却无法改变H(F)(不知道Hash函数)。

5.用于构建随机函数(PRF)或者用做伪随机数发生器(PRNG)

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

1.安全性

(1)抗原像攻击(单向性):对任意给定的Hash值h,找到满足H(y)=h的y在计算上不可行。

(2)抗第二原像攻击(抗弱碰撞性):对任何给定的分块x,找到满足y!=x且H(x)=H(y)的y在计算上是不可行的

(3)抗碰撞性攻击:找到任何满足H(x)=H(y)的偶对(x,y)在计算上是不可行的

(4)伪随机性

2.生日攻击

       在n个人中随机选取k个人,当k为多大时能保证k个人中有两个人的生日是相同的?用概率的方法来考虑生日问题,只要k=70,随机选取70个人,这其中两个人有相同生日的可能性就是99.9%。假设至少有两个人同一天生日的概率为P,那么P的否定(我们写做1-P)就是没有任何两个人在同一天过生日的概率。假设我们有k个人,那么这k个人中没有任何两个人在同一天过生日的概率就是:1-P=(365*364*363*...*(36-k+1))/(365^k),算得k=70。

3.MD5的安全性

抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

简述:MD5就是把不论什么长度的文字内容,给精简成128位散列数。不论文字内容只有一个字母a,还是1w多字的长篇论文,都精简(或填充)成128位散列数。MD5的弱点被不断发现以及计算机能力不断的提升,通过碰撞的方法有可能构造两个具有相同MD5的信息,使MD5算法在目前的安全环境下有一点落伍。从实践角度,不同信息具有相同MD5的可能性还是非常低的,通常认为是不可能的,通过碰撞的方法也很难碰撞出复杂信息的MD5数值。

4.SHA-1的安全性

       该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

       单向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码的情况下都不能产生正确的散列值,从而保证了其安全性。SHA将输入流按照每块512位(64个字节)进行分块,并产生20个字节的被称为信息认证代码或信息摘要的输出。

 

       该算法输入报文的长度不限,产生的输出是一个160位的报文摘要。输入是按512 位的分组进行处理的。SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。
       安全哈希算法SHA-1是在1993年提出并在1995年完成修订,如今已经在许多加密安全协议中广泛使用,包括TLS和SSL、PGP 、SSH、S/MIME和IPsec等,被视为是MD5(散列函数)的后继者。然而从2005年开始,SHA-1的安全性就开始被密码学家质疑,他们认为随着计算机性能的提升,破解SHA-1算法将不成问题。
5.发展
      王小云教授的成果集中在加速构造碰撞对。原来理论上构造出一个MD5碰撞对需要2^64次尝试,而现在只需要2^39次,其算法大大加速了这一过程。2009年,冯登国、谢涛二人利用差分攻击,将MD5的碰撞算法复杂度进一步降低到2^21,极端情况下甚至可以降低至2^10。仅仅2^21的复杂度意味着即便是在2008年的计算机上,也只要几秒便可以找到一对碰撞。
      2013年,Marc Stevens发表了一篇论文,概述了创建SHA-1碰撞的理论方法。他说两份不一样的pdf文件,可以散列到相同的SHA-1摘要。破解难度:总计900万兆(即百万的五次幂,具体为9,223,372,036,854,775,808)次SHA1计算。要完成攻击的首个阶段需要单一CPU计算6500年。要完成攻击的第二阶段需要单一GPU计算110年。这是利用谷歌的技术专长与云基础设施计算碰撞情况,这也是我们截至目前已完成的规模最大的计算任务之一。
     但是,SHA到目前为止,还有SHA-224、SHA-256、SHA-384和SHA-512,并称SHA-2。至今尚未出现对SHA-2有效的攻击。但是,它的算法跟SHA-1基本上仍然相似。因此我们仍然需要不断发展新的算法。

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

       首先两个完全不同的EXE软件(A和B),Hash值也不一样。然后使用选择性前缀碰撞法进行攻击,得到两个软件(a和b),A和a的功能一样,B和b的功能一样,a和b完全不一样。但是a和b的Hash值一样。通过选择前缀碰撞法,在不知道Hash函数的情况下,可以修改产生一个能和Hash函数匹配的软件。

        后果:按照MD5的原理,发送方发送A软件和A软件的Hash值给接收方,假如出现中间人攻击,中间人收到A,并使用选择前缀碰撞法,中间人自己写一个木马软件B,对A和B进行攻击,产生a和b,然后把b和b的Hash值发送给真正的接收方,接收方比对b和b的Hash值,比对成功,以为就是发送方发的软件A,于是中木马。

 

posted @ 2018-05-13 19:10  omnivorous  阅读(198)  评论(0编辑  收藏  举报