标签:国家标准 黑客 基于 md5值 相同 body 传输过程 top 依赖
目录: 一、散列函数的具体应用; 二、散列函数的安全性以及目前安全散列函数的发展; 三、md5算法来验证软件完整性时可能出现的问题。 |
Hash函数被广泛的应用于各种不同的安全应用和网络协议中。
消息认证是用来验证消息完整性的一种机制和服务。消息认证确保收到的数据确实和发送时的一样,还要求消息认证机制确保发送方声称的身份是真实有效的。当Hash函数用于提供消息认证功能时,Hash函数值通常被称为消息摘要。
消息认证中使用Hash函数的本质:
发送方根据待发送的消息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去。接收方接收后对于消息执行同样的Hash计算,并将结果与收到的Hash值进行比较。如果匹配,则消息准确。反之,消息遭受了篡改。
Hash码能够通过不同方法用于提供消息认证。如下:
(1)使用对称密码E加密消息和Hash码,由于只有A和B共享密钥K,所以消息必然发自A处,且可通过验证Hash码证明数据在传输过程中未被更改。
(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函数。
(1) 使用发送方的私钥利用公钥密码算法对Hash码进行加密。这种方法也可提供认证;由于只有发送方可以产生加密后的Hash码,所以这种方法也提供了数字签名。
(2) 若既希望保证保密性又希望有数字签名,则先用发送方的私钥对Hash码加密,再用对称密码中的密钥对象消息和公钥算法加密结果进行加密,这种技术比较常用。
在操作系统中,存储口令的Hash值而不是口令本身,当用户输入口令时,操作系统将比对输入口令的Hash值和存储在口令文件中的Hash值来进行用户验证。
将每个文件的Hash值H(F)存储在安全系统中(如CD-R),随后就能通过重新计算H(F)来判断文件是否被修改过。入侵者只能够改变F,而不能改变H(F)。
-------------------------------------------------------------
① 输入长度可变——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函数。
抗原像攻击 |
2m |
抗弱碰撞攻击 |
2m |
抗强碰撞攻击 |
2m/2 |
依赖于具体算法的设计缺陷,利用算法的某种性质。理想的Hash函数要求密码分析攻击所需的代价大于或等于穷举攻击所需的代价。
● 1995年公布SHA-1
● 2002年,公布了SHA-2(SHA-256、SHA-384、SHA-512)
● 2008年,增加了SHA-224
SHA算法各个版本参数比较:
以SHA-512为例做一下介绍。该算法以最大长度不超过2128比特作为输入,生成512比特的消息摘要输出。输入以1024比特的数据块进行处理。过程重要包括以下步骤:
SHA-512算法使得散列码的任意比特都是输入端每1比特的函数。基本函数F的复杂迭代产生很好的混淆效果;即随机取两组相似的消息也不可能生成相同的散列码。
选择前缀冲突——前缀冲突只要求在碰撞后文件应该完全相等。在碰撞之前,要找到碰撞的两个文件可以是任何东西:我们所选择的前缀碰撞查找方法总是会产生一个冲突,该冲突可以被合并到两个文件中,而不管碰撞之前存在什么数据。
构造前缀碰撞法可制作两个内容不同但具有相同MD5验证码的文件
老师所给链接中的HelloWorld-colliding.exe和GoodbyeWorld-colliding.exe
虽然执行的结果不同,但是两个文件的MD5相同。
执行结果如图(GoodbyeWorld-colliding.exe):
md5算法来验证软件完整性时可能出现的问题:
MD5算法可以被用来验证文件的完整性和是否被篡改,通过对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的 hash 值, 不同的文件产生相同的hash的可能性是非常小的。MD5在实际应用中通常有两种用法,一种是计算一个字符串的MD5值,常用于密码相关的操作;另一种是用于计算一个文件的MD5值,一般用于网络传输中验证文件是否出错。 |
标签:国家标准 黑客 基于 md5值 相同 body 传输过程 top 依赖
原文地址:https://www.cnblogs.com/chenf640/p/9004907.html