首页/安全/加密与证书速查/Feistel 结构与 SPN 结构
加密算法基础95 条

Feistel 结构与 SPN 结构

分组密码的两大构造方式:Feistel 网络(DES/3DES/Blowfish/Camellia)加解密共用轮函数;SPN 置换网络(AES/SM4)每轮由可逆 S 盒与线性层组成。

加密与证书速查安全更新于 2026-10-13

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 组合的原因,而不单纯是为了性能。

易错点

  • 给 SPN 设计不可逆的层 → 根本无法解密,问题出在结构层面而非参数
  • Feistel 的密钥编排忽略逆序 → 解密结果错误,且很难察觉是轮密钥顺序问题
  • 认为 Feistel 一定比 SPN 弱 → 安全性取决于轮数与设计而非结构类型
  • 自定义实现时省略密钥编排细节 → 加解密不一致,只在小概率数据上暴露问题

数据来源与参考

  • FIPS 197(AES 结构)
  • NIST SP 800-67 Rev.2(TDEA 结构)
  • GB/T 32907-2016
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌