📅  最后修改于: 2021-01-12 04:43:03             🧑  作者: Mango
Feistel密码不是分组密码的特定方案。它是一种设计模型,可以从中得出许多不同的分组密码。 DES只是Feistel密码的一个例子。基于Feistel密码结构的密码系统使用相同的算法进行加密和解密。
加密过程使用Feistel结构,包括多轮明文处理,每轮包括“替换”步骤和随后的置换步骤。
Feistel结构如下图所示-
每个回合的输入块分为两个半部分,左半部分和右半部分分别表示为L和R。
在每一轮中,方块R的右半部分保持不变。但是左半部分L进行的操作取决于R和加密密钥。首先,我们应用一个加密函数“ f”,它接受两个输入-密钥K和R。该函数产生输出f(R,K)。然后,我们将数学函数的输出与L进行异或。
在Feistel Cipher(例如DES)的实际实现中,不是在每个回合期间使用整个加密密钥,而是从加密密钥派生出与回合相关的密钥(子密钥)。这意味着每个回合都使用不同的密钥,尽管所有这些子密钥都与原始密钥相关。
每轮结束时的置换步骤将修改的L和未修改的R交换。因此,下一轮的L将是当前轮的R。下一轮的R是当前轮的输出L。
上面的替换和置换步骤形成一个“回合”。轮数由算法设计指定。
一旦完成最后一轮,则将两个子块“ R”和“ L”按此顺序连接起来以形成密文块。
设计Feistel密码的困难部分是选择舍入函数’f’。为了使方案牢不可破,该函数必须具有超出我们讨论范围的几个重要属性。
Feistel密码的解密过程几乎相似。代替以纯文本块开头,将密文块送入Feistel结构的开头,然后其后的过程与给定插图中所述的过程完全相同。
据说该过程几乎是相似的,并且不完全相同。在解密的情况下,唯一的区别是加密中使用的子密钥以相反的顺序使用。
Feistel密码的最后一步中的“ L”和“ R”的最后交换至关重要。如果未交换这些密码,则无法使用相同算法解密所得密文。
Feistel密码中使用的回合数量取决于系统所需的安全性。轮数越多,系统越安全。但是同时,更多的回合意味着低效的慢速加密和解密过程。因此,系统中的回合数量取决于效率与安全性的权衡。