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