目录:html 1、散列函数的具体应用; 2、散列函数的安全性以及目前安全散列函数的发展;安全 3、md5算法来验证软件完整性时可能出现的问题。网络 |
Hash函数被普遍的应用于各类不一样的安全应用和网络协议中。函数
消息认证是用来验证消息完整性的一种机制和服务。消息认证确保收到的数据确实和发送时的同样,还要求消息认证机制确保发送方声称的身份是真实有效的。当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函数。
(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-25六、SHA-38四、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值,通常用于网络传输中验证文件是否出错。 |