第二章:对称密码学
表2.3 每轮移动的位数
轮1 2 3 4 5 6 7 8 9 11111110 1 2 3 4 5 6 次 位1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 数 移动后,将两部分合并成56位后通过压缩置换PC-2后得到48位子密钥。即:
Ki=PC-2(CiDi)。压缩置换如表2.4:
表2.4 压缩置换PC-2 11121 5 3 24 7 1 4 8 16 212114 5 1 0 3 9 2 28 17 2212 6 6 7 0 3 453345341 2 1 7 7 5 0 0 543444351 5 3 8 4 9 9 6 354453234 3 6 2 0 6 9 2
综上所述,整个子密钥获得过程如图2-14:
43
第二章:对称密码学
64位密钥 PC-1 <<< <<< PC-2 <<< <<< 子密钥K1 PC-2 子密钥K2 <<< <<< PC-2 <<< <<< 子密钥K15 PC-2 子密钥K16 图2-14子密钥产生
? 密码函数f
密码函数f的输入是32比特数据和48比特的子密钥,其操作步骤如图2-15:
44
第二章:对称密码学
图2-15 f(Ri,Ki)计算
1、扩展置换(E)
将数据的右半部分Ri从32位扩展为48位。位选择函数(也称E-盒)如表2.5:
表2.5 扩展置换E 31 2 3 4 5 2 4 5 6 7 8 9 8 9 11110 1 2 3 1111112 3 4 5 6 7 2222220 1 2 3 4 5 223331 8 9 0 1 2 2、异或
扩展后的48位输出E(Ri)与压缩后的48位子密钥Ki作异或运算。
45
第二章:对称密码学
3、S盒替代
将第二步异或得到的48位结果分成8个6位的块,每一块通过对应一个S盒产生一个4位的输出。8个S盒如表2.6,注意表中各项采用的十六进制表示:
表2.6 DES S盒
S0 1 2 3 4 5 6 7 8 9 A B C D E F 1 0 E 4 D 1 2 F B 8 3 A 6 C 5 9 0 7 1 0 F 7 4 E 2 D 1 A 6 C B 9 5 3 8 2 4 1 E 8 D 6 2 B F C 9 7 3 A 5 0 3 F C 8 2 4 9 1 7 5 B 3 E A 0 6 D S0 1 2 3 4 5 6 7 8 9 A B C D E F 2 0 F 1 8 E 6 B 3 4 9 7 2 D C 0 5 A 1 3 D 4 7 F 2 8 E C 0 1 A 6 9 B 5 2 0 E 7 B A 4 D 1 5 8 C 6 9 3 2 F 3 D 8 A 1 3 F 4 2 B 6 7 C 0 5 E 9 S0 1 2 3 4 5 6 7 8 9 A B C D E F 3 0 A 0 9 E 6 3 F 5 1 D C 7 B 4 2 8 1 D 7 0 9 3 4 6 A 2 8 5 E C B F 1 2 D 6 4 9 8 F 3 0 B 1 2 C 5 A E 7 3 1 A D 0 6 9 8 7 4 F E 3 B 5 2 C S0 1 2 3 4 5 6 7 8 9 A B C D E F 4 0 7 D E 3 0 6 9 A 1 2 8 5 B C 4 F 1 D 8 B 5 6 F 0 3 4 7 2 C 1 A E 9 2 A 6 9 0 C B 7 D F 1 3 E 5 2 8 4 3 3 F 0 6 A 1 D 8 9 4 5 B C 7 2 E S0 1 2 3 4 5 6 7 8 9 A B C D E F 5 0 2 C 4 1 7 A B 6 8 5 3 F D 0 E 9 46