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

作业要求:

1. 给出散列函数的具体应用

2.结合生日攻击以及2004、2005年王晓云教授有关MD5安全性和2017年Google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展,参考:https://www.win.tue.nl/hashclash/

3.结合MD5算法中的选择前缀碰撞以及参考链接中的helloworld.exe和goodbyworld.exe两个可执行文件的MD5消息摘要值和两个文件的执行结果说明MD5算法来验证软件完整性时可能出现的问题,参考:https://www.win.tue.nl/hashclash/SoftIntCodeSign/

首先解释一下散列函数,也就是hash函数是什么:

Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

一、散列函数的具体应用

HASH主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系。Hash算法在信息安全方面的应用主要体现在以下的3个方面:

1)文件校验

我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。

MD5 Hash算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

2)数字签名

Hash 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。对 Hash 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。

3)鉴权协议

如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

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

I)生日攻击:

通过之前概率论课程的“生日悖论”模型来分析散列碰撞的安全性。

生日攻击的基本原理为假定散列函数H有种可能输出(即输出为位),H作用于k个随机输入,则时至少有一个重复出现,发生碰撞现象。

2) MD5安全性:

MD5(RFC 1321)是 Rivest 于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与 MD4 相同。MD5比MD4来得复杂,并且速度较之要慢一点,但更安全,在抗分析和抗差分方面表现更好,是计算机安全领域广泛使用的一种散列函数。

但是在2004年8月17日的美国加州圣巴巴拉,正在召开的国际密码学会议上,王晓云教授首次公布了提出一种寻找MD5碰撞的新方法,目前利用该方法用普通微机几分钟内即可找到MD5的碰撞,MD5已经被彻底攻破。她的研究成果作为密码学领域的重大发现宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。

3) SHA-1的安全性:

安全哈希算法SHA-1是在1993年提出并在1995年完成修订,如今已经在许多加密安全协议中广泛使用,包括TLS和SSL、PGP 、SSH、S/MIME和IPsec等,被视为是MD5(散列函数)的后继者。然而从2005年开始,SHA-1的安全性就开始被密码学家质疑,他们认为随着计算机性能的提升,破解SHA-1算法将不成问题。2017年2月23日Google实现了对SHA-1算法的第一次攻击,现SHA-1算法被破解已经成为现实。

总结:

1、散列函数的安全性:

(1)一致性:相同的输入产生相同的输出。

(2)随机性:消息摘要外观是随机的,以防被猜出源消息。

(3)唯一性:几乎不可能找到两个消息产生相同的消息摘要。

(4)单向性:即如果给出输出,则很难确定出输入消息。

2、目前安全散列函数的发展:

(1)目前,已经出现了SHA-3,但是还是采用的是SHA-2。之所以全世界没有迁移到SHA-3,首要原因是世界上目前几乎没有任何软件或硬件支持该算法。

(2)前量子计算算法的Grover算法和Shor算法已经可以破译当今广泛使用的密码。Shor算法是一种量子计算机求解离散对数问题的算法,它能够攻破RSA、DSA和ECDSA密码,Grover算法没有Shor算法有效,它的作用相当于把密码的秘钥长度减少一半,密码技术人员可以通过加长秘钥长度来抵抗Grpver算法攻击。

(3)值得注意的是,国外的量子计算机发展迅速,已有像谷歌这样的著名公司将量子计算机投入使用,用于提高信息搜索效率和研究量子人工智能。如今的量子计算机还不足以通过执行Shor算法或Grover算法来大肆攻击现有密码。

(4)MD5 和 SHA1 是目前应用最广泛的Hash算法,而它们都是以 MD4 为基础设计的。MD4(RFC 1320)是 MIT 的Ronald L. Rivest在 1990 年设计的,MD 是 Message Digest 的缩写。它适用在32位字长的处理器上用高速软件实现--它是基于 32位操作数的位操作来实现的。

三、MD5算法来验证软件完整性时可能出现的问题

1)MD5算法:它的全称是message-digest algorithm 5(信息-摘要算法),经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。

2)MD5算法的选择前缀碰撞:如果两个文件存在任何碰撞(冲突)的地方,发生前缀碰撞后,这两个文件完全相同,即得到相同的MD5。第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的MD5消息摘要值相同,即文件内容不同,但是MD5相同,这说明MD5算法存在着不安全性。正如第二问中谈到,利用王晓云教授的方法,MD5算法已经被彻底攻破。

 总结:

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

1)无法保证文件的来源可靠性,即不能确认接收方接收到的文件与发送方的发出文件一致;

(2)无法保证文件的完整性和正确性,即文件可能被篡改或损坏;

(3)当验证效率较低时,会出现验证时间过长,给中间攻击者的攻击行为提供足够的攻击时间而增加安全风险。 

原文地址:https://www.cnblogs.com/xdhou/p/9026674.html