Feistel 与 SPN 结构
Feistel 网络与 SPN(置换网络)是分组密码的两大构造方式:Feistel 网络的轮函数不需要可逆,加解密可以共用同一份实现,DES、3DES、Blowfish、Camellia 属于这一类;SPN 每轮由可逆的 S 盒与线性层组成,扩散通常更快,AES 与 SM4 属于这一类。理解这两种结构,有助于判断实现复杂度与工作模式选择的取舍。
基本信息
| Feistel 网络 | 代表算法:DES、3DES、Blowfish、Camellia;轮函数无需可逆 |
|---|---|
| SPN 置换网络 | 代表算法:AES、SM4;每层必须可逆 |
| 加解密 | Feistel 加解密共用轮函数;SPN 需要逆运算,或选用只需加密方向的模式 |
| 工作模式影响 | CTR 与 GCM 等工作模式只需分组加密方向 |
| 实现成本 | Feistel 代码量通常更小,SPN 在硬件上扩散更快 |
典型使用场景
- 选择工作模式时判断是否必须实现分组解密
- 阅读算法实现时理解密钥编排与逆运算的作用
- 评估嵌入式实现的代码体积与性能取舍
- 教学与自测:对比两类结构的安全性分析方法
- 排查自定义加密实现无法解密的问题
实现层面的影响
实现层面的影响
Feistel:只需实现轮函数 F 与密钥编排,解密用同一份轮密钥逆序
SPN:需要实现逆 S 盒与逆线性层
# 采用 CTR 或 GCM 等工作模式时只需加密方向,可省掉逆运算实现
# 这也是很多新协议直接选用 AEAD 组合的原因之一结构对照
| 结构 | 代表算法 | 特点 |
|---|---|---|
| Feistel 网络 | DES、3DES、Blowfish、Camellia | 轮函数无需可逆,加解密电路可复用 |
| SPN 置换网络 | AES、SM4 | 每层必须可逆,扩散通常更快 |
| 实现复杂度 | Feistel 偏低、SPN 偏高 | 取决于是否需要解密方向 |
| 硬件视角 | 二者均有成熟实现 | SPN 更适合流水线化设计 |
采用 CTR 与 GCM 等工作模式时只需要分组加密方向,SPN 的逆运算实现可以省略,代码量与攻击面都会减少。这也是不少新协议优先选择 AEAD 组合的原因,而不单纯是为了性能。