2.1.1 子密钥产生器
子密钥产生器的具体结构在图2中没有画出,但可以看到,每次迭代使用的密钥长度均为48bit,且16次迭代中使用的48bit密钥均不同。下面说明如何从64bit的初始密钥得到16个互不相同的48bit子密钥。[11]
DES算法中输入的密钥长度为64bit,其中8bit用于奇偶校验,实际有效的密钥长度为56位。而16次迭代是在16个子密钥(48 bit)的控制下进行的。子密钥k(i),(i=1~16)的产生框图如图2-3所示。
64bit的初始密钥经过PCI置换选择后分为28bit的两组数据,分别存储于寄存器C和D中。PCI表如图4所示。其中,第8,16,32和64位在置换过程中被删除了,因而不出现在图2-4中。
各次迭代中,寄存器C和D分别将所存储的数据进行左循环移位置换,各次迭代的移位次数如表2-1所示。
表2-1 循环移位次数
第i次迭代 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
循环左移位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
每次移位后,将寄存器C和D中所存储的数据合并为56bit,并进行置换选择II,通过置换后,56bit的数据将变为48bit。置换选择II表如表2-2所示。
至此,16个48bit的子密钥k(1)~k(16)已经生成,可应用于各次迭代运算中。下面,根据图2-2所示的DES算法流程图,分别介绍各步骤的运算规则。
表2-2 置换选择II表
14 17 11 24 1 5 3 28
15 6 21 10 23 19 12 4
26 8 16 7 27 20 13 2
41 52 31 37 47 55 30 40
51 45 33 48 44 49 39 56
34 53 46 42 50 36 29 32
2.1.2 初始置换IP
初始置换将64bit的明文按照表2-3 的顺序进行置换,得到一个乱序的64bit明文组,再将它分为左右两组各32bit的数据。初始置换将64bit明文置换为64bit数据,并分为左右两组,如表2-3所示。
表2-3 初始置换表
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1 基于VHDL语言的DES加密算法设计(4):http://www.youerw.com/zidonghua/lunwen_6115.html