Block Cipher Modes of Operation
比较 ECB、CBC、CFB、OFB、CTR 如何把固定长度 block cipher 扩展为消息级 confidentiality,并从 IV/nonce、并行性、padding、错误传播与认证边界解释为什么现代新系统通常优先选择 AEAD。
[!info] related notes
Block Cipher Modes of Operation
一句话关系
Block cipher 只处理固定大小 block。
Mode of operation 决定:
怎样把一个 block cipher 组合成能处理多 block / 任意长度消息的 confidentiality scheme。
NIST SP 800-38A 定义了五个经典 confidentiality modes:
- ECB;
- CBC;
- CFB;
- OFB;
- CTR。
这些模式本身主要解决 confidentiality,不自动提供完整的 message authentication。
为什么需要 Mode
以 AES 为例:
AES primitive
→ 只定义 128-bit block transform
真实消息可能:
- 1 byte;
- 4 KB;
- 4 GB。
Mode 负责定义:
- block chaining;
- IV / nonce;
- padding;
- parallelization;
- error propagation;
- repeated-message behavior。
因此:
AES
≠ AES mode
≠ AEAD protocol
ECB
关系:
P_i → E_K → C_i
每块完全独立。
特点:
- 无 IV;
- encryption/decryption 可并行;
- 相同 plaintext block → 相同 ciphertext block;
- 会泄露结构与重复模式。
因此不适合一般多块消息加密。
详见 ECB。
CBC
关系:
P_i xor C_(i-1)
→ E_K
→ C_i
首块使用 IV。
特点:
- 需要 unpredictable IV;
- encryption 顺序依赖;
- decryption 可利用已知 ciphertext blocks 并行;
- block cipher 场景通常需要 padding;
- 不提供 authentication;
- 错误处理不当可能形成 padding oracle。
详见 CBC。
CFB
CFB 使用 block cipher encryption primitive 产生 keystream-like output,再与 plaintext segment XOR。
特点:
- 可按 segment 处理;
- 不需要 block padding;
- 需要正确 IV;
- encryption 存在 feedback dependency;
- 具有 self-synchronizing 特征;
- 不提供 authentication。
详见 CFB。
OFB
OFB 把 block cipher 输出反馈回下一轮,生成 keystream。
plaintext/ciphertext 本身不进入 feedback state。
特点:
- 不需要 padding;
- transmission bit error 通常只影响对应 plaintext bit;
- nonce/IV reuse 会导致 keystream reuse 问题;
- 不提供 authentication。
OFB 更像 synchronous stream mode。
CTR
CTR 对不断变化的 counter block 做 block-cipher encryption,生成 keystream:
counter_i
→ E_K
→ keystream_i
xor plaintext_i
→ ciphertext_i
特点:
- encryption/decryption 都高度可并行;
- 不需要 padding;
- 支持 random access;
- 同一个 key 下 counter/nonce 输入绝不能重复;
- 不提供 authentication。
CTR 是很多现代构造的重要基础思想之一。
比较表
| Mode | IV/Nonce | Padding | 加密并行 | 解密并行 | Pattern Leakage | Authentication |
|---|---|---|---|---|---|---|
| ECB | 无 | 通常需要 | 是 | 是 | 严重 | 否 |
| CBC | unpredictable IV | 通常需要 | 否 | 可以 | 降低 | 否 |
| CFB | IV | 否 | 通常否 | 可部分/按实现 | 降低 | 否 |
| OFB | unique IV/nonce | 否 | keystream 可预计算 | 同左 | 降低 | 否 |
| CTR | unique counter/nonce | 否 | 是 | 是 | 降低 | 否 |
具体 IV/nonce 要求必须以目标算法和标准为准,不要把“随机”“唯一”“不可预测”当成所有模式统一规则。
Confidentiality ≠ Authentication
ECB/CBC/CFB/OFB/CTR 在 SP 800-38A 中属于 confidentiality modes。
即使 ciphertext 看不懂,攻击者仍可能:
- bit flip;
- reorder;
- truncate;
- replay;
- 利用 error oracle。
因此现代应用通常更希望直接使用:
例如:
- AES-GCM;
- ChaCha20-Poly1305。
Encrypt-then-MAC
在 legacy protocol 中,也可以正确设计:
encryption
→ MAC over ciphertext + metadata
但这种组合需要严格处理:
- key separation;
- coverage;
- verification order;
- error behavior。
如果平台已经提供成熟 AEAD,通常不应自己重新组合 legacy mode + MAC。
Error Propagation
模式不同,ciphertext bit error 对 plaintext 的影响不同。
这在老式 noisy communication 场景曾很重要。
现代网络通常已有:
- link integrity;
- retransmission;
- AEAD authentication。
所以今天选 mode 时,更核心的是:
- nonce safety;
- authentication;
- protocol support;
- implementation quality。
现代选型
新系统的一般方向:
block cipher primitive
→ standardized AEAD mode
→ protocol-managed nonce/key lifecycle
而不是:
“从 ECB/CBC/CFB 中挑一个看起来最安全的”。
这些 legacy confidentiality modes 仍然重要,因为:
- 需要理解历史协议;
- 需要读旧系统;
- 帮助理解 AEAD 为什么出现;
- 有些标准/格式仍会遇到。
学习检查
- 为什么 AES 本体不能直接处理任意长度消息?
- ECB 最大的问题为什么不是“加密算法弱”,而是 mode 泄露结构?
- CBC 为什么需要 IV,而且 IV 要求不能被简单概括为“保密”?
- CFB 为什么看起来像 stream cipher,却仍建立在 block cipher 上?
- CTR nonce/counter reuse 为什么会严重破坏 confidentiality?
- 为什么 SP 800-38A 这些经典 mode 不能单独提供现代消息认证?
- AEAD 相比 CBC/CTR + 自己拼 MAC 的工程优势是什么?