对称密码学之现代密码学-简易版DES加密、解密

简易版DES加密详解

1.二进制数据的转换

不仅仅是DES密码,在其它的现代密码中也应用了二进制数据,所以无论是文章还是数字,都需要将明文变换为二进制数据,如表1所示,这里仅将使用的16字符(其中含有1个没有意义的空字符),将每个字符都对应不同的4bit的二进制编码进行变换,将明文表示成"0"和"1"的系列。

表1 二进制数据转换表

字符 二进制编码
A 0000
B 0001
C 0010
D 0011
E 0100
F 0101
G 0110
H 0111
I 1000
J 1001
K 1010
L 1011
M 1100
N 1101
O 1110
空字符 1111

2.DES密文的生成

DES采用了64位的分组长度和56位的密钥长度,它将64位的输入经过一系列的变换得到64位的输出,解密则使用了相同的步骤和相同的密钥。

为了进行简易的说明,在该文章里我们以8bit为一组对简易DES密码进行分析,首先先把DES总的处理流程用下图1表示。

图1 DES处理流程表

在这里插入图片描述
(1)首先把要加密的明文按照表1变成“ 0 ” 或“ 1 ”的排列,这就是明文要输入的二进制。例如我们要发送的明文是“ MC ”,按照表1,“ MC ” = ( 1100 0010 )。

(2)明文二进制按照表2进行初期置换,置换的过程如图2所示,置换后的结果为“ 10001001 ”。

表2 初期置换表

输入bit的位置 j 输出bit的位置 k
1 5
2 1
3 6
4 2
5 7
6 3
7 8
8 4
图2 初期变换过程

在这里插入图片描述
(3)将(2)中得出的二进制数据分割为左侧“ 1000 ”和右侧“ 1001 ”,即

L 0 = 1000

R 0 = 1001

(4)根据表3对R 0进行扩大置换, 把4bit变为6bit

表3 扩大置换E
输入bit的位置 输出bit的位置
1 3
2 4
3 1
4 2
5 3
6 4

所以:ER0 = 011001
(5)将扩大置换ER0和密钥K1 = 110001进行异或运算:

ER 0⊕K 1 = 011001⊕110001

=101000

(6)基于表4,将第(5)步中的结果进行压缩变换,把 6bit变为4bit
表4 压缩变换表

在这里插入图片描述
具体压缩变换的过程如下:第(5)步中的结果101000,将其最左侧和最右侧的2比特(00-11,0-3)定位表4的行,即“ 10 ” = 2(第2行),剩余的4bit“ 0100 ” = 4定位表4的列(第4列),行和列的组合定位定位到表4中的某个元素(第2行第4列即元素13,元素值均为0-15,即0000~1111四比特,元素13用比特表示为“ 1101 ”),所以压缩后的4bit为 “ 1101 ”。
(7)将6bit换位4bit后,在对其进行置换变换提高其混乱度,置换变换如下表5所示。

表5 置换表

输入bit的位置 输出bit的位置
1 3
2 4
3 1
4 2

得到置换后的数据为:“ 0111 ”
注:将第(4)、(5)、(6)、(7)步的处理运算用非线性函数F表示为如下等式:

F(R 0,K 1) = 0111

(8)将第一段的输出,左侧L 1和右侧R 1分别用下列等式表示:
L 1 = R 0= 1001

R 1 = L 0⊕F(R 0,K 1)

= 1000⊕0111 = 1111

(9)第二阶段与第一阶段相同,讲过从第(4)步到第(8)的反复计算便可得到加密后的数据,根据表3对R 1进行扩大置换, 把4bit变为6bit
ER 1 =111111

(10)将扩大置换ER 1和密钥K 2 = 111000进行异或运算:
ER 1⊕K 2 = 111111⊕111000

=000111

(11)基于表4,将第(10)步中的结果进行压缩变换,把6bit变为4bit。第(10)步中的结果000111,将其最左侧和最右侧的2比特(00-11,0-3)定位表4的行,即“ 01 ” = 1(第1行),剩余的4bit“ 0011 ” = 3定位表4的列(第3列),行和列的组合定位定位到表4中的某个元素(第1行第3列即元素4,元素值均为0-15,即0000~1111四比特,元素4用比特表示为“ 0100 ”),所以压缩后的4bit为 “ 0100 ”。

(12)将6bit换位4bit后,在对其进行置换变换提高其混乱度,置换变换表5所示,置换后的结果为 ’ 0001 ‘,所以:

F(R 1,K 2) = 0001

(13)将第二段的输出,左侧L 2和右侧R 2分别用下列等式表示:
L 2 = R 1= 1111

R 2 = L 1⊕F(R 1,K 2)

= 1001⊕0001 = 1000

(14)在最后段里将L 2与R 2进行调换:
L 2 = R 2= 1000

R 2 '= L 2= 1111

(15)将L 2 和R 2 '合并为“ 10001111 ”后,基于表6进行最后的置换,可得到加密后的DES密文。
表6 最终置换表

输入bit的位置 j 输出bit的位置 k
1 2
2 4
3 6
4 8
5 1
6 3
7 5
8 7

得到置换输出数据为:“ 11101010 ”
所以得到DES的加密密文为:“ OK ”

3.DES密文的解密

由于解密的过程和加密的过程是相同的,所以解密的流程可参考图1,但是加密的时候,密钥的使用流程是K1、K2,解密时需要将其顺序颠倒,在第一段里使用K2,第二段里使用K1

(1)将密文“ 11101010 ”作为明文二进制按照表2进行初期置换,置换后的结果为“ 10001111 ”。

(2)将(1)中得出的二进制数据分割为左侧“ 1000 ”和右侧“ 1001 ”,即

L 0 = 1000

R 0 = 1111

(3)根据表3对R0进行扩大置换,把4bit变为6bit,所以:

ER 0 = 111111

(4)将扩大置换ER 0和密钥K 2 = 111000进行异或运算:
ER 0⊕K 2 = 111111⊕111000

=000111

(5)基于表4,将第(4)步中的结果进行压缩变换,把 6bit变为4bit
具体压缩变换的过程如下:第(4)步中的结果000111,将其最左侧和最右侧的2个比特(00-11,0-3)定位表4的行,即“ 01 ” = 1(第1行),剩余的4bit“ 0011 ” = 3定位表4的列(第3列),行和列的组合定位定位到表4中的某个元素(第1行第3列即元素4,元素值均为0-15,即0000~1111四比特,元素4用比特表示为“ 0100 ”),所以压缩后的4bit为 “ 0100 ”。

(6)将6bit换位4bit后,在对其进行置换变换提高其混乱度,置换变换如表5所示,置换的结果为 “ 0001 ”,所以:

F(R 0,K 1) = 0001

(7)将第一段的输出,左侧L1和右侧R1分别用下列等式表示:

L 1 = R 0= 1111

R 1 = L 0⊕F(R 0,K 1)

= 1000⊕0001 = 1001

(8)第二阶段与第一阶段相同,从第(3)步到第(6)的反复计算便可得到加密后的数据,根据表3对R 1进行扩大置换, 把4bit变为6bit
ER 1 =011001

(9)将扩大置换ER 1和密钥K 1 = 110001进行异或运算:
ER 1⊕K 1 = 011001⊕110001

= 101000

(10)基于表4,将第(9)步中的结果进行压缩变换,把 6bit变为4bit。第(9)步中的结果101000,将其最左侧和最右侧的2比特(00-11,0-3)定位表4的行,即“ 10 ” = 2(第2行),剩余的4bit“ 0100 ” = 4定位表4的列(第4列),行和列的组合定位定位到表4中的某个元素(第2行第4列即元素13,元素值均为0-15,即0000~1111四比特,元素13用比特表示为“ 1101 ”),所以压缩后的4bit为 “ 1101 ”。

(11)将6bit换位4bit后,在对其进行置换变换提高其混乱度,置换变换表5所示,置换后的结果为 ’ 0111 ‘,所以:

F(R 1,K 1) = 0111

(12)将第二段的输出,左侧L 2和右侧R 2分别用下列等式表示:
L 2 = R 1= 1001

R 2 = L 1⊕F(R 1,K 1)

= 1111⊕0111 = 1000

(13)在最后段里将L 2与R 2进行调换:
L 2 = R 2= 1000

R 2 '= L 2= 1001

(14)将L 2 和R 2 '合并为“ 10001001 ”后,基于表6进行最后的置换,可得到解密后的DES密文,置换输出数据为:“ 11000010 ”
所以得到DES的解密密文为:“ MC ”

4.DES加密密钥的生成

DES子密钥(K1、K2)的产生具体流程如下图3所示:
在这里插入图片描述
假设8bit的通用密钥(初始密钥)为:K0 = 10011001。
(1)基于表7对K0进行选择置换

表7 选择置换1
输入bit位置 输出bit位置
1 8
2 7
3 1
4 3
5 6
6 2
7 5
8 4

置换后的结果为:00110101。

(2)将置换后的结果分为分为上位4bit和下位4bit,分别表示为:

C 0 = 0011

D 0 = 0101

(3)根据表8,对C 0、D 0进行左循环,C 0、D 0分别左巡回1bit,所以:
C 1 = 0110

D 1 = 1010

表8 左巡回变换的bit数
段数 变换bit数
1 1
2 2

(4)将C1、D1合并,并对其进行压缩置换,将8bit压缩为6bit,压缩置换表如表9所示:

表9 压缩置换表

输出bit位置 输入bit位置
1 7
2 5
3 1
4 8
5 6
6 2

得出第一段中使用的加密密钥K1 = 110001。

(5)根据表8,对C1、D1进行左循环,C1、D1分别左巡回2bit,所以:

C 2 = 1001

D 2 = 1010

(6)将C 2、D 2合并,按照表9并对其进行压缩置换,将 8bit压缩为6bit,压缩后的结果为:
K 2 = 111000

4.DES解密密钥的生成

加密密钥是在通用密钥K0的基础上,按照K1、K2的顺序生成,相反,将密文还原成明文的解密密钥是在通用密钥K0的基础上按照K2、K1的顺序生成,因此加密密钥采用向左巡回变换的处理方式,生成解密密钥则采用向右巡回变换的处理方式。

(1)基于表7对K0进行选择置换,置换后的结果为:00110101。

(2)将置换后的结果分为分为上位4bit和下位4bit,分别表示为:

C 0 = 0011

D 0 = 0101

(3)根据表10,对C 0、D 0进行右循环,C 0、D 0分别右巡回1bit,所以:
C 1 = 1001

D 1 = 1010

表10 右巡回变换的bit数
段数 变换bit数
1 1
2 2

(4)将C1、D1合并,并对其进行压缩置换,将8bit压缩为6bit,压缩置换表如表9所示:

得出第一段中使用的加密密钥K2 = 111000。

(5)根据表10,对C1、D1进行右循环,C1、D1分别右巡回2bit,所以:

C 2 = 0110

D 2 = 1010

(6)将C 2、D 2合并,按照表9并对其进行压缩置换,将 8bit压缩为6bit,压缩后的结果为:
K 1 = 110001