ECB 与 CBC:模式与 IV
演示 ECB 企鹅攻击,以及为何必须使用带随机 IV 的 CBC
ECB 与 CBC:模式与 IV 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
欢迎
ECB 和 CBC 是两种分组密码模式。ECB 因泄露模式而臭名昭著地不安全。使用随机 IV 的 CBC 安全性要高得多。下面深入理解二者。
ECB 模式:电子密码本
ECB 独立加密每个分组:Ci = AES(K, Pi)。相同的明文分组每次都会产生相同的密文分组。如果内容匹配,同一消息内或不同消息之间的分组也会完全相同。
ECB 企鹅
“ECB 企鹅”是一个经典演示:使用 AES-ECB 加密一张 Linux 企鹅 Tux 的 PNG 图像。输出结果仍然看起来像企鹅,因为相同颜色的区域会加密成相同的图案。
ECB 的漏洞:分组重放
在 ECB 模式中,攻击者无需知道密钥就可以重新排列密文分组:
- 分组彼此独立
- 重新排序分组 → 重新排序解密后的明文
- 复制分组 → 复制内容
- 删除分组 → 删除内容
CBC 模式:密码分组链接
CBC 会先将每个明文分组与前一个密文分组进行 XOR,然后再加密:
C0 = AES(K, P0 XOR IV)
Ci = AES(K, Pi XOR C(i-1))
相同的明文位于不同位置时,会产生不同的密文。
初始化向量(IV)
IV 就是第一个分组对应的“C(-1)”。它必须满足以下条件:
- 每条消息都随机且唯一
- 不需要保密(随密文一起传输)
- 绝不能与同一个密钥重复使用
可预测的 IV 会破坏 CBC 的安全性。
CBC 解密
Pi = AES_Dec(K, Ci) XOR C(i-1)
P0 = AES_Dec(K, C0) XOR IV
注意:解密第 i 个分组只需要 Ci 和 C(i-1)。分组可以并行解密(加密则不能这样做)。
CBC 位翻转攻击
翻转分组 Ci 中的第 i 位会导致:(1)Pi 变得乱码;(2)P(i+1) 中第 i 位发生可预测的翻转。在没有认证的情况下,攻击者可以修改特定的明文位,并且知道这些位的位置。
针对 TLS 1.0 的 BEAST 攻击(2011 年)
BEAST 利用了 TLS 1.0 使用带可预测 IV 的 CBC 这一点。上一条记录的最后一个分组被用作下一条记录的 IV。该攻击由 Rizzo 和 Duong 演示,并迫使浏览器升级到 TLS 1.1 及更高版本。
为什么 CBC 需要认证
不带 MAC 的 CBC 加密会允许位翻转攻击和填充预言机攻击。请始终将 CBC 与 HMAC 结合使用(Encrypt-then-MAC),或者切换到内置 AEAD 的 AES-GCM。
Python 中实际使用 CBC
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
import os
iv = os.urandom(16)
key = os.urandom(32)
cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
enc = cipher.encryptor()
ciphertext = enc.update(padded_plaintext) + enc.finalize()
快速检查
为什么 ECB 模式会泄露明文结构的信息?
回顾
ECB 很危险,CBC 更好但需要认证。接下来我们学习 CTR 模式——将 AES 转变为流密码。
常见问题解答
「ECB 与 CBC:模式与 IV」课时是免费的吗?
是的 — 「ECB 与 CBC:模式与 IV」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「ECB 与 CBC:模式与 IV」这节课中我会学到什么?
演示 ECB 企鹅攻击,以及为何必须使用带随机 IV 的 CBC 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「ECB 与 CBC:模式与 IV」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 分组密码基础与填充
- ECB 与 CBC:模式与 IV
- CTR 模式与流密码行为
- GCM 与认证加密