集成电路EDA设计与实践 联系客服

发布时间 : 星期二 文章集成电路EDA设计与实践更新完毕开始阅读25f346515a8102d276a22ff2

2013级集成电路EDA设计与实践

c0(22to28)<=key(17)&key(10)&key(3)&key(53)&key(46)&key(39)&key(32); d0(1to7)<=key(56)&key(49)&key(42)&key(35)&key(28)&key(21)&key(14); d0(8 to 14)<=key(7)&key(55)&key(48)&key(41)&key(34)&key(27)&key(20); d0(15 to 21)<=key(13)&key(6)&key(54)&key(47)&key(40)&key(33)&key(26); d0(22 to 28)<=key(19)&key(12)&key(5)&key(25)&key(18)&key(11)&key(4); end process;

其中key为从用户处得到的56位密钥,经过等分以后,变为c0和d0两部分,分别为28位的密钥。

2.3 密钥移位

表3

i 1 ? 1 2 1 3 2 11 2 4 2 12 2 5 2 13 2 6 2 14 2 7 2 15 2 8 2 16 1 i 9 10 ? 1 2 DES算法的密钥是经过16次迭代得到一组密钥的,把2.2中生成的A,B视为迭代的起始密钥,表3显示在第i次迭代时密钥循环左移的位数. 比如在第1次迭代时密钥循环左移1位,第3次迭代时密钥循环左移2位. 第9次迭代时密钥循环左移1位,第14次迭代时密钥循环左移2位. 第一次迭代: A(1) = ?(1) A B(1) = ?(1) B 第i次迭代:

A(i) = ?(i) A(i-1) B(i) = ?(i) B(i-1) 其具体代码如下: 循环左移一位

c_s<=a(2 to 28)&a(1 ); d_s<=b(2 to 28)&b(1 );

13

2013级集成电路EDA设计与实践

cd<=c_s(1 to 28)&d_s(1 to 28); 循环左移两位

c_s<=a(3 to 28)&a(1 to 2); d_s<=b(3 to 28)&b(1 to 2); cd<=c_s(1 to 28)&d_s(1 to 28);

2.4 密钥选取

14 15 26 41 51 34 17 6 8 52 45 53 11 21 16 31 33 46 表4

1 5 3 12 13 30 39 29 2842405632

24 10 7 37 48 42 23 27 47 44 50 19 20 55 49 36 在2.3中第i次迭代生成的两个28位长的密钥为

合并

按照表4所示k的第一位为56位密钥的第14位,k的第2位为56位密钥的第17位,...,依此类推,k的最后一位最后一位是56位密钥的第32位。 生成与进行第i次迭代加密的数据进行按位异或的48位使用密钥:

其具体代码如下:

k(1 to 6)<=cd(14)&cd(17)&cd(11)&cd(24)&cd(1)&cd(5);

14

2013级集成电路EDA设计与实践

k(7 to 12)<=cd(3)&cd(28)&cd(15)&cd(6)&cd(21)&cd(10); k(13 to 18)<=cd(23)&cd(19)&cd(12)&cd(4)&cd(26)&cd(8); k(19 to 24)<=cd(16)&cd(7)&cd(27)&cd(20)&cd(13)&cd(2); k(25 to 30)<=cd(41)&cd(52)&cd(31)&cd(37)&cd(47)&cd(55); k(31 to 36)<=cd(30)&cd(40)&cd(51)&cd(45)&cd(33)&cd(48); k(37 to 42)<=cd(44)&cd(49)&cd(39)&cd(56)&cd(34)&cd(53); k(43 to 48)<=cd(46)&cd(42)&cd(50)&cd(36)&cd(29)&cd(32);

2.5 迭代

DES算法密钥生成需要进行16次迭代,在完成16次迭代前,循环执行2.3-2.4步.最终形成16套加密密钥:key[0] , key[1] , key[2] ,…. key[14] , key[15] .

其具体代码如下:

u1:ls1 port map(c0,d0,c1,d1,k1); u2:ls1 port map(c1,d1,c2,d2,k2); u3:ls2 port map(c2,d2,c3,d3,k3); u4:ls2 port map(c3,d3,c4,d4,k4); u5:ls2 port map(c4,d4,c5,d5,k5); u6:ls2 port map(c5,d5,c6,d6,k6); u7:ls2 port map(c6,d6,c7,d7,k7); u8:ls2 port map(c7,d7,c8,d8,k8); u9:ls1 port map(c8,d8,c9,d9,k9); u10:ls2 port map(c9,d9,c10,d10,ka); u11:ls2 port map(c10,d10,c11,d11,kb); u12:ls2 port map(c11,d11,c12,d12,kc); u13:ls2 port map(c12,d12,c13,d13,kd); u14:ls2 port map(c13,d13,c14,d14,ke); u15:ls2 port map(c14,d14,c15,d15,kf); u16:ls1 port map(c15,d15,c16,d16,kg);

15

2013级集成电路EDA设计与实践

2.6 本章小结

本章主要介绍了密钥的生成过程,即先从用户处得到一个56位的密钥,经过等分,移位,选取,迭代等步骤生成与进行第i次迭代加密的数据进行按位异或的48位使用密钥。

16