Feistel分组密码


Feistel Cipher 不是分组密码的特定方案。它是一个设计模型,许多不同的分组密码都从中衍生出来。DES 只是 Feistel 密码的一个示例。基于Feistel密码结构的密码系统使用相同的算法进行加密和解密。

加密过程

加密过程使用 Feistel 结构,该结构由多轮明文处理组成,每轮由“替换”步骤和随后的排列步骤组成。

Feistel 结构如下图所示 -

费斯特尔结构
  • 每轮的输入块被分为两半,左半部分和右半部分可以表示为L和R。

  • 在每一轮中,块的右半部分 R 保持不变。但左半部分 L 会执行取决于 R 和加密密钥的操作。首先,我们应用一个加密函数“f”,它接受两个输入 - 密钥 K 和 R。该函数产生输出 f(R,K)。然后,我们将数学函数的输出与 L 进行异或。

  • 在 Feistel 密码(例如 DES)的实际实现中,不是在每一轮中使用整个加密密钥,而是从加密密钥中派生出与轮相关的密钥(子密钥)。这意味着每轮使用不同的密钥,尽管所有这些子密钥都与原始密钥相关。

  • 每轮结束时的置换步骤交换修改后的 L 和未修改的 R。因此,下一轮的 L 将是当前轮的 R。下一轮的R是本轮的输出L。

  • 上述替换和排列步骤形成一个“回合”。轮数由算法设计指定。

  • 一旦最后一轮完成,两个子块“R”和“L”将按此顺序连接以形成密文块。

设计 Feistel 密码的困难部分是轮函数“f”的选择。为了成为牢不可破的方案,该函数需要具有几个超出我们讨论范围的重要属性。

解密过程

Feistel密码的解密过程几乎类似。密文块不是从明文块开始,而是被输入到 Feistel 结构的开头,然后此后的过程与给定插图中描述的完全相同。

据说这个过程几乎相似,但并不完全相同。在解密的情况下,唯一的区别是加密中使用的子密钥以相反的顺序使用。

Feistel 密码最后一步中“L”和“R”的最终交换至关重要。如果不交换它们,则无法使用相同的算法解密生成的密文。

回合数

Feistel 密码中使用的轮数取决于系统所需的安全性。更多轮数提供更安全的系统。但同时,更多的轮数意味着加密和解密过程效率低下、缓慢。因此,系统中的轮数取决于效率与安全性的权衡。