使用单向散列函数就可以获取消息的“指纹”,通过对比“指纹”,就能够知道两条消息是否一致。
什么是单向散列函数?
单向散列函数(one-way hash function)有一个输入和一个输出,其中输入称为消息,输出成为散列值。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以用来检查消息的完整性。 无论任何消息,单向散列函数都会将它作为单纯的比特序列来处理,即根据比特序列计算出散列值。 散列值的长度和消息的长度无关,无论消息多长,单向散列函数都会计算出固定长度的散列值。 要确认完整性,我们不需要对比消息本身,而只要对比单向散列函数计算出的散列值就可以了。
单向散列函数的性质 1.根据任意长度的消息计算出固定长度的散列值 2.能够快速计算出散列值 3.消息不同散列值不同——具备抗碰撞性 (两个不同的消息产生同一个散列值的情况称为碰撞) 弱抗碰撞性:要找到和该条消息具有相同散列值的另外一条消息是非常困难的; 强抗碰撞性:要找到散列值相同的两条不同的消息是非常困难的 4.具备单向性 单向性指的是无法通过散列值反算出消息
**注意:**单向散列函数并不是一种加密,因此无法通过解密将散列值还原为原来的消息。
关于术语 单向散列函数的相关术语有很多变体,各种参考书中使用的术语也有所不同 单向散列函数 也称为 消息摘要函数 、哈希函数 或者杂凑函数 输入单向散列函数的消息也称为 原像 单向散列函数输出的散列值 也称为 消息摘要 或者 指纹 完整性也称为一致性
单向散列函数的实际应用 1.检测软件是否被篡改 2.基于口令的加密 (PBE password based encryption)将口令和盐(salt通过伪随机数生成器产生的随机值)混合后计算其散列值,然后将这个散列值用作加密的密钥。 3.消息认证码 将“发送者和接收者之间的共享密钥”和“消息”进行混合后计算出的散列值。 4.数字签名 数字签名的处理过程非常耗时,因此一般不会对整个消息内容直接施加数字签名,而是先通过单向散列函数计算出消息的散列值,然后再对这个散列值施加数字签名。 5.伪随机数生成器 6.一次性口令
