需要知道的一些知识 Feistel密码结构 Feistel网络的实现与以下参数和特性有关 ①分组大小,分组越大则安全性越高,加密速度越慢,分组密码设计中最常使用的分组大小是64比特 ②密钥大小,密钥越长安全性越高,加密速度越慢,现在普遍认为64比特或更短的密钥是不安全的,通常使用128比特长的密钥。
#Feistel的加密解密结构 加密和解密本质上过程相同,但使用子密钥的顺序相反。
#DES描述
DES是迄今为止世界上最为广泛使用的一种分组密码算法,分组长度为64比特,密钥长度为56比特 (分组密码算法:将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列)
DES加密流程:明文分组长为64比特,密钥长为56比特,明文的处理过程有三个阶段 第一阶段 初始置换IP(用于重排明文的64比特的数据) 第二阶段 具有相同功能的16轮变换,同Feistel结构中的变换过程,到第16轮变换后,输出变为左右两半,并被交换次序。 第三阶段 经过一个逆初始变换,从而产生64比特的密文
密钥的变换:密钥首先通过一个置换函数,然后对加密过程的每一轮,通过一个左循环移位和一个置换产生一个子密钥(每一轮的置换都相同,但由于密钥被重复迭代,所以产生的每轮子密钥不相同)
在DES加密算法的轮结构中,有一个F(R,K)的计算,轮输入的右半部分是32比特(明文的一半),R首先被扩展为48比特,扩展后的48比特与子密钥Ki异或,然后通过S盒,产生一个32比特的输出。 R的扩展函数如图 S盒:共8个,每个S盒的输入长为6比特,输出长为4比特,所以48比特长输入进去,出来就是32比特。 具体是怎么操作的呢?
部分S盒如图
首先把48比特,分为8个6比特长,其中第一位和第六位组成一个2位2进制数,用来选择Si 4个代换中的一个,及对应0,1,2,3,中的某一行(比如:10,二进制表示的是2,那么对应的是Si中2那一行)6比特中中间4位用来选择列,道理同选择行,选择完行列之后,对应到S盒中的某一个数,将这个数表示为4位二进制数,即得出这一S盒的输出。(比如:S2的输入为010010,对应的数为7,二进制表示为0111,那么S2的输出为0111)
[ ]56比特的密钥首先经过一个置换运算(如图中a),然后将经过置换运算的56比特分为左右各28比特,分别记为C0和D0,在第i轮分别对Ci-1和Di-1进行左循环移位,移位位数如图c,移位后的结构作为下一轮的子密钥 ,也作为函数F(Ri-1,Ki)的输入,本轮的子密钥是通过图b中置换选择2产生的48比特的Ki。 解密和Feistel密码结构一样,加密解密的算法相同,但子密钥使用顺序相反。
参考书:《现代密码学(第4版)》清华大学出版社