402 字
2 分钟
分组密码:混淆、扩散与 Feistel / SPN 结构
分组密码以固定长度的数据块为单位进行变换,是对称密码的核心构件之一。DES 和 AES 都属于分组密码,但采用了不同的内部结构。
两个设计目标
混淆(Confusion)
混淆让密钥、明文和密文之间的关系尽量复杂,降低攻击者从输入输出推导密钥的能力。典型组件是 S 盒:通过非线性查表引入非线性。
扩散(Diffusion)
扩散让一个明文比特或密钥比特的变化影响更多输出位,形成雪崩效应。置换、线性变换和列混合等操作都服务于扩散。
理解方式可以把混淆理解为“关系难以预测”,把扩散理解为“影响尽可能传播开”。安全的分组密码需要两者多轮配合。
两类经典结构
| 结构 | 核心思路 | 代表算法 |
|---|---|---|
| Feistel 网络 | 分组左右拆分,轮函数只作用于一侧后再交换 | DES |
| SPN(代换—置换网络) | 多轮 S 盒代换与线性置换 | AES |
Feistel 的一个优点是加密和解密可以复用相近的结构,仅需调整子密钥顺序;SPN 则通过多轮非线性代换与扩散层累积安全性。
使用时的边界
分组密码描述的是底层原语,而不是完整安全方案。实际加密还需要安全的工作模式、随机数或 nonce,以及完整性保护。应使用 AES-GCM 等认证加密模式,而不要手动拼接加密流程。
分组密码:混淆、扩散与 Feistel / SPN 结构
https://blog.xqcherry.top/posts/cryptography/block-ciphers/