作业内容要求:
1)给出散列函数的具体应用。
2)结合生日攻击、以及2004、2005年王晓云教授有关MD5安全性和2017年google公司SHA-1的安全性,说明散列函数的安全性以及目前安全散列函数的发展。问题2的回答可以结合下面给出的第一个链接。
3)结合md5算法中的选择前缀碰撞以及第二个链接中的helloworld.exe和goodbyworld.exe两个可执行文件的md5消息摘要值和两个文件的执行结果说明md5算法来验证软件完整性时可能出现的问题。
链接1:https://www.win.tue.nl/hashclash/
链接2:http://www.win.tue.nl/hashclash/SoftIntCodeSign/
问题一:给出散列函数的具体应用
- 消息认证
消息认证是用来验证消息完整性的一种机制或服务。消息认证确保收到的的数据确实和发送时的一样(即没有修改、插入、删除或重放)。通常还要求消息认证机制确保发送方声称的身份是真实有效的。
Hash函数用于提供消息认证功能时,Hash函数值通常称为消息摘要。其本质为:发送者根据待发送的消息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去。接收者收到后对于消息执行同样的Hash计算,并将结果与收到的Hash值进行对比。如果不匹配,则接收者推断消息(Hash值)遭受了篡改。
Hash码提供消息认证的方法:
1.使用对称密码算法加密消息和Hash码。
2.使用对称密码算法只对Hash码进行加密。
3.不使用加密算法仅使用Hash函数。
4.通过将整个消息和Hash值加密。
- 数字签名
在进行数字签名过程中使用用户的私钥加密消息的Hash值,其他任何知道该用户公钥的人都能够通过数字签名来验证消息的完整性。
Hash码用于提供数字签名的方案:
1.使用发送方的私钥,利用公钥密码算法仅对Hash码进行加密。
2.先用发送方的私钥对Hash码加密,再用对称密码中的密钥对消息和公钥算法加密结果进行加密。
- 产生单向口令文件
存储口令的Hash值而不是口令本身,当用户输入口令时,操作系统将比对输入口令的Hash值和存储在口令文件中的Hash值。
- 入侵检测和病毒检测
将每个文件的Hash值H(F)存储在安全系统中,随后就能够通过重新计算H(F)来判断文件是否被修改过。入侵者只能够改变F,而不能改变H(F)。
- 构建随机函数(或用做伪随机数发生器)
基于Hash函数的PRF可用于对称密码中的密钥产生。
问题二:说明散列函数的安全性以及目前安全散列函数的发展
1.生日攻击:
生日攻击方法没有利用Hash函数的结构和任何代数弱性质,它只依赖于消息摘要的长度,即Hash值的长度。这种攻击对Hash函数提出了一个必要的安全条件,即消息摘要必须足够长。生日攻击并没有利用任何Hash函数的性质,是对任何Hash都适用的普适的攻击方法,应对方法也很简单,增加Hash的长度。生日攻击这个术语来自于所谓的生日问题,在一个教室中最少应有多少学生才使得至少有两个学生的生日在同一天的概率不小于1/2?这个问题的答案为23。
2.MD5安全性:
Message Digest Algorithm 5(消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
3.SHA-1安全性:
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。 SHA1有如下特性:
1.不可以从消息摘要中复原信息;
2.两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)。
2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto‘2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。(并非是真正的破解,只是加速了杂凑冲撞)。2005年2月,王小云教授又破解了另一国际密码SHA-1。换句话说,王小云的研究成果表明了从理论上讲电子签名可以伪造,必须及时添加限制条件,或者重新选用更为安全的密码标准,以保证电子商务的安全。
4.散列函数的安全性:
密码学Hash函数的安全性需求如下:
- 输入长度可变;
- 输入长度固定;
- 效率;
- 抗原像攻击(单向性);
- 抗第二原像攻击(抗弱碰撞性);
- 抗碰撞攻击(抗强碰撞性);
- 为随机性;
前3条特性是Hash函数实际应用的需求,第4个条件单向性是指,有消息很容易计算出Hash码,但由于Hash码却不能计算出相应的消息。第5个性质抗弱碰撞性可以保证。若一个Hash函数满足前5个要求,称为弱散列函数;满足前6个性质,称为强散列函数。
3个安全特性抗原像攻击、抗弱碰撞攻击、抗强碰撞攻击之间的联系:
安全散列函数的发展:
有两种方法可以攻击安全散列函数:密码分析法和暴力攻击法。散列函数抵抗暴力攻击的强度完全依赖于算法生成的散列码长度。单向散列函数或者安全散列函数之所以重要,不仅在于消息认证(消息摘要,数据指纹),还有数字签名(加强版的消息认证)和验证数据的完整性。散列函数目前还是使用最为广泛的加密算法,尽管会出现安全性的问题,在找到新的更为有效的算法之前,应该会持续发展,更新算法并且网站也开始随之更新。但是旧的算法尽管使用的人数更少了,也依旧会有可能被继续发现安全性能的缺失。
问题三:说明md5算法来验证软件完整性时可能出现的问题。
1.前缀碰撞:
将碰撞合并到一对文件中时,除了构成碰撞的相对较小的随机查找字节块之外,构造碰撞的原始方法要求文件完全相等。实验中所选择的前缀冲突只有在碰撞后文件应该完全相等的要求。之前碰撞的两个文件的碰撞可以是任何事情:前缀碰撞查找方法总是会产生一个碰撞,该碰撞可以合并到两个文件中,而不管在碰撞之前存在什么数据。随机字节可以附加到各种格式,而不会改变它们的功能。这个想法也适用于可执行文件。因此,通过附加一个选择前缀的冲突,任何完全无害的程序都可以与任何其他程序(如恶意软件)相冲突。这两个文件在执行时显示不变的行为,一个是好的,另一个是坏的,但现在这些文件具有相同的MD5散列值。
2.执行helloworld.exe和goodbyworld.exe 两个文件文件:
3.md5算法来验证软件完整性时可能出现的问题:
结合链接2中的实验报告,可知:
为了滥用软件完整性保护或代码签名方案中的选择前缀冲突,攻击者应能够在文件被散列和/或签名之前对其进行操作。这可能意味着攻击者需要内部人员访问运行可信软件完整性保护或代码签名过程的一方。具有此类访问权限的攻击者无论如何都可能会造成更多伤害,而无需选择前缀冲突,从而获得恶意软件上的“官方”数字签名。
另一方面,存在依赖方的观点,即用户下载哈希或签名的代码需要一些保证该软件是可信的。该依赖方无法确定发布的散列值或数字签名是否仅对他下载的可执行文件有效。很可能有一个具有相同散列值或数字签名的兄弟文件,而这些兄弟姐妹中只有一个经历了适当的散列或签名过程。特别是当软件完整性验证发生在引擎盖下时,由于用户不知道操作系统或某个隐藏的应用程序正在静默地验证要安装的软件上的数字签名,攻击者无需从源代码构建两个可执行文件。从任何来源获取可执行文件的第一个文件并将其作为第二个可执行文件生成恶意软件是完全可能的。然后可以找到要附加到两个文件的字节块,以便生成的文件具有相同的MD5散列值。如果攻击者随后可以获得第一个文件的签名,例如由原始软件供应商签名,则此签名对于攻击者构建的恶意软件也是有效的。
所以,MD5再也不应该用作软件的完整性或一个Hash函数代码签名的目的。
原文地址:https://www.cnblogs.com/malings/p/9020665.html