密码体系五 - 散列函数

(25) 2024-02-14 18:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说密码体系五 - 散列函数,希望能够帮助你!!!。

在开篇的时候,我们说过密钥体系主要解决三个问题:

  • 机密性(第三者无法通过密文猜测出明文)
  • 完整性(第三者无法篡改原文内容)
  • 不可否认性(第三者不能冒充其他人发送消息)

我们前面介绍的对称密码和非对称密码解决的是机密性,也就是确保 Eve 即便截获到密文,也无法猜测出 Alice 和 Bob 传递的是啥内容。

但有的时候,Eve 并非需要激活成功教程消息。 比如 Alice 辛辛苦苦写了一个程序,Eve 晚上偷偷在程序后面追加了一些代码。 第二天 ALice 将被替换的程序发给了 Bob。 虽然 Eve 没有截获任何密钥,但事实上也破坏了 Alice 和 Bob 之间的信任关系。

所以密钥体系仍然需要解决完整性,即第三者无法篡改原文内容。

本文我们将介绍第一种方式: 散列函数。

何为散列函数

散列函数是一个单向计算函数,只有一个输入和对应的输出。f(x)=y

其中x称为消息, 而y则称为散列值。 f(x)=y可以跟进消息内容计算出对应的散列值,而我们就可以通过散列值来检查信息的完整性。

并不是什么数学函数都可以当作散列函数的, 想要成为一个合格工业级散列函数,必须具备以下特征:

  • 固定长度的散列值

无论x是多长的消息,单向散列函数必须能够生成固定长度的y(散列值)。比如SHA-256它所计算出来的散列值永远是 256 比特。

  • 计算速度非常快

当然快是相对的,尽管随着x的变大,计算时间势必会加长。但如果不能在现实的时间内计算出来,那么就丧失实际应用的价值了。

  • 散列值的唯一性

散列值的唯一性称之为抗碰撞性。也就是只要x不同那么计算出来的y一定不能相同。抗碰撞性分为两类: 强抗碰撞性弱抗碰撞性

弱抗碰撞性指的是x确定,那么y也就确定。 此时找到一个散列值等于yx是非常困难的

密码体系五 - 散列函数_https://bianchenghao6.com/blog__第1张

弱抗碰撞性对应的是强抗碰撞性强抗碰撞性指的是在茫茫数据集中,指定任意一个y,找到 x 和 x' 是非常困难的

密码体系五 - 散列函数_https://bianchenghao6.com/blog__第2张

一个合格的散列函数,必须同时具备强抗碰撞性弱抗碰撞性

  • 单向性

根据x可以计算出y,但无法根据y反推出x

密码体系五 - 散列函数_https://bianchenghao6.com/blog__第3张

在一些场合中,单向散列函数也称之为"消息摘要函数"、"哈希函数"和"杂凑函数". 计算出的散列值也称之为"消息摘要"或者"指纹"。

常用的散列函数

  • MD4/5

MD 是消息摘要(Message Digest)的缩写。 常用的是 MD5,目前 MD5 已经被证实强抗碰撞性是不安全的,即根据 md5 的算法,现在已经可以产生具有相同y的两个不同x了。所以在安全性高的场合中,不建议使用 md5。

  • SHA-1/256/384/512

这是一个系列。后面的数字表示y的长度(SHA-1 除外)。 SHA-1 已经被证实强抗碰撞性是不安全的,而 SHA-256/384/512 仍未被攻破,所以后面这三个仍可以使用。后面这三类统称SHA-2

  • SHA-3

算法和 SHA-2 已经完全不一样了。 SHA-3 使用的是Keccak算法。Keccak算法理论上可以生成任意长度的散列值,目前在 SHA-3 规范中规定了SHA3-224\256\384\512这四种版本。Keccak使用的是一种称之为海绵结构的分组算法,大意是将x进行分组,然后每个分组计算生成y',再将y'作为输入和下一个明文分组一起计算。

  • RIPEMD-160

这个算法系列有两个版本: RIPEMD 和 RIPEMD-160。 其中 RIPEMD 已经被证实强抗碰撞性是不安全的。但 RIPEMD-160 仍然是安全的。

散列函数常用场景

  • 口令加密
  • 消息认证码
  • 数字签名
  • 伪随机数生成器
  • 一次性口令

散列函数无法解决的问题

散列函数只能确保信息内容不被篡改,而无法保证消息一定是从合法渠道发来的。 例如 Eve 可以伪装成 Alice 向 Bob 发送消息和对应的散列值。 Bob 接受到消息和散列值后,如果校验一致,那么也只能证明消息没有经过篡改,而无法证明消息是 Alice 发来的。

而为了解决这个问题,就需要同时使用散列值和数字签名了。

密码体系五 - 散列函数_https://bianchenghao6.com/blog__第4张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复