密码攻击方法总结¶
一、攻击模式分类¶
在密码学分析中,一般假设攻击者知道密码学算法。根据攻击者获取信息的多少,攻击模式分为以下几类:
- 唯密文攻击 (Ciphertext-Only Attack):攻击者仅能获得加密过的密文。
- 已知明文攻击 (Known-Plaintext Attack):攻击者有一些密文对应的明文。
- 选择明文攻击 (Chosen-Plaintext Attack):攻击者可以选择明文并获取加密后的密文。如果在攻击中途可以根据已获取信息选择新的明文,则称为**适应性选择明文攻击**。
- 选择密文攻击 (Chosen-Ciphertext Attack):攻击者可以选择密文并获取解密后的明文。同理有**适应性选择密文攻击**。
- 相关密钥攻击 (Related-Key Attack):攻击者可以获得两个或多个相关密钥的加解密结果,但不知道密钥本身。
二、常见攻击方法¶
- 暴力攻击
- 中间相遇攻击
- 线性分析
- 差分分析
- 不可能差分分析
- 积分攻击
- 代数分析
- 相关密钥攻击
- 侧信道攻击
三、中间相遇攻击 (Meet-in-the-Middle Attack)¶
原理¶
中间相遇攻击是一种以空间换取时间的攻击方法,由 Diffie 与 Hellman 于 1977 年提出。
假设 \(E\) 和 \(D\) 分别是加密函数和解密函数,\(k_1\) 和 \(k_2\) 分别是两次加密使用的密钥:
\[
C = E_{k_2}(E_{k_1}(P))
\]
\[
P = D_{k_1}(D_{k_2}(C))
\]
可推出:
\[
E_{k_1}(P) = D_{k_2}(C)
\]
攻击步骤(已知一对明密文时): 1. 枚举所有 \(k_1\),将 \(P\) 的所有加密结果存储并排序。 2. 枚举所有 \(k_2\),将 \(C\) 解密得到 \(C_1\),在第一步结果中搜索 \(C_1\),若匹配则可能找到正确的 \(k_1\) 和 \(k_2\)。 3. 可再用其他明密文对验证结果。
假设 \(k_1\) 和 \(k_2\) 的密钥长度都为 \(n\),暴力枚举需要 \(O(2^{2n})\),中间相遇攻击只需 \(O(n \cdot 2^n)\) 的复杂度。
典型应用¶
- 双重 DES 攻击:2DES 无法抵抗中间相遇攻击。
四、比特攻击 (Bit Attack)¶
原理¶
利用加密算法中比特位之间的关系进行攻击。通常通过分析加密过程中每个比特位的变换关系,推导密钥位或缩小密钥搜索空间。
核心思路:将块加密的处理过程分解到比特级别,分析每一轮中比特的输入输出关系,利用这些关系逐步恢复密钥信息。
例如在基于 Feistel 结构的块加密中: - 将 64 位块分为高 32 位和低 32 位 - 分析 swap 和 transduce 操作的比特级影响 - 分别枚举高 32 位密钥和低 32 位密钥,利用中间相遇降低复杂度