明文(64比特) P L(32比特) R(32比特) K Ro R=Lo®fR,K1) L16=R5 R6=L1s⊕f(R5,K16) P 密文(64比特) 图2-4DES加密流程 将函数∫的输出与输入序列的左半部分进行异或运算后的结果作为新一轮加密过程输 入序列的右半部分,当前输入序列的右半部分作为新一轮加密过程输入序列的左半部分。上 述过程重复操作16次,便实现了DES的16轮加密运算。 假设B是第i轮计算的结果,则B为一个64位的序列,L和R分别是B,的左半部分 和右半部分,K是第1轮的48-位密钥,且f是实现替换、置换及密钥异或等运算的函数, 那么每一轮加密的具体过程为: L=R- R=L-1⊕f(R-1,K) 每一轮DES加密的具体过程如图2-5所示。 29
29 明文(64比特) L(0 32比特) R(0 32比特) f K1 L1 = R0 ( , ) 1 0 R0 K1 R = L Å f f L16 = R15 ( , ) 16 15 R15 K16 R = L Å f K16 密文(64比特) IP IP . . 图 2-4 DES 加密流程 将函数 f 的输出与输入序列的左半部分进行异或运算后的结果作为新一轮加密过程输 入序列的右半部分,当前输入序列的右半部分作为新一轮加密过程输入序列的左半部分。上 述过程重复操作 16 次,便实现了 DES 的 16 轮加密运算。 假设 Bi 是第i 轮计算的结果,则 Bi 为一个 64 位的序列, Li 和 Ri 分别是 Bi 的左半部分 和右半部分, Ki 是第i 轮的 48-位密钥,且 f 是实现替换、置换及密钥异或等运算的函数, 那么每一轮加密的具体过程为: 1 1 1 ( , ) i i i i i i L R R L f R K - - - = = Å 每一轮 DES 加密的具体过程如图 2-5 所示
R 扩展变换 子密钥 R 图2-5一轮DES加密过程 下面对DES加密过程中包含的基本操作进行详细说明。 初始置换:初始置换(Initial Permutation.,简称IP置换)在第一轮运算之前执行,对输 入分组实施如表2-1所示的P置换。例如:表2-1表示该P置换把输入序列的第58位置换 到输出序列的第1位,把输入序列的第50位置换到输出序列的第2位,依此类推。 表2-1初始置换P 58 50 42 34 2618 10 260 52 4436 28 20 12 4 62 54 46 38 30 2214 664 5648 40 32 24 16 8 57 49 41 33 2517 9 159 514335 27 19 11 61 53 45 37 292113 563554739 31 23 15 7 密钥置换:DES加密算法输入的初始密钥大小为8个字节,由于每个字节的第8位用 来作为初始密钥的校验位,所以加密算法的初始密钥不考虑每个字节的第8位,DES的初 始密钥实际对应一个56位的序列,每个字节第8位作为奇偶校验以确保密钥不发生错误。 首先对初始密钥进行如表2-2所示的置换操作。DES的每一轮加密过程从56位密钥中产生 出不同的48位子密钥(Subkey),这些子密钥K通过以下方法产生。 表2-2密钥置换 57 4941 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 28 20 12 4 首先将56位密钥等分成两部分。然后根据加密轮数,这两部分密钥分别循环左移1位 或2位。表2-3给出了对应不同轮数产生子密钥时具体循环左移的位数。 30
30 扩展变换 S-盒 P-盒 子密钥 Li-1 Ri-1 Li Ri 图 2-5 一轮 DES 加密过程 下面对 DES 加密过程中包含的基本操作进行详细说明。 初始置换:初始置换(Initial Permutation,简称 IP 置换)在第一轮运算之前执行,对输 入分组实施如表 2-1 所示的 IP 置换。例如:表 2-1 表示该 IP 置换把输入序列的第 58 位置换 到输出序列的第 1 位,把输入序列的第 50 位置换到输出序列的第 2 位,依此类推。 表 2-1 初始置换 IP 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 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7 密钥置换:DES 加密算法输入的初始密钥大小为 8 个字节,由于每个字节的第 8 位用 来作为初始密钥的校验位,所以加密算法的初始密钥不考虑每个字节的第 8 位,DES 的初 始密钥实际对应一个 56 位的序列,每个字节第 8 位作为奇偶校验以确保密钥不发生错误。 首先对初始密钥进行如表 2-2 所示的置换操作。DES 的每一轮加密过程从 56 位密钥中产生 出不同的 48 位子密钥(Subkey),这些子密钥 Ki 通过以下方法产生。 表 2-2 密钥置换 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 首先将 56 位密钥等分成两部分。然后根据加密轮数,这两部分密钥分别循环左移 1 位 或 2 位。表 2-3 给出了对应不同轮数产生子密钥时具体循环左移的位数
表2-3每轮循环左移的位数 轮数12345678910111213141516 位数1122222212222221 对两个28位的密钥循环左移以后,通过如表2-4所示的压缩置换(Compression Permutation)从56位密钥中选出48位作为当前加密的轮密钥。表2-4给出的压缩置换不仅 置换了56位密钥序列的顺序,同时也选择出一个48位的子密钥,因为该运算提供了一组 48位的数字集。例如,56位的密钥中位于第33位密钥数字对应输出到48位轮密钥的第35 位,而56位的密钥中位于第18位的密钥数字在输出的48位轮密钥中将不会出现。 表2-4 压缩置换 14 17 11 24 1 3 28 15 6 21 10 23 19 12 4 26 8 16 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 初始密钥(64比特) 密钥置换 C。(28比特) D。(28比特) 循环移位 循环移位 压缩置换 +子密钥k 循环移位 循环移位 044 图2-6DES密钥生成过程 以上产生轮密钥的过程中,由于每一次进行压缩置换之前都包含一个循环移位操作,所 以产生每一个子密钥时,使用了不同的初始密钥子集。虽然初始密钥的所有位在子密钥中使 用的次数并不完全相同,但在产生的16个48位的子密钥中,初始密钥的每一位大约会被 14个子密钥使用。由此可见,密钥的设计非常精巧,使得密钥随明文的每次置换而不同, 每个阶段使用不同的密钥来执行“替换”或“置换”操作。 扩展变换:扩展变换(Expansion Permutation,也被称为E一盒)将64位输入序列的右 半部分R从32位扩展到48位。扩展变换不仅改变了R中32位输入序列的次序,而且重复 了某此位。这个操作有以下三个基本的目的:一方面,经过扩展变换可以应用32位的输入 序列产生一个与轮密钥长度相同的48位的序列,从而实现与轮密钥的异或运算:另一方面, 扩展变换针对32位的输入序列提供了一个48位的结果,使得在接下来的替代运算中能进行 31
31 表 2-3 每轮循环左移的位数 轮数 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 对两个 28 位的密钥循环左移以后,通过如表 2-4 所示的压缩置换(Compression Permutation)从 56 位密钥中选出 48 位作为当前加密的轮密钥。表 2-4 给出的压缩置换不仅 置换了 56 位密钥序列的顺序,同时也选择出一个 48 位的子密钥,因为该运算提供了一组 48 位的数字集。例如,56 位的密钥中位于第 33 位密钥数字对应输出到 48 位轮密钥的第 35 位,而 56 位的密钥中位于第 18 位的密钥数字在输出的 48 位轮密钥中将不会出现。 表 2-4 压缩置换 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 C0 D0 1 k 图 2-6 DES 密钥生成过程 以上产生轮密钥的过程中,由于每一次进行压缩置换之前都包含一个循环移位操作,所 以产生每一个子密钥时,使用了不同的初始密钥子集。虽然初始密钥的所有位在子密钥中使 用的次数并不完全相同,但在产生的 16 个 48 位的子密钥中,初始密钥的每一位大约会被 14 个子密钥使用。由此可见,密钥的设计非常精巧,使得密钥随明文的每次置换而不同, 每个阶段使用不同的密钥来执行“替换”或“置换”操作。 扩展变换:扩展变换(Expansion Permutation,也被称为 E-盒)将 64 位输入序列的右 半部分 Ri 从 32 位扩展到 48 位。扩展变换不仅改变了 Ri 中 32 位输入序列的次序,而且重复 了某此位。这个操作有以下三个基本的目的:一方面,经过扩展变换可以应用 32 位的输入 序列产生一个与轮密钥长度相同的 48 位的序列,从而实现与轮密钥的异或运算;另一方面, 扩展变换针对 32 位的输入序列提供了一个 48 位的结果,使得在接下来的替代运算中能进行
压缩,从而达到更好的安全性:同时,由于输入序列的每一位将影响到两个替换,所以输出 序列对输入序列的依赖性将传播得更快,体现出良好的“雪崩效应”。因此该操作有助于设 计的DES算法尽可能快地使密文的每一位依赖于明文和密钥的每一位。 表2-5给出了扩展变换中输出位与输入位的对应关系。例如,处于输入分组中第3位的 数据对应输出序列的第4位,而输入分组中第21位的数据则分别对应输出序列的第30位和 第32位。 表2-5扩展变换(E一盒) 32 1 3 4 5 6 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 24252627 28 29 28 2930 31 32 在扩展变换过程中,每一个输出分组的长度都大于输入分组,而且该过程对于不同的输 入分组都会产生惟一的输出分组。 E一盒的真正作用是确保最终的密文与所有的明文位都有关。下面来看一下第1位的值 通过E一盒操作的情况,第一个E一盒操作将位复制,并将它放在位置2和位置32:第二次 E一盒作用于该单词,初始的影响延伸到了位置1、3和31。等到第8次该单词通过E一盒 后,E一盒对每个位都有影响。详细的过程如下: 初始 10000000000000000000000000000000 第1阶段 01000000000000000000000000000001 第2阶段 10100000000000000000000000000010 第3阶段 01010000000000000000000000000101 第4阶段 10101000000000000000000000000101 第5阶段 01010100000000000000000000010101 第6阶段 10101111010000000000000010101010 第7阶段 01010101111000100101010101010101 第8阶段 10101010101111111010111010101010 48比特输入 S-盒1 S-盒2 S-盒3 S一盒4 S-盒5 S-盒6 S一盒7 S一盒8 32比特输出 图2-7S-盒替换 S一盒替换(S-boxes Substitution):每一轮加密的48位的轮密钥与扩展后的分组序列 进行异或运算以后,得到一个48位的结果序列,接下来应用S一盒对该序列进行替换运算。 替换由8个替换盒(substitution boxes,简称S一盒)。每一个S一盒对应6位的输入序列, 得到相应的4位输出序列。在DES算法中,这8个S一盒是不同的(DES的这8个S一盒 占的存储空间为256字节)。48位的输入被分为8个6位的分组,每一分组对应一个S一盒 替换操作:分组1由S一盒1操作,分组2由S一盒2操作,依此类推(见图2-7)。 DES算法中,每个S一盒对应一个4行、16列的表,表中的每一项都是一个16进制的 32
32 压缩,从而达到更好的安全性;同时,由于输入序列的每一位将影响到两个替换,所以输出 序列对输入序列的依赖性将传播得更快,体现出良好的“雪崩效应”。因此该操作有助于设 计的 DES 算法尽可能快地使密文的每一位依赖于明文和密钥的每一位。 表 2-5 给出了扩展变换中输出位与输入位的对应关系。例如,处于输入分组中第 3 位的 数据对应输出序列的第 4 位,而输入分组中第 21 位的数据则分别对应输出序列的第 30 位和 第 32 位。 表 2-5 扩展变换(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-盒的真正作用是确保最终的密文与所有的明文位都有关。下面来看一下第 1 位的值 通过 E-盒操作的情况,第一个 E-盒操作将位复制,并将它放在位置 2 和位置 32;第二次 E-盒作用于该单词,初始的影响延伸到了位置 1、3 和 31。等到第 8 次该单词通过 E-盒 后,E-盒对每个位都有影响。详细的过程如下: 初 始 10000000000000000000000000000000 第 1 阶段 01000000000000000000000000000001 第 2 阶段 10100000000000000000000000000010 第 3 阶段 01010000000000000000000000000101 第 4 阶段 10101000000000000000000000000101 第 5 阶段 01010100000000000000000000010101 第 6 阶段 10101111010000000000000010101010 第 7 阶段 01010101111000100101010101010101 第 8 阶段 10101010101111111010111010101010 48比特输入 32比特输出 S-盒1 S-盒2 S-盒3 S-盒4 S-盒5 S-盒6 S-盒7 S-盒8 图 2-7 S-盒替换 S-盒替换(S-boxes Substitution):每一轮加密的 48 位的轮密钥与扩展后的分组序列 进行异或运算以后,得到一个 48 位的结果序列,接下来应用 S-盒对该序列进行替换运算。 替换由 8 个替换盒(substitution boxes,简称 S-盒)。每一个 S-盒对应 6 位的输入序列, 得到相应的 4 位输出序列。在 DES 算法中,这 8 个 S-盒是不同的(DES 的这 8 个 S-盒 占的存储空间为 256 字节)。48 位的输入被分为 8 个 6 位的分组,每一分组对应一个 S-盒 替换操作:分组 1 由 S-盒 1 操作,分组 2 由 S-盒 2 操作,依此类推(见图 2-7)。 DES 算法中,每个 S-盒对应一个 4 行、16 列的表,表中的每一项都是一个 16 进制的
数,相应的对应一个4位的序列。表2-6列出了所有8个S一盒。 表2-6S-盒 S-盒1 14 4 13 12151183 10 6125 9 0 0 15 7 4142 13 110 61211 9 5 3 8 4 1 14 8136 21115 1297 310 5 0 15128 249 175 1131410 0613 S-盒2 15 1 8 14 611349 72 13 12 0 5 10 13 4 715281412 01106 9 11 014 4 111041315 8126932 15 1381013154211671205149 S-盒3 100 9 146 3 15 51 13127 11 4 2 8 137 0 9 3461028514121115 1 13 6 4 98153011 1 21251014 > 1013 069874151431152 S-盒4 7 13 1女 30 6910 1 28 5 1112 4 15 13 8 11 6150 3 4 7 212 1 10 14 9 10 6 9 0121171315 131452 8 4 3150610113894511127214 S-盒5 212 171011 68 531513 0 14 9 1411 2 1247 13 1 5 01510 3 9 8 6 4 2 1110137 815 9125 6 30 14 118 12 7 114213 6 150 9 104 3 S-盒6 121 10159268013341475 11 1015 4 2712956 11314 0113 8 9 1415 5281237 041011311 6 4321295151011141760813 S-盒7 411 2 14150813312 975106 13011 7491101435122158 6 1 4 11 13123714101568059 2 61113 8 14107950151423 12 S-盒8 132 4615111 10 931450127 115 13 8103 7 4 12 5 6 11014 9 2 > 11 191214 20 610131535 8 2 1 14 7 41081315129035611 输入序列以一种非常特殊的方式对应S一盒中的某一项,通过S一盒的6个位输入确定 33
33 数,相应的对应一个 4 位的序列。表 2-6 列出了所有 8 个 S-盒。 表 2-6 S-盒 S-盒 1 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13 S-盒 2 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5 0 14 4 11 10 4 13 1 5 8 12 6 9 3 2 15 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9 S-盒 3 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12 S-盒 4 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14 S-盒 5 2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9 14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14 11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3 S-盒 6 12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11 10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6 4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13 S-盒 7 4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1 13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2 6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12 S-盒 8 13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7 1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8 2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11 输入序列以一种非常特殊的方式对应 S-盒中的某一项,通过 S-盒的 6 个位输入确定