密码学入门——Feistel网络

参考书

图解密码技术,第三版

一、引入

DES的基本结构是由Horst Feistel设计的,因此也被成为Feistel网络(Feistel结构,Feistel密码)。这一结构不仅被应用于DES,在其他密码算法中也有应用。

在Feistel网络中,加密的各个步骤被称为轮(round)。整个加密过程就是若干次轮的循环。

二、Feistel网络计算流程

Feistel网络计算流程如下

在这里插入图片描述
由于DES采用分组密码工作模式,每一块的大小为64字节。

上面的两个方框表示Feistel网络中一轮的输入(明文)。输人的数据被等分为左右两半分别进行处理。在图中,左半部分写作“左侧”,右半部分写作“右侧”。

下面的两个方框表示本轮的输出(密文)。输出的左半部分写作“加密后的左侧”,右半部分写作“右侧”。

中间的“子密钥”指的是本轮加密所使用的密钥。在Feistel网络中,每一轮都需要使用一个不同的子密钥。由于子密钥只在一轮中使用,它只是一个局部密钥,因此才称为子密钥。

轮函数的作用是根据“右侧”和子密钥生成对“左侧”加密的比特序列。轮函数的输出与“左侧”进行xor运算。

上述流程存在的问题是,右侧根本没有被加密,因此需要在每两轮处理中将左侧和右侧的数据对调。

下面是一个3轮的Feistel网络

在这里插入图片描述

三、Feistel网络的解密

在这里插入图片描述
Feistel网络只需要按照相反的顺序使用子密钥即可解密。

四、Feistel网络的性质

1.Feistel网络的轮数可以任意增加,无论进行多少轮的加密计算,都不会出现无法解密的情况。

2.加密时无论使用任何函数作为轮函数,都可以正确解密。

3.加密和解密可以使用完全相同的结构实现。

值得一提的是,AES候选的5个算法中,有3个算法(MARS,RC6和Twofish)都用到了Feistel网络。但AES最终选择的Rijndael却没有使用Feistel网络。Rijndael使用的是SPN结构。

猜你喜欢

转载自blog.csdn.net/weixin_46841376/article/details/132939428