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