ECB(Electronic Codebook)
ECB 对每个 plaintext block 独立执行 block-cipher transform,不需要 IV 且易并行,但相同明文块会产生相同密文块并泄露结构,因此不适合一般多块消息的机密性保护。
[!info] related notes
ECB(Electronic Codebook)
一句话定义
ECB 是最直接的 block-cipher mode:
C_i = E_K(P_i)
P_i = D_K(C_i)
每个 block 独立处理。
最大问题:确定性模式泄露
只要:
P_i = P_j
在同一个 key 下就有:
C_i = C_j
因此 attacker 即使不知道 plaintext,也能看出:
- 哪些 block 相同;
- 数据重复结构;
- 图像/格式轮廓;
- 某些固定记录模式。
这不是 block cipher 本身被破解,而是:
mode 没有把不同 block 的上下文/位置混进去。
IV
ECB 没有 IV / nonce。
这也是它无法随机化相同 plaintext block 的直接原因。
并行性
由于 block 独立:
- encryption 可以并行;
- decryption 可以并行;
- random access 简单。
这些是工程优点,但无法抵消一般消息 confidentiality 的模式泄露。
Padding
如果底层 block cipher 只接受完整 block,而 plaintext 长度不是 block size 整数倍,仍然需要 padding 或上层长度处理。
因此:
ECB 无 IV
≠ ECB 不需要 padding
这是两个不同问题。
Error Propagation
某个 ciphertext block 传输损坏时,通常只影响对应 plaintext block。
不会像 chaining mode 那样把错误传播到后续 block。
这种性质在历史通信系统里有价值,但现代协议通常更关心 authentication failure,而不是“错误后继续解密”。
ECB 不提供 Authentication
即使 attacker 看不懂 plaintext,仍可以:
- 删除 block;
- 复制 block;
- 重排 block;
- 替换已知 block。
ECB 本身不会检测这些修改。
所以:
confidentiality 和 integrity/authentication 是不同安全目标。
什么时候还能遇到 ECB
今天仍可能在:
- 教材;
- legacy system;
- 某些底层单块 primitive;
- 已有格式兼容;
中遇到 ECB。
但对于一般多块 message encryption,新设计不应把 ECB 当作默认选择。
ECB 与 AEAD
现代应用通常更希望:
plaintext + nonce + AAD
→ AEAD
→ ciphertext + tag
而不是:
plaintext blocks
→ ECB
AEAD 同时解决 confidentiality 和 authentication。
常见误区
AES 很强,所以 AES-ECB 也安全
错误。Primitive 安全不代表 mode 使用安全。
ECB 不用 IV,所以更简单也更可靠
简单是真的,消息结构泄露也是真的。
ECB ciphertext 看不懂,所以完整性也有保护
错误。ECB 不提供 authentication。
学习检查
- 为什么 ECB 中相同 plaintext block 会产生相同 ciphertext block?
- 这种确定性为什么会泄露结构,即使 attacker 仍无法直接解密?
- ECB 为什么不需要 IV,却仍可能需要 padding?
- ECB 的并行性来自什么?
- 为什么 AES-ECB 的问题不等于 AES primitive 被破解?
- ECB 为什么不能检测 block 删除、复制或重排?
- 一般新系统为什么更倾向 AEAD?