CFB(Cipher Feedback)
CFB 使用 block cipher 的 encryption primitive 和前一段 ciphertext/IV 生成 keystream-like 输出,与 plaintext segment 异或后反馈 ciphertext;它无需 padding、具有 self-synchronizing 特征,但只提供 confidentiality,不提供 authentication。
[!info] related notes
CFB(Cipher Feedback)
一句话定义
CFB 把 block cipher 用成一种 feedback-based stream-like mode。
核心思路:
previous ciphertext / IV
→ block-cipher encryption
→ keystream segment
XOR plaintext segment
→ ciphertext segment
然后 ciphertext 再反馈进下一轮状态。
CFB 不是独立 Stream Cipher
CFB 可以按 bit、byte 或 block segment 处理数据,因此表现很像 stream cipher。
但它仍然依赖底层 block cipher,例如:
- AES;
- 历史 DES。
所以:
CFB 是 block-cipher mode,不是 ChaCha20 这类独立 stream cipher primitive。
Segment Size
CFB 可以定义不同 segment size,例如:
- CFB-8;
- CFB-128;
具体名称和支持情况取决于 library/protocol。
segment size 会影响:
- throughput;
- feedback granularity;
- error propagation;
- interoperability。
不能只写“CFB 按字节工作”。
IV
第一轮没有前一段 ciphertext,因此需要 IV。
对 CFB,经典标准要求 IV 满足不可预测性要求。
IV 通常不需要保密,但必须按目标标准正确生成。
No Padding
CFB 可以处理小于 block size 的 segment。
因此它不像 CBC 那样必须通过 block padding 才能处理任意长度 plaintext。
这曾使它适合某些流式/交互式历史场景。
Feedback Dependency
Encryption 时:
current ciphertext
→ influences future state
因此存在 sequential dependency。
这使它不像 CTR 那样天然高度并行。
解密端因为 ciphertext 已知,一些实现可以提前处理相关 block-cipher operation,但 CFB 仍是 feedback-oriented mode。
Self-Synchronizing
CFB 的一个经典特点是 self-synchronization。
如果传输中出现有限错位/损坏,错误 ciphertext 随着 shift register 被逐步移出状态后,后续解密可以重新同步。
恢复距离取决于:
- block size;
- segment size;
- 错误类型。
不要把它简化成“错一个 byte,后面一定固定错 N 个 byte”。
Error Propagation
某个 ciphertext segment 发生 bit error:
- 当前 plaintext segment 对应 bit 会受影响;
- 错误 ciphertext 进入 feedback state;
- 后续若干 segment 也可能被扰乱;
- 当错误移出 state 后恢复。
这与 OFB/CTR 的错误传播方式不同。
CFB 不提供 Authentication
CFB 主要提供 confidentiality。
它不能独立保证:
- message integrity;
- sender authenticity;
- anti-replay。
attacker 仍可能对 ciphertext 做主动修改。
因此新协议通常更倾向直接使用 AEAD。
CFB 与 OFB / CTR
CFB
ciphertext 参与 feedback。
OFB
block-cipher output 反馈,不把 ciphertext 反馈进 state。
CTR
counter input 独立生成 keystream block。
因此:
- CFB 更偏 self-synchronizing;
- OFB/CTR 更偏 synchronous keystream;
- CTR 更容易并行/random access。
整体比较见 Block Cipher Modes of Operation。
CFB 在今天的位置
CFB 仍会出现在:
- legacy protocol;
- 旧文件格式;
- 旧 crypto API;
- 教材。
新设计不应仅因为“不需要 padding”就优先选择 CFB。
现代设计通常更关心:
- authenticated encryption;
- nonce discipline;
- misuse resistance;
- mature protocol support。
常见误区
CFB 就是 Stream Cipher
不准确。它是 block cipher 的 feedback mode。
CFB 不需要 padding,所以比 CBC 一定安全
错误。padding 只是一个维度;CFB 仍缺 authentication。
自同步 = 自动恢复所有攻击
错误。它描述 transmission state recovery,不是 security authentication。
IV 公开,所以可以固定为 0
错误。公开与可预测/重复是不同安全属性。
学习检查
- CFB 为什么表现得像 stream cipher,却仍属于 block-cipher mode?
- CFB segment size 会影响哪些行为?
- CFB 为什么不需要 block padding?
- ciphertext feedback 为什么导致顺序依赖?
- self-synchronizing 真正描述什么?
- CFB 与 OFB 的 feedback source 有什么不同?
- CFB 为什么不能提供 message authentication?
- 新系统为什么通常优先考虑 AEAD 而不是 CFB?