2016012091 颜超一 散列函数的应用及其安全性

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

(1)错误校正

  使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做冗余效验。

(2)语音识别

  从一个已知列表中匹配一个MP3文件可以使用传统的散列函数——例如MD5,但是这种方案会对时间平移、CD读取错误、不同的音频压缩算法或者音量调整的实现机制等情况非常敏感。

(3)信息安全领域(三个方面)

  1)文件效验

    MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,此算法具有抗数据篡改的能力

  2)数字签名

     由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名。

  3) 鉴权协议

    挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

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

(1)简述生日攻击

    利用“两个集合相交”问题的原理生成散列函数碰撞,达到目的的攻击称为生日攻击,也称为平方根攻击。

(2)MD5和SHA-1的破解

  2005年美国密码会议上,王小云教授给出了计算MD5等散列算法的碰撞的方法,该方法可以很快的找到MD5的“碰撞”,就是两个文件可以产生相同的“指纹”。 2017年2月23日,谷歌在blog上宣布实现了SHA-1的碰撞。

(3)对于散列函数攻击的方式

   1穷举攻击(又称暴力攻击)

    暴力攻击的强度完全依赖于算法生成的散列码长度。可以对任何类型的散列函数进行攻击,典型代表是“生日攻击”。下面贴出了了生日悖论的描述。

 

  2)密码分析法

    依赖于对散列函数的结构和代数性质分析,采用针对散列函数弱性质的方法进行攻击。这类攻击方法有中间相遇攻击、差分分析等。

(4)安全散列函数的发展

 

  目前使用最多的哈希函数有MD(Message-Digest Algorithm)系列(MD4、MD5、HAVAL、RIPEMD)和SHA系列(SHA-1、SHA-256)

  1)MD4

  1990年Ronald L. Rivest设计,通过3圈的操作将任意长度的消息变换成128位的哈希值。MD4算法的前两圈已被Dobbertin等人攻破,证明MD4算法是不安全的,但整个算法并没有被攻破过。

   2)MD5

  MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,经过一系列处理之后,其输出是4个32位字的级联,与 MD4 相同。MD5算法被王小云证明是可攻破的,因此也已经不安全了。

   3)HAVAL

HAVAL是MD5的改进版本,其轮数可以是3、4或5(每轮16步),输出长度分别为128、160、192或224位。HAVAL用高非线性的7-变量函数取代了MD5的简单非线性函数。

 

  4)SHA1

  SHA由美国国家标准技术研究所NIST开发,与1993年发表,SHA-1是基于MD4设计的。输入最大长度为2^64位的数据,输出160位的消息摘要,同样以512位数据块进行处理。

  5)SHA-256

  输出由SHA-1的160位扩大到256位,迭代次数由SHA-1的80次增加到128次

  6)SHA-384

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

  7)SHA-512

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

 

输入位数

输出位数

迭代次数

分组长度

找到碰撞

MD4

无限

128bit

48

512bit

MD5

无限

128bit

64

512bit

SHA-1

264-1

160bit

80

512bit

理论260

SHA-2

SHA-256

264-1

256bit

64

512bit

SHA-384

2128-1

384bit

80

1024bit

SHA-512

2128-1

512bit

80

1024bit

SHA-3

224/256/384/512

24

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

(1)运行两个可执行文件helloworld.exe和goodbyworld.exe

 

(2)比较两个可行性文件的md5消息摘要值

         安装MD5效验工具

        

   

  经比较,这两个可执行文件md5消息摘要值相同,但两个程序会在屏幕上打印出不同的字符,这是用 “构造前缀碰撞法”(chosen-prefix collisions)来进行此次攻击的(是王小云所使用的攻击方法的改进版本)。其结论是MD5 算法不应再被用于任何软件完整性检查或代码签名的用途。

(3)可能出现的问题

  攻击者可能会伪造一个与双方沟通文件MD5值完全相同的文件,文件完整性无法被保障和文件签名的目的也无法达到。

原文地址:https://www.cnblogs.com/yanchaoyi/p/9031581.html