两类密码的差异
分组密码按固定长度的块处理数据,通常需要填充,把长数据切块后逐块变换;流密码按位或字节生成密钥流,与明文逐位异或得到密文。两者的错误传播、并行能力与完整性设计都不同:分组模式中 CBC 的错误会扩散、CTR 不会,流密码的错误位置对应且不扩散,但两者在缺失认证时都不提供完整性保护。
基本信息
| 分组密码 | AES、SM4、DES/3DES,按块处理 |
|---|---|
| 流密码 | ChaCha20、ZUC、RC4,按位或字节处理 |
| 填充 | 分组模式需要,流模式不需要 |
| 完整性 | 两者都需另加认证或使用认证加密模式 |
典型使用场景
- 网络协议选型:优先使用认证加密模式而非裸模式
- 磁盘与块设备加密:使用不需要认证的专用模式,靠上层校验
- 嵌入式与无加速设备:优先选择软件实现效率高的流密码
- 移动通信:使用标准规定的流密码算法
- 迁移评估:判断现有代码是按块还是按流处理的
选型参考
选型参考
网络协议:认证加密(AES-GCM、ChaCha20-Poly1305、SM4-GCM)
磁盘与块设备:XTS(不含认证,靠上层校验)
嵌入式无 AES 加速:ChaCha20-Poly1305
移动通信:ZUC 系列算法两类密码对照
| 维度 | 分组密码 | 流密码 |
|---|---|---|
| 处理单位 | 固定分组(64 或 128 位) | 位或字节流 |
| 是否需要填充 | 需要(CBC、ECB 等) | 不需要 |
| 错误传播 | CBC 扩散,CTR 不扩散 | 位置对应,不扩散 |
| 并行与随机访问 | CTR 与 GCM 可并行 | 可并行 |
流式用法(CTR、CFB、OFB)在同一密钥下重复使用初始值或计数器,会直接造成密钥流复用;这类错误的危害比 CBC 中初始值使用不当更严重。
选型检查项
- 协议是否要求认证:要求认证就选认证加密模式
- 是否需要在任意位置随机读取:需要则选 CTR 或流密码类构造
- 是否有硬件加速:有 AES 加速时优先分组算法
- 密钥与初始值如何管理:必须确认唯一性与生命周期
现代协议普遍把加密与认证封装成认证加密模式;裸用分组或流密码时必须自行处理初始值管理、填充与完整性校验,出错概率高。