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