文章目录
- 参考书
- 一、引入
- 二、Feistel网络计算流程
- 三、Feistel网络的解密
- 四、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结构。