单向散列函数
1.什么是单向散列函数
单向散列函数有一个输入和一个输出,其中输入称为消息,输出称为散列值。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。
在指定的散列函数处理下,无论输入的字节序列尺寸如何,输出的尺寸是固定的。
应用:
1.对输入的字节序列1,采用单向散列函数计算出散列值。将散列值1保存到可信的安全位置。
2.之后某个时刻,再次对字节序列2输入,采用单向散列函数计算散列值2。
3.若散列值1等于散列值2,则可认为字节序列1和字节序列2是一致的。即每个字节都是相等的,且长度一致。
2.单向散列函数需具备的性质
_1.根据任意长度的消息计算出固定长度的散列值
_2.能够快速计算出散列值
_3.消息不同散列值也不同
弱抗碰撞性:要找到和该指定消息具有相同散列值的另外一条消息是非常困难的。
强抗碰撞性:要找到散列值相同的两条不同的消息是非常困难。
_4.具备单向性
即无法通过散列值反算出输入消息。
单向散列过程,有时也叫消息摘要过程。
3.常用的单向散列函数
_1.MD4、MD5
能够产生128比特的散列值。MD是消息摘要的缩写。
_2.SHA-1、SHA-256、SHA-384、SHA-512
_3.SHA-3
最新的标准
4.应该使用哪种单向散列函数呢
MD5是不安全的,因此不应该使用。
SHA-1除了用于对过去生成的散列值进行校验之外,不应该被用于新的用途,而是应该迁 移到 SHA-2。
SHA-2 有效应对了针对 SHA-1 的攻击方法,因此是安全的,可以使用。
SHA-3 是安全的,可以使用。
5.攻击
_1.原像攻击,第二原像攻击
原像攻击是指给定一个散列值,找出具有该散列值的任意消息;第二原像攻击是指给定一条消息1,找出另外一条消息2,消息2的散列值和消息1相同。
_2.生日攻击
生日攻击或者冲突攻击,这是一种试图破解单向散列函数的“强抗碰撞性”的攻击。找到散列值相同的两条消息,而散列值则可以是任意值。
6.总结
单向散列函数可以解决消息完整性(一致性)验证,但无法解决验证消息发送者是合法发送者。验证消息发送者是否合法,是认证的任务。
消息认证码
消息认证码,可以同时识别出篡改和伪装。
1.什么是消息认证码
消息认证码是一种确认完整性并进行认证的技术。
消息认证码的输入包括任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC值。
消息认证码中则需要使用发送者与接收者之间共享的密钥。
2.消息认证码的实现方法
_1.使用单向散列函数实现
HMAC 是一种使用单向散列函数来构造消息认证码的方法。使用SHA-1 、SHA-224 、SHA-256 、SHA-384 、SHA-512 所构造的 HMAC, 分别称为 HMAC-SHA1、HMAC-SHA-224、HMAC-SHA-256、HMAC-SHA-384、HMAC-SHA-512。
_2.使用分组密码实现
将分组密码的密钥作为消息认证码的共享密钥来使用,并用CBC模式将消息全部加密。
此时,初始化向量(IV)是固定的。由于消息认证码中不需要解密,因此将除最后一 个分组以外的密文部分全部丢弃,而将最后一个分组用作MAC 值。由于CBC模式的最后一个分组会受到整个消息以及密钥的双重影响,因此可以将它用作消息认证码。