散列函数的应用及其安全性
一.散列函数及其具体应用
散列函数是密码学领域的重要分支,随机数产生、数据完整性校验、影子密钥、挑战和响应、消息认证码、数字签名和数字证书等领域有广泛的应用。其基本思想是把Hash函数值看成输入信息的摘要,输入信息的任何变化都会引起Hash函数输出值的变化。
·消息认证:消息认证是用来验证消息完整性的一种机制或服务。消息认证确保收到的数据确实和发送时一样(即没有修改、插入、删除或重放)。
当Hash函数用于提供消息认证功能时,Hash函数值通常称为消息摘要。
消息认证中使用Hash函数的本质如下:发送者根据待发送的消息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去。接收者收到后对消息执行同样的Hash计算,
并将结果与收到的Hash值进行对比,如果不匹配,则接收者推断出消息遭受了篡改。
不同方案如下:
(a).使用对称密码加密消息和Hash码。附加的Hash码提供了实现认证功能的结构。因为对于整个消息和Hash码都使用了加密,保密性也被提供。
(b).使用对称密码算法只对Hash码进行加密。这种方案对于无需保密性的应用,减少了加密解密操作的负担。
(c).不使用加密算法,仅使用Hash函数。该方案假设通信双方共享相同的秘密值S。
(d).将整个消息和Hash值加密。
·数字签名:在数字签名过程中使用用户的私钥加密消息的Hash值,其他任何知道用户公钥的人都能够通过数字签名来验证消息的完整性。
方案如下:
(a).使用发送方的私钥,利用公钥密码算法仅对Hash码进行加密。
(b).若既希望保证保密性,有希望有数字签名,则先用发送方的私钥对Hash码加密,再用对称密码中的密钥对消息和公钥算法加密结果进行加密。
·其他应用:
--产生单向口令文件
--入侵检测和病毒检测
--构建随机函数或用做伪随机数发生器
二.结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展
·生日攻击
碰撞阈值是评价Hash 函数的一个度量尺度 ,目前已有一些攻击Hash 函数和计算碰撞消息的方法 ,生日攻击就是一种可以攻击任何类型Hash函数的一般方法
了解生日攻击首先应了解生日悖论
生日悖论:生日悖论,指如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%。这就意味着在一个典型的标准小学班级(30人)中,存在
两人生日相同的可能性更高。对于60或者更多的人,这种概率要大于99%。总结起来,生日悖论的本质就是,随着元素增多,出现重复元素的概率会以惊人速度
增长。
生日攻击:将生日悖论的问题抽象成散列函数,教室里每个人作为函数的输入x,每个人对应的生日作为函数的输出y,那么可以写成H(x)= y,由于一年有365
天,所以y可以取的值有365种。这时候我们改变输入x取值范围,发现只要当x取值数大于23种时,y碰撞的几率就达到50%以上。
随着新的攻击方法的提出和计算能力的不断提高, 一些Hash函数例如MD4和MD5已经被攻破, 另外一些如SHA-1也将在今后几年面临严峻的考验。 因此设计新的高安全度的Hash函数的需求越来越迫切 。
·2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性
王晓云教授的密码分析工作,使得传统的密码体制MD5和SHA1不再安全
2004年8月中国密码学家王小云教授等首次公布了提出一种寻找MD5碰撞的新方法。目前利用该方法用普通微机几分钟内即可找到MD5的碰撞。MD5已经被彻底攻破。在2017年,Google公司宣布实现了对SHA-1算法的攻击。SHA-1算法宣告攻破。不过需要注意的是,这次SHA-1算法破解的计算量相当于单个CPU计算6500年和单个GPU计算110年,因此就目前的PC硬件来看,依靠一台电脑完成破解是不现实的。然而密码学家认为,如果利用云计算技术来破解的话,这件事情将简单很多,可能只需要17万美元的预算即可完成,因此尽快改用安全性更高的SHA-2或SHA-3算法才是正确的做法。
·目前安全散列函数的发展
高级加密标准AES已完全取代传统的DES算法,成为信息安全领域的一个十分可靠的加密算法.特别地,由于王晓云教授的十分出色的密码分析工作,使得传统的密码体制MD5和SHA1不再安全,人们
需要更安全、新的哈希函数.近年来,国内外学者分别利用辫群建立了若干密码算法.然而,学者们对这些算法进行展开,发现这些密码体制的安全性所基于的辫群的计算困难问题往往会转化为具体对象
的搜索问题,而这些对应的搜索问题却是可计算的.从而,这些算法的安全性存在能行的攻击威胁。散列函数目前还是使用最为广泛的加密算法,尽管会出现安全性的问题,在找到新的更为有效的算法
之前,应该会持续发展,更新算法并且网站也开始随之更新。
三.md5算法在验证软件完整性时可能出现的问题
MD5:即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数
据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。(摘自百度百科)
MD5算法的选择前缀碰撞:如果两个文件存在任何碰撞(冲突)的地方,发生前缀碰撞后,这两个文件完全相同,即得到相同的MD5。第二个链接中的helloworld.exe和
goodbyworld.exe两个可执行文件的MD5消息摘要值相同,即文件内容不同,但是MD5相同,这说明MD5算法存在着不安全性。利用王晓云
教授的方法,MD5算法可以在短时间内以低成本彻底攻破。
如果将加密的md5值直接保存在数据库,当网站存在注入或其他漏洞时,入侵者极有可能获取用户的密码值。