一、散列函数的具体应用:
二、散列函数的安全性以及目前安全散列函数的发展
1、生日攻击
利用“两个集合相交”问题的原理生成散列函数碰撞,达到目的的攻击称为生日攻击,也称为平方根攻击。生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即Hash值的长度。
防范方法:
(1)使用安全的Hash算法:安全的Hash算法生成的Hash值有足够多的位数。这样,攻击者在寻找两个具有相同Hash值的文件时就会非常困难。
(2)加盐:在为文件签名之前,先向文件添加一个随机值,然后计算Hash值,再将文件、签名和随机值一起发送给接收者。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。
(3)改动文件:在为文件签名之前,对消息或文件做少许改动。这样,攻击者必须找出具有特定Hash值的伪造文件,这非常困难。
2、MD5算法和SHA-1的安全性
MD5的前身有MD2、MD3和MD4。核心是哈希函数,2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌。王小云教授的成果集中在加速构造碰撞对。原来理论上构造出一个MD5碰撞对需要2^64次尝试,而现在只需要2^39次,其算法大大加速了这一过程。但从应用场景上来看,它本身并不具备太多的应用价值,因为构造出的碰撞很可能毫无意义。它的价值在于,在此算法基础上衍生出来的一系列MD5的算法,能够在部分场景下,构造出一个有意义的伪造信息,并且MD5值保持不变。所以,单单看这个算法本身就说MD5不安全,有些夸大其实,但是,后续的长度拓展攻击,就是在已知输入M的长度(注意是长度)和其MD5值的情况下,可以在原文M后面附加任意内容,同时能够推算出新的MD5。在某些将MD5作为签名手段的系统中,攻击者可以在原文M后面随意添加内容同时能够提供正确的MD5值,使得MD5的安全性大大降低。2017年,Google公司宣布实现了对SHA-1算法的攻击。在实际中,安全散列函数永远不应该发生碰撞。然而,如果散列算法有一定的缺陷,如SHA-1,一个资金雄厚的攻击者就可以制造出碰撞。攻击者可以利用碰撞欺骗系统,这些系统根据HASH来接收一个恶意文件,从而代替了它的良性副本。
3、散列函数的安全性以及目前安全散列函数的发展
1.单向性(原像稳固性)。给定一个消息摘要y,很难找到符合h(x)=y的消息x。
2.第二原像稳固性。给定x,很难找到一个x’,满足h(x)=h(x’)。
3.碰撞稳固性。很难找到满足h(x)=h(x’)的二元组(x,x’)。
这其中解决第三个问题碰撞问题的难度是最小的,目前对md5、sha1的攻击也基本都是在寻找碰撞。
目前发展:
2005年MD5的攻破似乎宣告了SHA或许为仅存的安全散列算法。
SHA-0:SHA由美国标准与技术研究所(NIST)设计并于1993年发表,该版本称为SHA-0,由于很快被发现存在安全隐患,
SHA-1:1995年发布了SHA-1。
SHA-2:2002年,NIST分别发布了SHA-256、SHA-384、SHA-512,这些算法统称SHA-2。2008年又新增了SHA-224。
由于2017年SHA-1算法的攻破,目前已经有多家科技企业宣布逐步放弃SHA-1算法,微软已经确定会放弃在Edge以及IE浏览器上继续使用SHA-1算法的TLS证书,Google的Chrome在56版之后也会提示SHA-1加密的HTTPS网页并不安全,Mozilla则确定在今年7月开始停止SHA-1的支持。目前SHA-2各版本已成为主流。
三、d5算法在验证软件完整性时可能出现的问题(1)程序在屏幕上可能打印出不同的字符,但是它们的 MD5 都是一样的
(2)不能通过校验MD5来知道网站是否被黑客攻击或者植入病毒木马
(3)当软件过大时,在验证过程中所需的时间也会大大增加,第三方攻击的成功概率也会增加
(4) 无法保证文件的完整性和正确性,文件可能被篡改或损坏