DES数据加密标准

发布于 2020-04-16  153 次阅读


1 加密算法的分类

1.1 对称加解密算法

  1. 通信双方同时掌握一个密钥,加密解密都是由一个密钥完成的(即加密密钥等于解密密钥,加解密密钥可以相互推倒出来)。
  2. 双方通信前共同拟定一个密钥,不对第三方公开。
  3. 不具有个体原子性,一个密钥被共享,泄漏几率增大。

1.2 公私钥加解密算法

通信双方掌握不同的密钥,不同方向的加解密由不同的密钥完成。

2 DES加密算法

Data Encryption Standard

DES加密算法主要是通过先对密钥进行加密,再将加密后的密钥放入明文中再次加密,得到密文。加密过程要用到很多表格,这些表格是固定的。下先介绍这些表格的转换方法,再分别介绍密钥和明文的加密步骤。

2.1 转换方法

  1. 交换表:以交换表1为例,找到第57位的数字,将第1位数字置换成第57位上的数字,奇偶校验位直接省去不需要转换,位数就会减少8位

  2. 位移(位移轮数表):1位即左移1位,2位即左移2位

  3. E盒(扩展表):表内有16个数字重复了,即位数增加了16位

  4. S盒:$8\ast6$ 变成 $8\ast4$,即将第1位和第6位看作行,中间4位看做列,在 盒找到对应的数据,转换为二进制(4位)

  5. P盒:直接置换,没有位数减少

2.2 对密钥K(64位)

  1. 密钥(明文)由16个数字组成,二进制转换为64位,0123456789ABCDEF表示0到16,二进制表示为0000到1111

  2. 先用64位转56位的交换表1($8\ast7$),将 $K$ 置换为 (56位),第8,16,24,32,40,48,56,64位(8的倍数)称为奇偶校验位,直接省去不需要转换,结果就只有56位了

  3. 再经过位移轮数表将 $c_0d_0$ 变为 $c_1d_1,\cdots,c_{16}d_{16}$(56位)

  4. 再用56位转48位的交换表2($8\ast6$),分别将 $c_1d_1 \to k_1,\cdots,c_{16}d_{16} \to k_{16}$(48位),奇偶校验位是7的倍数

交换表1:

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

位移轮数表:

交换表2:

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.3 对明文(64位)加密:

  1. 先根据交换表 $I P(8 * 8)$ 将 $M$ 转换为 $L_{0} R_{0}$ (各32位)
  2. 计算出 $L_{16} R_{16}$: $$L_{n}=R_{(n-1)}, R_{n}=L_{(n-1)} \oplus P\left(S\left(E\left(R_{(n-1)} \oplus k_{n}\right)\right)\right)$$
    (1) 利用 $E$ 盒将32位的 扩展为 48 位的 $R_{(n-1)}(1, \cdots 16)$
    (2) $R_{(n-1)}$ (48位) 与 $k_{n}$ (48位) 做异或运算 $R_{(n-1)} \oplus k_{n}$ ,即 $E\left(R_{(n-1)} \oplus k_{n}\right)$ (48位)
    (3) 通过 $S$ 盒将其转换为32位,即 $S\left(E\left(R_{(n-1)} \oplus k_{n}\right)\right)$ (32位)
    (4) 再经过 $P$ 盒进行置换,即 $P\left(S\left(E\left(R_{(n-1)} \oplus k_{n}\right)\right)\right)$ (32位)
    (5) 再与 $L_{n-1}$ (32位) 做异或运算得到 $R_{n}$
  3. 再将 $L_{16} R_{16}$ 转换为 $R_{16} L_{16}$ (64位)
  4. 最后用交换表 $I P-1(8 * 8)$ 对 $R_{16} L_{16}$ 进行置换得到密文 交换表 $I P$ :
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

E 盒:

S 盒:

P 盒:

交换表 IP-1

References

  1. 道客巴巴-DES加密算法

  2. DES加解密算法