SHA-1 哈希算法的碰撞攻击原理与实例分析(深入版)
字数 2196 2025-12-23 01:22:35
SHA-1 哈希算法的碰撞攻击原理与实例分析(深入版)
我将为您讲解 SHA-1 碰撞攻击的核心原理,并结合实际案例(如 SHAttered 攻击)逐步分析。请注意,您之前已了解过 SHA-1 的轮函数、消息扩展等基础,这里将专注攻击本身。
1. 背景知识回顾
- SHA-1 输出:160 位(20 字节)哈希值。
- 碰撞攻击目标:找到两个不同的消息 \(M \neq M'\),使 \(\text{SHA-1}(M) = \text{SHA-1}(M')\)。
- 理论破解意义:2017 年 Google 与 CWI 研究所首次公开实际碰撞(SHAttered 攻击),证明 SHA-1 已不安全。
2. 攻击核心思想:差分分析
碰撞攻击基于差分路径(Differential Path):
- 构造消息对:选择两个消息 \(M\) 和 \(M'\),初始存在微小差异(例如几个比特不同)。
- 控制差异传播:通过精心设计差异,使消息在压缩函数处理过程中,中间状态的差异逐步抵消,最终输出相同哈希值。
- 关键工具:利用 SHA-1 的消息扩展线性特性与轮函数非线性运算的弱点,寻找高概率差分路径。
3. 攻击步骤分解
步骤1:选择差分路径
- 攻击者预先计算一条差分路径,描述每轮迭代中内部状态(5 个 32 位变量 \(A, B, C, D, E\))的比特差异如何变化。
- 例如:初始差异 \(\Delta A_0, \dots, \Delta E_0\) 被设定,后续轮次差异需满足充分条件(Sufficient Conditions),确保差异按路径传播。
步骤2:消息修改技术
- 为满足差分路径的条件,攻击者动态调整 \(M\) 的某些比特(例如修改消息分组中的特定字),而不改变哈希输出差异。
- 常用方法:消息修改(Message Modification),通过局部调整使中间状态满足路径约束,提高攻击成功率。
步骤3:寻找碰撞块
SHA-1 的碰撞通常针对多分组消息:
- 选择一个前缀(Prefix),计算其哈希状态 \(H_{\text{pre}}\)。
- 找到两个不同的碰撞块 \(B_1\) 和 \(B_1'\),使得:
\[ \text{Compress}(H_{\text{pre}}, B_1) = \text{Compress}(H_{\text{pre}}, B_1') \]
- 如果单块碰撞失败,可扩展为多块碰撞(如 SHAttered 使用两个连续碰撞块)。
4. 实例:SHAttered 攻击(2017)
攻击设置
- 攻击者生成两个不同的 PDF 文件,内容视觉不同但哈希相同。
- 核心:构造两个 512 位(64 字节)消息块 \(M_1, M_1'\) 和 \(M_2, M_2'\),满足:
\[ \text{SHA-1}(\text{Prefix} \| M_1 \| M_2) = \text{SHA-1}(\text{Prefix} \| M_1' \| M_2') \]
- 前缀:PDF 文件头(相同部分)。
差分路径细节
-
第一块碰撞:
- 在 \(M_1\) 和 \(M_1'\) 中引入初始差异(例如在第 10 字节设置差异)。
- 通过差分路径控制差异传播,使处理完 \(M_1\) 和 \(M_1'\) 后,输出中间哈希值 \(H_1\) 和 \(H_1'\) 存在可控差异(而非完全相等)。
-
第二块抵消:
- 设计 \(M_2\) 和 \(M_2'\),使它们在前一区块输出的差异 \(H_1 \neq H_1'\) 基础上,经过压缩后差异抵消,最终 \(H_2 = H_2'\)。
- 这利用了 SHA-1 的线性消息扩展弱点,使得第二块可校正剩余差异。
计算复杂度
- SHAttered 攻击需约 \(2^{63.1}\) 次 SHA-1 计算,远低于暴力碰撞的 \(2^{80}\)。
- 实际耗时:Google 团队用了 6500 CPU 年 + 110 GPU 年。
5. 碰撞攻击的危害
- 伪造数字签名:若文档使用 SHA-1 签名,攻击者可构造两个内容不同但哈希相同的文件,使合法签名对恶意文件也有效。
- 欺骗文件系统:例如 Git 使用 SHA-1 标识代码版本,碰撞可注入恶意代码而不改变哈希值。
- 证书伪造:CA 证书哈希碰撞可导致伪证书被信任。
6. 防御与替代方案
- 停用 SHA-1:多数安全协议(如 TLS、PGP)已强制禁用 SHA-1。
- 迁移至 SHA-256 或 SHA-3:这些算法目前无可行碰撞攻击。
- 检测碰撞前缀:可通过在哈希输入中添加随机盐(Salt)破坏固定前缀攻击。
7. 思考延伸
- 为什么 SHA-256 更难碰撞?因其内部状态更大(256 位)、轮数更多(64 轮)且消息扩展非线性更强。
- 攻击启示:哈希函数设计需抵抗差分分析,包括强化消息扩展的非线性、增加轮数、优化常数设计。
通过以上步骤,您可理解 SHA-1 碰撞攻击如何从理论差分路径发展到 SHAttered 实际攻击,以及其对密码学应用的深远影响。