散列函数的应用及其安全性

一、散列函数的具体应用:

1、文件校验
  我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。
2、数字签名
  Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。
3、鉴权协议
如下的鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

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

  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) 无法保证文件的完整性和正确性,文件可能被篡改或损坏

原文地址:https://www.cnblogs.com/liuz100/p/9031934.html