CFB 与 OFB 流式模式
CFB 与 OFB 是两种把分组密码当流密码用的历史模式:前者反馈密文,后者反馈加密输出。它们出现在早期协议与个别文件格式中,新协议中使用已明显减少。两者都没有完整性保护,且与计数器模式同属流式用法:在同一密钥下重复使用初始值会造成密钥流复用,危害比分组模式中初始值使用不当更严重。
基本信息
| 标准 | 分组密码工作模式标准 |
|---|---|
| CFB | 密文反馈,按段处理,段内错误影响后续段 |
| OFB | 输出反馈,错误不扩散,但初始值重用后果严重 |
| 完整性 | 两者均无 |
典型使用场景
- 兼容旧系统:读取早期协议或文件格式的加密数据
- 迁移评估:判断现有代码是否使用流式模式
- 排错:解密结果异常时核对段长与初始值
- 理解差异:观察流式用法的错误传播特点
- 禁用清单:新设计不再选用这两种模式
命令行示例
命令行示例
openssl enc -aes-256-cfb -pbkdf2 -salt -in plain.txt -out cfb.enc
openssl enc -aes-256-ofb -pbkdf2 -salt -in plain.txt -out ofb.enc
openssl enc -d -aes-256-cfb -pbkdf2 -in cfb.enc -out plain.out # 解密两种模式对照
| 维度 | CFB | OFB |
|---|---|---|
| 反馈对象 | 密文 | 加密输出 |
| 段长 | 可配置,影响效率与传播 | 不涉及段内切分 |
| 错误传播 | 段内错误影响后续 | 错误不扩散 |
| 初始值重用 | 后果严重 | 后果严重 |
CFB 与 OFB 与计数器模式同属流式用法:同一密钥下重复使用初始值会导致密钥流复用,后果比分组模式中初始值使用不当更严重。
落地建议
- 新设计改用认证加密模式
- 读取旧数据时确认段长与初始值来源
- 加密与认证分离的自研实现要单独审查
- 把这两种模式加入禁用清单
OFB 的错误不扩散容易被误认为更安全,但它同样没有完整性保护,密文被篡改后解密不会报错,只会得到错误明文。
这两种模式都属于「把分组密码当流密码用」的构造:不需要填充,可以逐段输出,但也因此少了分组模式里由填充与链接带来的结构性约束,初始值管理成为唯一的重复防护。