对称密码学之现代密码学-简易版DES加密、解密
简易版DES加密详解
1.二进制数据的转换
不仅仅是DES密码,在其它的现代密码中也应用了二进制数据,所以无论是文章还是数字,都需要将明文变换为二进制数据,如表1所示,这里仅将使用的16字符(其中含有1个没有意义的空字符),将每个字符都对应不同的4bit的二进制编码进行变换,将明文表示成"0"和"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)首先把要加密的明文按照表1变成“ 0 ” 或“ 1 ”的排列,这就是明文要输入的二进制。例如我们要发送的明文是“ MC ”,按照表1,“ MC ” = ( 1100 0010 )。
(2)明文二进制按照表2进行初期置换,置换的过程如图2所示,置换后的结果为“ 10001001 ”。
输入bit的位置 j | 输出bit的位置 k |
---|---|
1 | 5 |
2 | 1 |
3 | 6 |
4 | 2 |
5 | 7 |
6 | 3 |
7 | 8 |
8 | 4 |
(3)将(2)中得出的二进制数据分割为左侧“ 1000 ”和右侧“ 1001 ”,即
(4)根据表3对R0进行扩大置换,把4bit变为6bit。
输入bit的位置 | 输出bit的位置 |
---|---|
1 | 3 |
2 | 4 |
3 | 1 |
4 | 2 |
5 | 3 |
6 | 4 |
所以:ER0 = 011001
(5)将扩大置换ER0和**K1 = 110001进行异或运算:
(6)基于表4,将第(5)步中的结果进行压缩变换,把6bit变为4bit。
具体压缩变换的过程如下:第(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所示。
输入bit的位置 | 输出bit的位置 |
---|---|
1 | 3 |
2 | 4 |
3 | 1 |
4 | 2 |
得到置换后的数据为:“ 0111 ”
注:将第(4)、(5)、(6)、(7)步的处理运算用非线性函数F表示为如下等式:
(8)将第一段的输出,左侧L1和右侧R1分别用下列等式表示:
(9)第二阶段与第一阶段相同,讲过从第(4)步到第(8)的反复计算便可得到加密后的数据,根据表3对R1进行扩大置换,把4bit变为6bit。
(10)将扩大置换ER1和**K2 = 111000进行异或运算:
(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 ‘,所以:
(13)将第二段的输出,左侧L2和右侧R2分别用下列等式表示:
(14)在最后段里将L2与R2进行调换:
(15)将L2’ 和R2'合并为“ 10001111 ”后,基于表6进行最后的置换,可得到加密后的DES密文。
输入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 ”,即
(3)根据表3对R0进行扩大置换,把4bit变为6bit,所以:
(4)将扩大置换ER0和**K2 = 111000进行异或运算:
(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 ”,所以:
(7)将第一段的输出,左侧L1和右侧R1分别用下列等式表示:
(8)第二阶段与第一阶段相同,从第(3)步到第(6)的反复计算便可得到加密后的数据,根据表3对R1进行扩大置换,把4bit变为6bit。
(9)将扩大置换ER1和**K1 = 110001进行异或运算:
(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 ‘,所以:
(12)将第二段的输出,左侧L2和右侧R2分别用下列等式表示:
(13)在最后段里将L2与R2进行调换:
(14)将L2’ 和R2'合并为“ 10001001 ”后,基于表6进行最后的置换,可得到解密后的DES密文,置换输出数据为:“ 11000010 ”
所以得到DES的解密密文为:“ MC ”
4.DES加***的生成
DES子**(K1、K2)的产生具体流程如下图3所示:
假设8bit的通用**(初始**)为:K0 = 10011001。
(1)基于表7对K0进行选择置换
输入bit位置 | 输出bit位置 |
---|---|
1 | 8 |
2 | 7 |
3 | 1 |
4 | 3 |
5 | 6 |
6 | 2 |
7 | 5 |
8 | 4 |
置换后的结果为:00110101。
(2)将置换后的结果分为分为上位4bit和下位4bit,分别表示为:
(3)根据表8,对C0、D0进行左循环,C0、D0分别左巡回1bit,所以:
段数 | 变换bit数 |
---|---|
1 | 1 |
2 | 2 |
(4)将C1、D1合并,并对其进行压缩置换,将8bit压缩为6bit,压缩置换表如表9所示:
输出bit位置 | 输入bit位置 |
---|---|
1 | 7 |
2 | 5 |
3 | 1 |
4 | 8 |
5 | 6 |
6 | 2 |
得出第一段中使用的加***K1 = 110001。
(5)根据表8,对C1、D1进行左循环,C1、D1分别左巡回2bit,所以:
(6)将C2、D2合并,按照表9并对其进行压缩置换,将8bit压缩为6bit,压缩后的结果为:
4.DES解***的生成
加***是在通用**K0的基础上,按照K1、K2的顺序生成,相反,将密文还原成明文的解***是在通用**K0的基础上按照K2、K1的顺序生成,因此加***采用向左巡回变换的处理方式,生成解***则采用向右巡回变换的处理方式。
(1)基于表7对K0进行选择置换,置换后的结果为:00110101。
(2)将置换后的结果分为分为上位4bit和下位4bit,分别表示为:
(3)根据表10,对C0、D0进行右循环,C0、D0分别右巡回1bit,所以:
段数 | 变换bit数 |
---|---|
1 | 1 |
2 | 2 |
(4)将C1、D1合并,并对其进行压缩置换,将8bit压缩为6bit,压缩置换表如表9所示:
得出第一段中使用的加***K2 = 111000。
(5)根据表10,对C1、D1进行右循环,C1、D1分别右巡回2bit,所以:
(6)将C2、D2合并,按照表9并对其进行压缩置换,将8bit压缩为6bit,压缩后的结果为: