密码技术(七、一)之单向散列函数

2019-04-02  本文已影响0人  Invincibled

单向散列函数

  ——获取消息的“指纹”

什么是单向散列函数

单向散列函数(one-way hash function)有一个输入和一个输出,其中输入称为消息(message),输出称为散列值(hash value)。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性。
 这里的消息不一定是人类能够读懂的文字,也可以是图像文件或声音文件。单向散列函数不需要只得到消息实际代表的含义。无论任何消息,单向散列函数都会将它作为单纯的比特序列来处理,即根据比特序列计算出散列值。
 散列值的长度和消息的长度无关。无论是1比特,还是100MB,甚至100GB,单向散列函数都会计算出固定长度的散列值。以SHA-256单向散列函数为例,它所计算出的散列值的长度永远都是256比特(32字节)。所以,很容易处理和使用。

散列值的长度总是固定的.png

单向散列函数的性质

术语

单向散列函数 也称为消息摘要函数(message digest function)、哈希函数或者咋凑函数
 输入单向散列函数的消息也称为原像(pre-image)。
 单向散列函数输出的散列值也称为消息摘要(message digest)或者指纹(fingerprint)

单向散列函数的实际应用

检测软件是否被篡改

使用单向散列函数检测软件是否被篡改.png

基于口令的加密

 单向散列函数也被用于基于口令的加密(password based encryption ,PBE)。
 PBE的原理是将口令和盐(salt,通过伪随机数生成器产生的随机值)混合后计算其散列值,然后将这个散列值用作加密的密钥。通过这样的方式能够防御口令的字典攻击。

消息认证码

 使用单向散列函数可以构造消息认证码。
 消息认证码是将“发送者和接收者之间的共享密钥”和“消息”进行混合计算出的散列值。使用消息认证码可以检测并防止通信过程中的错误、篡改以及伪装。

数字签名

 在进行数字签名时也会使用单向散列函数。
 数字签名是现实社会中的签名和盖章这样的行为在数字世界中的实现。数字签名的处理过程非常耗时,因此一般不会对整个消息内容直接施加数字签名,而是先通过单向散列函数计算出消息的散列值,然后在对这个散列值施加数字签名。

伪随机数生成器

 使用单向散列函数可以构造伪随机数生成器。
 密码技术中所使用的伪随机生成树需要具备“事实上不可能根据过去的随机数列预测未来的随机数列”这样的性质。为了保证不可预测性,可以利用单向散列函数的单向性。

一次性口令

 使用单向散列函数可以构造一次性口令(one-time password)。一次性口令经常被用于服务器对客户端的合法认证。在这种方式中,通过使用单向散列函数可以保证口令只在通信链路上传送一次(one-time),因此即便被窃取了,也无法使用。


该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图来源于原著

上一篇 下一篇

猜你喜欢

热点阅读