首页/安全/加密与证书速查/碰撞、前像与第二前像
加密算法基础95 条

碰撞、前像与第二前像

密码学哈希的三类安全性目标:抗前像、抗第二前像与抗碰撞;签名场景最依赖抗碰撞,口令散列最依赖抗前像与计算成本。

加密与证书速查安全更新于 2026-10-13

三类安全性目标

密码学哈希有三类安全性目标:抗前像(由摘要反推原文)、抗第二前像(给定一条消息找出另一条同摘要消息)、抗碰撞(自由构造两条同摘要消息)。前两类的最优攻击代价约为 2 的 n 次方,抗碰撞只有约 2 的 n/2 次方,因为生日攻击可以大幅降低搜寻成本。理解这组差异,才能判断「256 位哈希」在不同场景下分别意味着什么强度。

基本信息

抗前像最优攻击约 2^n,用于口令散列与承诺
抗第二前像最优攻击约 2^n,用于完整性校验
抗碰撞最优攻击约 2^(n/2),用于数字签名与证书
底线签名场景必须使用抗碰撞哈希,MD5 与 SHA-1 已不满足

典型使用场景

  • 证书与代码签名:依赖抗碰撞性,碰撞即等价于伪造
  • 下载校验:关注实际威胁模型,防篡改需要签名而非裸哈希
  • 口令存储:关注抗前像与计算成本,摘要长度不是主要矛盾
  • 内容寻址与去重:碰撞意味着两条不同内容互相覆盖
  • 摘要截断设计:截断会同时降低三类强度,需要重新评估

强度直观对照

强度直观对照
MD5     128 位输出,碰撞可在秒级构造,禁止用于签名
SHA-1   160 位输出,碰撞强度约 80 位,已被实际攻破
SHA-256 256 位输出,碰撞强度约 128 位
SHA-512 512 位输出,碰撞强度约 256 位

三类性质对照

性质攻击者目标强度上限依赖场景
抗前像由摘要反推原文等于输出长度口令散列、承诺
抗第二前像给定原文找同摘要消息等于输出长度完整性校验
抗碰撞自由构造两条同摘要消息约输出长度一半数字签名、证书
判断哈希是否够用要看输出长度与使用方式两方面:用于签名时必须具备抗碰撞性,而口令存储用的 Argon2、bcrypt、scrypt 主要靠计算成本与盐值,与摘要长度的关系弱得多。

评估思路

  • 签名与证书:按抗碰撞强度评估,输出长度至少 256 位
  • 口令存储:按抗前像与迭代成本评估,优先专用算法
  • 完整性校验:先明确威胁模型,哈希不提供来源认证
  • 短摘要使用:碰撞只需生日量级工作量,长度按数据规模估算
生日攻击的代价随数据量增长而下降:当同一条哈希下要产生大量条目时,碰撞概率会显著上升,去重与内容寻址类系统必须按规模重新核算。

易错点

  • 把「找不到碰撞」当成「无法伪造」:哈希不提供来源认证,任何人都能对伪造内容重算摘要
  • 用 MD5 或 SHA-1 做签名哈希:碰撞已被实际构造,签名的唯一性假设不再成立
  • 用短摘要做去重或内容寻址:碰撞会静默覆盖内容,长度要按数据规模与对抗强度估算
  • 忽略截断带来的强度下降:截断到 128 位后碰撞强度只剩约 64 位,需要重新评估
  • 认为长摘要可以弥补构造缺陷:输出再长也无法修复结构性缺陷,应关注算法本身是否仍被推荐

数据来源与参考

  • NIST SP 800-107 Rev.1
  • FIPS 180-4
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌