2016012025 童宇欣 散列函数的应用及其安全性

一.散列函数的具体应用

密码学中,Hash函数被普遍应用于各类不一样的安全应用和网络协议中。如下是散列函数的一些具体应用。html

1.消息认证算法

(1)消息认证概念:消息认证是用来验证消息完整性的一种机制和服务。消息认证确保收到的消息和发送时是同样的,同时确保发送方声称的身份是真实有效的,当Hash函数用于提供消息认证功能时,被称为消息摘要。安全

(2)使用Hash函数的本质:发送者根据待发送的消息使用该函数计算一组Hash值,而后将Hash值和消息一块儿发送过去。接收者收到后对于消息执行一样Hash计算,并将结果与收到的Hash值进行对比。若是不匹配,则接收者推断出消息(或Hash值)遭到了篡改。网络

(3)Hash码可以经过以下不一样方法提供消息认证:函数

     a.使用对称密码算法加密消息和Hash码。工具

     b.使用对称密码算法只对Hash码进行加密。测试

     c.不使用加密算法,仅使用Hash函数实现消息认证。(假设通讯双方共享私密值S)网站

     d.经过将整个消息和Hash值加密,可以在c的基础上提供保密性。云计算

(4)通常状况,消息认证是经过MAC实现的。通讯双方基于共享的同一密钥来认证彼此之间交互的信息时,就会使用MAC。MAC是Hash函数和加密函数操做的结合。而且提供了安全保护,用以抵抗不知道密钥的攻击者的攻击。加密

2.数字签名

(1)数字签名简述:数字签名的操做与MAC类似,在进行数字签名过程当中使用用户的私钥加密消息的Hash值,其余人任何知道该用户公钥的人都可以经过数字签名来验证消息的完整性。数字签名的应用比消息认证更为普遍。

(2)Hash码用于提供数字签名的方案:

     a.使用发送方的私钥,利用公钥密码算法仅对Hash码进行加密。

     b.先用发送方私钥对Hash码加密,再用对称密码中的密钥对消息和公钥算法加密结果加密。

3.其余应用

(1)产生单向口令文件。当用户输入口令时,操做系统将比对输入口令的Hash值和存储在口令文件中的Hash值。

(2)入侵检测和病毒检测。将每一个文件的Hash值H(F)存储在安全系统中,随后就可以经过从新计算H(F)来判断文件是否被修改过。

(3)密码学Hash函数可以用于构建随机函数PRF或用做伪随机数发生器。基于Hash函数的PRF可用于对称密码中的密钥产生。

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

1.生日攻击

(1)生日悖论是指,若是一个房间里有23个或23个以上的人,那么至少有两我的的生日相同的几率要大于50%。咱们能够将生日悖论用在碰撞,获得不一样Message有着相同tag。

(2)生日攻击步骤:

     a.随机在2^(n/2)信息空间中寻找一个M
     b.求出相应的tag
     c.寻找是否有碰撞,没有则返回步骤1
(3)破解时间
理论上而言,若抗碰撞性一直为2^n,而强抗碰撞性由于生日攻击的缘由会降至2^(n/2)时间。因而可知,SHA-1已经愈来愈不安全了,数月或者数年后,2^80将不是一个没法逾越的计算时间。另外,由于计算机多为伪随机,所以如今SHA-1理论上所需的抗碰撞时间仅为2^55时间,但好像并无人去证明过。

2.MD5安全性和SHA-1的安全性

2004年8月中国密码学家王小云教授等首次公布了提出一种寻找MD5碰撞的新方法。目前利用该方法用普通微机几分钟内便可找到MD5的碰撞。MD5已经被完全攻破。在2017年,Google公司宣布实现了对SHA-1算法的攻击。SHA-1算法宣告攻破。不过须要注意的是,此次SHA-1算法破解的计算量至关于单个CPU计算6500年和单个GPU计算110年,所以就目前的PC硬件来看,依靠一台电脑完成破解是不现实的。然而密码学家认为,若是利用云计算技术来破解的话,这件事情将简单不少,可能只须要17万美圆的预算便可完成,所以尽快改用安全性更高的SHA-2或SHA-3算法才是正确的作法。

3.散列函数安全性

(1)有两种方法能够攻击安全散列函数:密码分析法和暴力攻击法。散列函数抵抗暴力攻击的强度彻底依赖于算法生成的散列码长度。

(2)安全散列函数结构:由于所需的安全散列长度愈来愈长,所以咱们可使用有限定义域上的散列函数(俗称压缩函数)经过迭代方式拓展为具备无限定义域的散列函数。而最为表明性的就Merkle-Damgard结构。

Merkle-Damgard结构:

 

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

4.散列函数的发展

(1)MD2  Rivest在1989年开发出MD2算法。在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。而后,以一个16位的检验和追加到信息末尾。而且根据这个新产生的信息计算出散列值。

(2)MD4  MD4是麻省理工学院教授Ronald Rivest于1990年设计的一种信息摘要算法。它是一种用来测试信息完整性的密码散列函数的实行。经过三圈的操做将任意长度的消息变换成128位的哈希值。

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

(4)HAVAL  为MD5的改进版本。轮数能够为三、4或5,输出长度分别为12八、160、192或224位。

(5)SHA系列  SHA (Secure Hash Algorithm,译做安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数,经历了SHA-0,SHA-1,SHA-2,SHA-3系列发展。2002年,NIST分别发布了SHA-25六、SHA-38四、SHA-512,这些算法统称SHA-2。2008年又新增了SHA-224。NSA于2007年正式宣布在全球范围内征集新新一代(SHA-3)算法设计,2012年公布评选结果, Keccak算法最终获胜成为惟一官方标准SHA-3算法,但还有四种算法同时进入了第三轮评选,分别是:BLAKE, GrøSTL, JH和SKEIN,这些算法其实也很是安全,并且经受审查,被各类竞争币频繁使用。

三.MD5算法来验证软件完整性时可能出现的问题

1.选择前缀碰撞

(1)早期的碰撞样本,主要采用“前缀构造法”。前缀构造法碰撞后的两个样本只有尾部少许字节不一样,而程序代码是相同的。经过判断尾部数据的差别,两个样本能够执行不一样的程序流程。因为这种碰撞手法是经过同一前缀程序碰撞生成的两个样本,若是其中有恶意代码流程则两个样本均包含恶意代码,因此比较容易被安全软件识别,隐蔽性较差。

(2)“选择前缀碰撞法”(Chosen-prefix collsion[[1]])实现原理:

 经过选择不一样的前缀,计算生日数和碰撞块添加到文件尾部,便可获得两个具备相同的MD5的文件。不过,要计算出这些尾部数据并不容易,直接使用hashclash[[1]]的工具须要至关大的时间成本,可是碰撞做者对该工具进行改进后已经可以高效完成大量正常程序与恶意程序的碰撞了。

2.两个可执行文件的MD5消息摘要值和两个文件的执行结果

HelloWorld.exe
GoodbyeWorld.exe
这两个程序会在屏幕上打印出不一样的字符,可是它们的MD5都是一致的。这几位密码学家使用的是“构造前缀碰撞法”(chosen-prefix collisions)来进行这次攻击。

3.MD5验证软件完整性时可能出现的问题

(1)两个不一样的程序,MD5多是相同的。

(2)不能经过校验MD5知道网站是否被黑客入侵篡改,是否曾被恶意植入病毒或木马。

(3)当软件过大时,在验证过程当中所需的时间也会大大增长,对于第三方而言,攻击的成功几率也会增长。

(4)若是有第三方在验证软件完整性时截取软件代码,使用快速MD5碰撞生成器,在短期内伪造一份相同的MD5,并恶意篡改软件,那么安全性将会大大降低。

参考博客:

https://blog.csdn.net/jerry81333/article/details/52763070   抗碰撞性、生日攻击及安全散列函数结构解析

https://blog.csdn.net/hherima/article/details/36879321      网络安全-安全散列函数,信息摘要SHA-1,MD5原理

http://www.freebuf.com/articles/93780.html                  MD5碰撞的演化之路

相关文章
相关标签/搜索