Feistel 网络 (费斯妥, Feistel 结构, Feistel 密码)
Feistel 密码 是用于构造分组密码的对称结构, 以德国 Horst Fistel 命名, 通常也称为 Feistel 网络.
20 世纪 70 年代, IBM 工程师 Horst Feistel 设计了一种分组密码, 称为路西法(Lucifer), 工作原理如下:
- 将 64 比特分成两个 32 比特的 L 和 R.
- 设 L 为 L ⊕ F ( R ) L \oplus F(R) L⊕F(R), 其中 F 是 替换-置换轮 函数.
- 交换 L 和 R 的值.
- 转到步骤 2, 重复 15 次.
- 合并 L 和 R 形成 64 比特输出分组.
这种构造称为 Feistel 结构, 如下图所示, 左边是刚才描述的方案, 右边是等价的函数表示, 使用轮换操作 L = L ⊕ F ( R ) L = L \oplus F(R) L=L⊕F(R) 和 R = R ⊕ F ( R ) R = R \oplus F(R) R=R⊕F(R) 代替交换 L 和 R.
为了简化描述, 上图省略了子密钥, 要注意在实际中, 第一个 F 取第一子密钥 K 1 K_1 K1, 第二个 F 取另一个子密钥 K 2 K_2 K2. 在 DES 中, F 函数采用 48 比特子密钥, 它是从 56 比特的主密钥 K中产生的.
在 Feistel 结构中, F 函数是伪随机置换(PRP) 或 伪随机函数(PRF). PRP 对于不同的输入有不同的输出, 但对于两个不同的输入可能出现相同的输出, 即对于不同输入值 X 和 Y, 可能有 F ( X ) = F ( Y ) F(X) = F(Y) F(X)=F(Y). 但在 Feistel 结构中, 只要 F 密码性强大, 就没有影响.
Feistel 结构应该计算多少轮?
在 DES 中执行 16 轮, 在 GOST 28147-89 执行 32 轮.
如果 F 函数足够强大, 理论上 4 轮就够了, 但是真正的密码使用更多的轮来抵御 F 中的潜在弱点.
应用
许多现代及一些较旧的对称分组密码基于 Feistel 结构, 比如: DES, GOST 28147-89, RC5, RC6, FEAL, MARS, Twofish 等.
注意: AES 加密没有采用 Feistel 结构!!!