左移位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
下图为每一轮子密钥产生的详细过程:
图2 密钥生成框图
以第一轮子密钥的产生为例子,输入数据长度为64位的初始密钥,这串数据经过置换选择1重新排列之后,这其中的56位非校验码的数据被分成各有28位的左右两组,左边的那组向左循环一位,右边一组向右循环一位,循环位移之后的这两组数据又被输入到置换选择2中产生,通过置换选择产生出48位的第一轮子密钥K1,后面的几轮密钥的产生过程与第一轮的是一样的,唯一不同的就是不同的轮密钥产生所经过的循环位移位数是不相同的,每次位移的位数在表2中都被详细地列出来。
1.2.3 DES的轮结构
轮结构主要包括:扩展置换,与48位密钥的异或运算,S盒置换以及P盒置换,它的详细过程如图3所示。在每一轮变换中的结构和Feistel加密结构一样[8]。
图3 DES轮函数结构框图
轮函数就是DES加密原理图中的f,其过程可以分为四个步骤,首先是右边的32位数据Ri经过E表被置换扩展为48位,然后这48位重新排列之后的数据又和置换选择PC2所产生的48位子密钥Ki进行异或运算,再然后运算的结果被输入到8个751进四出的S盒之后得到一个32位数据的输出,最后输出的数据最后再经过P置换改变其排列的顺序后即把它作为函数的结果。该结果再与Li-1进行异或运算就会得到Ri,而Li与Ri-1是一样的。
表3 E置换表
32 1 2 3 4 5 4 5
6 7 8 9 8 9 10 11
12 13 12 13 14 15 16 17
16 17 18 19 20 21 20 21
22 23 24 25 24 25 26 27
28 29 28 29 30 31 32 1
E置换表的使用方法:表中的数据代表输入数据的第几位,而这个数据在表中所在的位置就是输出数据对应的位数,例如表中第一位数据是32,那么在原输入数据的第32位上那个数就会作为输出数据第一位的那个数,表中第二位数据是1,也就是原数据第一位上面的那个数作为输出数据的第二位的数,以此类推最后一个数据时1,那么原数据的第一位上的数作为最后一位的数输出。通过E置换表之后,数据中各个位上的数会发生变化,同时还会将原本只有32位的数据扩展成拥有48位的数据。
DES加密算法中除了8个S盒里面是非线性变换以外,其余各处均是线性变换的,而DES加密算法保密的最关键的地方就在于S盒设计上面[9]。它的设计标准是经过IBM公司精心设计和严格挑选的,美国国家安全局曾经公布了下列几个设计准则:
(1) S盒的每一行是整数0,1,2,…,15的一个置换;
(2) 没有一个S盒是它输入变量的线性函数;
(3) 改变S盒输入中的某一位,至少会引起2位的输出改变; VHDL基于DES数据加密标准的加解密系统设计(3):http://www.751com.cn/zidonghua/lunwen_8869.html