Hash Collision 哈希碰撞

不同输入产生相同 hash 值的情况

为什么必然存在

Hash function 把任意长度输入压缩成固定长度(比如 SHA-256 输出 256 bit)。输入空间无限大、输出空间有限——鸽笼原理: 一定有不同输入撞到同一个 hash。

数学上必然,但好算法会让碰撞算不出来

安全意义

如果攻击者能主动构造碰撞,他可以:

  • 伪造数字签名(让两个文件签出一样的签名)
  • 伪造证书
  • 绕过文件完整性校验

已经”废”了的算法

算法状态故事
MD5完全破2008 年用碰撞伪造过 CA 证书
SHA-1完全破2017 Google “SHAttered” 公开造出碰撞
SHA-256 / SHA-3安全目前没人能造

防御措施: 用 SHA-256 或更强、加 [encryption|盐]