散列函数的安全性问题

散列函数的安全性问题

 

 

目录:html

1、散列函数的具体应用;
算法

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

3、md5算法来验证软件完整性时可能出现的问题。网络

 

1、散列函数的具体应用

Hash函数被普遍的应用于各类不一样的安全应用和网络协议中。函数

1.消息认证

   消息认证是用来验证消息完整性的一种机制和服务。消息认证确保收到的数据确实和发送时的同样,还要求消息认证机制确保发送方声称的身份是真实有效的。当Hash函数用于提供消息认证功能时,Hash函数值一般被称为消息摘要。测试

消息认证中使用Hash函数的本质:网站

   发送方根据待发送的消息使用该函数计算一组Hash值,而后将Hash值和消息一块儿发送过去。接收方接收后对于消息执行一样的Hash计算,并将结果与收到的Hash值进行比较。若是匹配,则消息准确。反之,消息遭受了篡改。google

Hash码可以经过不一样方法用于提供消息认证。以下:加密

 

 

(1)使用对称密码E加密消息和Hash码,因为只有A和B共享密钥K,因此消息必然发自A处,且可经过验证Hash码证实数据在传输过程当中未被更改。      spa

(2)使用对称密码只对Hash码加密。因为明文无需加密性的应用,这种方案大大减小了加密操做的负担。      

(3)不使用加密算法,仅使用Hash函数实现消息验证。该方案中,通讯双方共享相同的秘密值S,发送方A将消息M和秘密值S串联后计算其Hash值,并将获得的Hash值附在消息M后发送。由于接收方B同时掌握S值,因此可以从新计算该Hash值进行验证。      

(4)在方案c的基础上将整个消息和Hash值加密,以提供保密性。    

处于成本和速度方面的考虑,人们愈来愈对那些不包含加密函数的方法感兴趣,所以b和c方案更受青睐,不过若是对整个消息有加密型要求,则a和d仍具备实际意义。    

实际应用中,消息认证一般使用消息认证码(MAC)实现。MAC函数将通讯双方共享的密钥和数据块做为输入,产生Hash值做为MAC码,而后将MAC码和受保护的消息一块儿传递或存储。须要检查消息的完整性时,使用MAC函数对消息从新计算,并将计算结果与存储的MAC码对比。MAC提供安全保护,用于抵抗不知道密钥的攻击者的攻击。在实现中,每每使用比加密算法效率更高的特殊设计的MAC函数。

2.数字签名

  • 数字签名的应用比消息认证更普遍。
  • 在进行数字签名时,使用用户的私钥加密消息的Hash值,其余任何知道该用户公钥的人都可以经过数字签名来验证消息的完整性。
  • Hash码用于提供数字签名的方案主要有如下两种:

 

 

(1) 使用发送方的私钥利用公钥密码算法对Hash码进行加密。这种方法也可提供认证;因为只有发送方能够产生加密后的Hash码,因此这种方法也提供了数字签名。

(2) 若既但愿保证保密性又但愿有数字签名,则先用发送方的私钥对Hash码加密,再用对称密码中的密钥对象消息和公钥算法加密结果进行加密,这种技术比较经常使用。 

3.产生单向口令文件

在操做系统中,存储口令的Hash值而不是口令自己,当用户输入口令时,操做系统将比对输入口令的Hash值和存储在口令文件中的Hash值来进行用户验证。

4.用于入侵检测和病毒检测

将每一个文件的Hash值H(F)存储在安全系统中(如CD-R),随后就能经过从新计算H(F)来判断文件是否被修改过。入侵者只可以改变F,而不能改变H(F)。

5.用于构建随机函数PRF或用做伪随机数发生器。

6.基于Hash函数的PRF可用于对称密码中的密钥产生。

-------------------------------------------------------------

2、  结合生日攻击、以及200四、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。

1.密码学Hash函数H的安全性要求:

① 输入长度可变——H可适用于任意长度的数据块。         

② 输出长度固定——H可以生成固定长度的输出。         

③ 效率——对于任意给定的x,计算H(x)相对容易,而且能够用软/硬件实现。         

④ 抗原像攻击(单向性)——对于任意给定的h,找到知足H(x)=h的x在计算上不可行,    

⑤ 抗第二原像攻击(抗弱碰撞性)——对于任意给定的数据块x,找到知足H(y)=H(x)的y ≠ x在计算上是不可行;         

⑥ 抗碰撞攻击(抗强碰撞性)——找到知足H(x) = H(y)的任意一对(x,y)在计算上是不可行的。

⑦ 伪随机性——H的输出知足伪随机性测试标准

  前三个特性是使用散列函数实际应用的需求。第四个条件,抗原像攻击,防止攻击者可以回复秘密值。抗弱碰撞性保证了对于给定的消息,不可能找到具备相同散列值的可替换消息。

  知足前五个条件的Hash函数,称为弱Hash函数。知足前六个条件的,称为强Hash函数。

2.散列函数的安全性:

  • 对于Hash函数的攻击分为两类:穷举攻击和密码分析。

穷举攻击:

  • 不依赖于任何算法的细节,仅与相应的长度有关。2004年8月中国密码学家王小云教授等首次公布了提出一种寻找MD5碰撞的新方法。目前利用该方法用普通微机几分钟内便可找到MD5的碰撞。MD5已经被完全攻破。
  • 对于长度为m的Hash码,对于穷举攻击所需付出的代价分别于下表中相应量成正比.(经过生日悖论进行穷举攻击)

抗原像攻击

2m

抗弱碰撞攻击

2m

抗强碰撞攻击

2m/2

 

 

密码分析:

依赖于具体算法的设计缺陷,利用算法的某种性质。理想的Hash函数要求密码分析攻击所需的代价大于或等于穷举攻击所需的代价。

3.安全Hash算法(SHA)

  • 近些年,应用最普遍的散列函数是SHA。因为其余每一种被普遍应用的散列函数都已经被证明存在这密码分析学中的缺陷,接着到2005年,SHA或许仅存的安全散列算法。SHA由美国国家标准与技术研究院(NIST)开发。
  • 直到2017年2月23日,Google通过两年的研究,表示其已经成功破解了SHA-1加密谷歌公司多年来一直主张弃用SHA-1方案,特别是在TLS证书签署等场景之下。早在2014年,Chrome小组就宣布将逐渐淘汰对SHA-1的使用。Google但愿本身针对SHA-1完成的实际攻击可以进一步巩固这一结论,让更多人意识到其已经再也不安全可靠。
  • 谷歌亦但愿这一针对SHA-1的实际攻击案例可以最终说服整个技术业界尽快转向更为安全的替代性方案,例如SHA-256SHA-3

 

● 1995年公布SHA-1
● 2002年,公布了SHA-2(SHA-25六、SHA-38四、SHA-512)
● 2008年,增长了SHA-224

SHA算法各个版本参数比较:

以SHA-512为例作一下介绍。该算法以最大长度不超过2128比特做为输入,生成512比特的消息摘要输出。输入以1024比特的数据块进行处理。过程重要包括如下步骤:

  • 步骤1:附加填充位
  • 步骤2:附加长度
  • 步骤3:初始化Hash缓冲区
  • 步骤4:以1024位的分组为单位处理消息
  • 步骤5:输出

SHA-512算法使得散列码的任意比特都是输入端每1比特的函数。基本函数F的复杂迭代产生很好的混淆效果;即随机取两组类似的消息也不可能生成相同的散列码。

 

3、 结合md5算法中的选择前缀碰撞以及第二个连接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题。

  • MD5Message Digest Algorithm MD5 为计算机安全领域普遍使用的一种散列函数,用以提供消息的完整性保护。MD5的做用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成必定长的十六进制数字串)。
  • MD5选择前缀碰撞:

选择前缀冲突——前缀冲突只要求在碰撞后文件应该彻底相等。在碰撞以前,要找到碰撞的两个文件能够是任何东西:咱们所选择的前缀碰撞查找方法老是会产生一个冲突,该冲突能够被合并到两个文件中,而无论碰撞以前存在什么数据。

 

构造前缀碰撞法可制做两个内容不一样但具备相同MD5验证码的文件

  老师所给连接中的HelloWorld-colliding.exeGoodbyeWorld-colliding.exe

  虽然执行的结果不一样,可是两个文件的MD5相同。

 

执行结果如图(GoodbyeWorld-colliding.exe):

 

 

  • 密码学家使用的是“构造前缀碰撞法”(chosen-prefix collisions)来进行这次攻击(是王小云所使用的攻击方法的改进版本)。
  • 他们的结论:MD5 算法不该再被用于任何软件完整性检查或代码签名的用途。
  • 如今,若是仅仅是想要生成 MD5 相同而内容不一样的文件的话,在任何主流配置的电脑上用几秒钟就能够完成了。
  • 这几位密码学家编写的“快速 MD5 碰撞生成器”:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip
  • 源代码:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5_source.zip

 

md5算法来验证软件完整性时可能出现的问题:

 

MD5算法能够被用来验证文件的完整性和是否被篡改,经过对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的 hash 值, 不一样的文件产生相同的hash的可能性是很是小的。MD5在实际应用中一般有两种用法,一种是计算一个字符串的MD5值,经常使用于密码相关的操做;另外一种是用于计算一个文件的MD5值,通常用于网络传输中验证文件是否出错。

 

  1. 不能确保文件的完整性。尤为是不能确保在文件传输、磁盘错误或其余无恶意涉入的状况下文件的正确性。
  2. 不能确保本身从网络下载的文件,是否就是原发布者所提供的文件。
  3. 不能经过校验MD5知道网站是否被黑客入侵篡改,是否曾被恶意植入病毒或木马

 

参考文档:快速MD5碰撞生成器,MD5真的不可靠了.

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

相关文章
相关标签/搜索