深入剖析CBC填充引发的安全漏洞
1. 冗余信息与生日悖论攻击
在CBC模式中,为了从 $y_{i - 1} \oplus y_{j - 1}$ 中恢复 $x_i$ 和 $x_j$,明文里存在一定冗余。不过,这种缺陷通常可忽略不计。因为密文块的分布往往与均匀分布难以区分,根据生日悖论定理,$N$ 个 $b$ 字块中出现两个相等块的概率为:
$p \approx 1 - e^{-\frac{1}{2}N^2W^{-b}}$
其中,$W$ 是可能的字的数量。当 $N$ 达到 $\sqrt{W^b}$ 数量级时,攻击会变得高效。例如,当 $b = 8$ 且 $W = 256$ 时,大约需要 235 字节(32GB)才能使该攻击的成功率达到 39%,而此攻击仅能泄露 16 字节的信息。
2. 认证限制
CBC 模式可用于创建消息认证码(MAC)。原始的 CBC - MAC(即将最后一个加密块作为 MAC)存在安全漏洞:已知三个消息 $m_1$、$m_2$、$m_3$ 的 MAC,其中 $m_2$ 是 $m_1$ 增加一个额外块得到的,那么就可以伪造第四个消息($m_3$ 增加一个额外块)的 MAC。通过对原始 CBC - MAC 进行重新加密可以修复这个问题,但新方案仍存在复杂度约为 $\sqrt{W^b}$ 的攻击。
3. 攻击方法
假设 $b$ 是块的字长,$W$ 是可能的字的数量,且 $W \geq b$,1 到 $b$ 之间的所有整数都能明确编码为字,以确保 CBC - PAD 方案可行。若一个块序列 $x_1, x_2, \cdots, x_N$ 的最后一个块 $x_N$ 以 $n$ 个值为 $n$ 的字串结尾