单向散列函数

什么是单向散列函数

单向散列函数有一个输入和一个输出。输入称为消息(message),输出称为散列值(hash value)。

单向散列函数可以根据消息的内容计算出散列值,散列值可以被用来检查消息的完整性。

这里的消息也可以是图像文件或声音文件。无论任何消息,单向散列函数都会将它作为单纯的比特序列来处理,即根据比特序列计算出散列值。

散列值的长度和消息的长度无关。无论消息是 1 比特还是 100MB,单向散列函数都会计算出固定长度的散列值。

SHA-256 单向散列函数计算出的散列值的长度永远是 256比特(32字节)。

单向散列函数的性质:

  • 根据任意长度的消息计算出固定长度的散列值
  • 能够快速计算出散列值
  • 消息不同散列值也不同
  • 具备单向性:无法通过散列值反算出消息

单向散列函数的实际应用

  • 检测软件是否被篡改
    很多软件都会把通过单向散列函数计算出的散列值公布在自己的网站上。用户在下载到软件之后,可以自行计算散列值,然后与官网上的散列值进行对比。通过散列值,用户可以确认自己下载的文件与软件作者所提供的文件是否一致。
  • 基于口令的加密
    单向散列函数也被用于基于口令的加密(Password Based Encryption, PBE)。PBE 的原理是将口令和盐(salt,通过伪随机数生成器产生的随机值)混合后计算其散列值,然后将这个散列值用作加密的密钥。通过这样的方法能够防御针对口令的字典攻击。
  • 消息认证码:使用单向散列函数可以构造消息认证码。消息认证码是将发送者和接收者之间的共享密钥和消息进行混合后计算出的散列值。
  • 数字签名
  • 伪随机数生成器
  • 一次性口令

单向散列函数的具体例子

MD5

MD5 是 Rivest 设计的单向散列函数,能够产生 128 比特的散列值。MD5 的强抗碰撞性已经被攻破,现在已经能够产生具备相同散列值的两条不同消息,因此它不再安全。

MD 是消息摘要(Message Digest)的缩写。

SHA-1、SHA-256、SHA-384、SHA-512

SHA-1 是一种能够产生 160 比特的散列值的单向散列函数。1993 年被作为美国联邦信息处理标准规格发布的是 SHA。1995 年发布的修订版称为 SHA-1。SHA-1 除了用于保持兼容的目的外,其他情况不推荐使用。

SHA-256、SHA-384、SHA-512 的散列值长度分别为 256 比特、384 比特和512 比特。这些单向散列函数合起来统称 SHA-2。

SHA-1 的强抗碰撞性已被攻破,SHA-2 还尚未被攻破。

RIPEMD-160

RIPEMD-160 是一种能够产生 160 比特的散列值的单向散列函数。RIPEMD-160 是 欧盟 RIPE 项目所设计的 RIPEMD 单向散列函数的修订版。这一系列还包括 RIPEMD-128、RIPEMD-256、RIPEMD-320等。

RIPEMD的强抗碰撞性已被攻破,RIPEMD-160 尚未被攻破。比特币中使用的就是 RIPEMD-160。

SHA-3

用于取代 SHA-1 的 SHA-3 采用公开竞争的方式标准化,一个名叫 Keccak 的算法最终成为了 SHA-3。

打赏
  • Copyrights © 2017-2023 WSQ
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信