Feistel 网络:分组密码的结构基石
概述
Feistel 网络(Feistel Network)是现代分组密码最基础的结构设计之一。1973 年,Horst Feistel 在 IBM 工作时提出了这一结构,随后被应用于 DES(Data Encryption Standard)的设计中。半个多世纪后,Feistel 网络依然是分组密码设计的核心范式——SM4 采用的就是其非平衡变体。
核心洞察:Feistel 网络的最大优势在于加解密结构完全对称——只需将轮密钥倒序使用,即可实现解密,无需设计独立的解密函数。这一性质在工程实现中具有极高价值,特别是在资源受限的硬件环境(如智能卡、HSM)中。
数学结构:从信息论到构造原则
原始 Feistel 结构
设明文分组长为 $2n$ 位,分为左半部分 $L_0$ 和右半部分 $R_0$。每轮变换定义为:
$$L_i = R_{i-1}$$ $$R_i = L_{i-1} \oplus F(R_{i-1}, K_i)$$
其中:
- $F$ 是轮函数(Round Function),将 $n$ 位输入映射为 $n$ 位输出
- $K_i$ 是第 $i$ 轮的子密钥
- $\oplus$ 表示按位异或
为什么解密只需逆转密钥顺序?
这是 Feistel 结构最精妙之处。经过一轮变换后:
$$R_{i-1} = L_i \quad \text{(直接可得)}$$ $$L_{i-1} = R_i \oplus F(L_i, K_i) \quad \text{(因为 } F(R_{i-1}, K_i) = F(L_i, K_i) \text{)}$$
可见,只要已知 $L_i$、$R_i$ 和 $K_i$,就能无条件恢复 $L_{i-1}$、$R_{i-1}$。整个过程不依赖 $F$ 的可逆性,只要 $F$ 是普通函数即可。
与 SPN 的本质区别:SPN(Substitution-Permutation Network,如 AES)要求每一轮都可逆,因此加解密需要独立的逆变换电路。Feistel 则天然实现了加解密共享结构。
安全性分析:扩散与混淆
单轮的安全性边界
单轮 Feistel 网络不具备密码学安全性。攻击者只需观察一个明文-密文对,就能通过查询 $F$ 函数的输入输出关系,推断出 $F$ 的内部结构。
多轮的安全保证
Feistel 网络的安全性依赖于轮数。Luby 和 Rackoff 证明了:
- 3 轮 Feistel:在理想cipher模型下,达到大约 $2^{n/2}$ 的安全强度(Birthday bound)
- 4 轮及以上:可实现 IND-CPA(选择明文攻击下的不可区分性)
差分与线性特性传播
Feistel 网络的扩散特性较弱——每轮仅改变状态的一半。这意味着:
- 积分密码分析(Integral Cryptanalysis) 对 Feistel 结构特别有效
- 宽轨迹策略(Wide Trail Strategy) 在设计时需额外考虑
平衡 vs 非平衡 Feistel
平衡 Feistel(经典 DES)
- 状态分为等长的左右两半(各 64 位)
- 每轮只变换一半状态
- 优点:结构对称,易于硬件实现
- 缺点:扩散慢,需要更多轮数
非平衡 Feistel(SM4)
SM4 将 128 位状态分为 4 个 32 位字 $(X_0, X_1, X_2, X_3)$,每轮更新一个字:
$$X_i = X_{i-4} \oplus T(X_{i-3} \oplus X_{i-2} \oplus X_{i-1} \oplus K_i)$$
其中 $T$ 是复合变换(S盒 + 线性变换)。
优势:
- 每轮参与更多字,扩散更快
- 4 轮即可完成完整的状态混合(vs 平衡结构的 8 轮+)
- 保持了解密的对称性
广义 Feistel 网络(GFN)
现代设计中还出现多种变体:
- GFSbox:每轮使用多个 S 盒
- Even-Mansour 结构:结合外密钥的 Feistel 变体
- ARX 结构:用加法、旋转、异或替代 S 盒
与国密 SM4 的设计关联
SM4 的结构特点
SM4 是典型的中国国家标准分组密码,采用非平衡 Feistel 结构:
| 参数 | 值 |
|---|---|
| 分组长度 | 128 位 |
| 密钥长度 | 128 位 |
| 轮数 | 32 轮 |
| 轮密钥 | 32 个子密钥 $K_0 \sim K_{31}$ |
| 结构类型 | 非平衡 Feistel(4 字迭代) |
为什么 SM4 不采用经典平衡 Feistel?
- 扩散需求:物联网场景需要更快的扩散速度
- 硬件效率:32 位字对齐,便于 ARM/MIPS 架构
- 侧信道防护:非平衡结构更易于实现掩码防护
SM4 的 S 盒设计
SM4 的 S 盒是基于有限域 $GF(2^8)$ 上的逆函数构造的,与 AES 的 S 盒设计思路相同:
$$S(x) = A + M \cdot x^{-1}$$
其中 $x^{-1}$ 是在 $GF(2^8)$ 上的乘法逆元,$A$ 是常数,$M$ 是线性变换矩阵。这种设计保证了良好的差分均匀性和线性偏差。
现代密码学中的 Feistel 遗产
仍在使用的 Feistel 密码
| 算法 | 结构 | 状态 |
|---|---|---|
| DES | 平衡 Feistel,16 轮 | 已退役 |
| 3DES | 平衡 Feistel,48 轮(等效) | 逐渐淘汰 |
| SM4 | 非平衡 Feistel,32 轮 | 现行标准 |
| Blowfish | 平衡 Feistel,16 轮 | 活跃 |
| Twofish | 平衡 Feistel,16 轮 | 活跃 |
| CAST-128 | 平衡 Feistel,16 轮 | 活跃 |
Feistel 的局限与演进
尽管 Feistel 结构有诸多优势,但在以下场景存在局限:
- 认证加密:AEAD 模式(如 GCM)需要不同的结构范式
- 哈希函数: sponge 结构(SHA-3/Keccak)更适合哈希
- 后量子密码:格密码多采用 LWE 结构,与 Feistel 无关
总结
Feistel 网络的核心价值在于加解密对称性——这一性质在资源受限环境中具有不可替代的工程优势。SM4 等非平衡变体进一步证明了该结构在现代密码设计中的生命力。
理解 Feistel 网络,是理解现代分组密码设计思想的关键一步。无论是分析旧算法的安全强度,还是设计新的密码原语,Feistel 的基本原理都是不可或缺的分析工具。
相关实践
- SM4 分组密码算法深度解析 — SM4 的非平衡 Feistel 结构详细实现
- 密码学基础概念 — 分组密码的结构分类总览
- 格式保留加密(FPE) — FF1/FF3-1 工作模式中的 Feistel 应用
参考
- Horst Feistel, "Cryptography and Data Security", Plenum Press, 1973
- GB/T 32907-2016《信息安全技术 SM4 分组密码算法》
- NIST FIPS 46-3, "Data Encryption Standard" (archived)
- Daemen and Vincent Rijmen, "The Design of Rijndael", Springer, 2002