一种对称公私钥加密算法
1 加密算法的分类
对称加解密算法
(1)通信双方同时掌握一个密钥,加密解密都是由一个密钥完成的(即加密密钥等于解密密钥,加解密密钥可以相互推倒出来)。
(2)双方通信前共同拟定一个密钥,不对第三方公开。
(3)不具有个体原子性,一个密钥被共享,泄漏几率增大公私钥加解密算法
通信双方掌握不同的密钥,不同方向的加解密由不同的密钥完成。
2 DES加密算法
Data Encryption Standard
DES加密算法主要是通过先对密钥进行加密,再将加密后的密钥放入明文中再次加密,得到密文。加密过程要用到很多表格,这些表格是固定的。下先介绍这些表格的转换方法,再分别介绍密钥和明文的加密步骤。
2.1 转换方法
- 交换表:以交换表1为例,找到第57位的数字,将第1位数字置换成第57位上的数字,奇偶校验位直接省去不需要转换,位数就会减少8位
- 位移(位移轮数表):1位即左移1位,2位即左移2位
- E盒(扩展表):表内有16个数字重复了,即位数增加了16位
- S盒:$8\ast6$变成$8\ast4$,即将第1位和第6位看作行,中间4位看做列,在 盒找到对应的数据,转换为二进制(4位)
- P盒:直接置换,没有位数减少
2.2 对密钥K(64位)
密钥(明文)由16个数字组成,二进制转换为64位,0123456789ABCDEF表示0到16,二进制表示为0000到1111
先用64位转56位的交换表1($8\ast7$),将$K$置换为
(56位),第8,16,24,32,40,48,56,64位(8的倍数)称为奇偶校验位,直接省去不需要转换,结果就只有56位了再经过位移轮数表将$c_0d_0$变为$c_1d_1,\cdots,c_{16}d_{16}$(56位)
再用56位转48位的交换表2($8\ast6$),分别将$c_1d_1 \to k_1,\cdots,c_{16}d_{16} \to k_{16}$(48位),奇偶校验位是7的倍数
交换表1:
1 | 57 49 41 33 25 17 9 |
位移轮数表:
交换表2:
1 | 14 17 11 24 1 5 |
2.3 对明文(64位)加密:
- 先根据交换表$IP(8\ast8$) 将$M$转换为$L_0R_0$(各32位)
- 计算出$L_{16}R_{16}$:$L_n=R_{\left(n-1\right)},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$ - 再将$L_{16}R_{16}$转换为$R_{16}L_{16}$(64位)
- 最后用交换表$IP-1(8\ast8)$对$R_{16}L_{16}$进行置换得到密文
交换表$IP$:1
2
3
4
5
6
7
858 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$: