不仅仅是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 |
DES采用了64位的分组长度和56位的密钥长度,它将64位的输入经过一系列的变换得到64位的输出,解密则使用了相同的步骤和相同的密钥。
为了进行简易的说明,在该文章里我们以8bit为一组对简易DES密码进行分析,首先先把DES总的处理流程用下图1表示。
(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 ”,即
输入bit的位置 | 输出bit的位置 |
---|---|
1 | 3 |
2 | 4 |
3 | 1 |
4 | 2 |
5 | 3 |
6 | 4 |
所以:ER0 = 011001
(5)将扩大置换ER0和密钥K1 = 110001进行异或运算:
具体压缩变换的过程如下:第(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表示为如下等式:
(12)将6bit换位4bit后,在对其进行置换变换提高其混乱度,置换变换表5所示,置换后的结果为 ’ 0001 ‘,所以:
输入bit的位置 j | 输出bit的位置 k |
---|---|
1 | 2 |
2 | 4 |
3 | 6 |
4 | 8 |
5 | 1 |
6 | 3 |
7 | 5 |
8 | 7 |
得到置换输出数据为:“ 11101010 ”
所以得到DES的加密密文为:“ OK ”
由于解密的过程和加密的过程是相同的,所以解密的流程可参考图1,但是加密的时候,密钥的使用流程是K1、K2,解密时需要将其顺序颠倒,在第一段里使用K2,第二段里使用K1。
(1)将密文“ 11101010 ”作为明文二进制按照表2进行初期置换,置换后的结果为“ 10001111 ”。
(2)将(1)中得出的二进制数据分割为左侧“ 1000 ”和右侧“ 1001 ”,即
(3)根据表3对R0进行扩大置换,把4bit变为6bit,所以:
(6)将6bit换位4bit后,在对其进行置换变换提高其混乱度,置换变换如表5所示,置换的结果为 “ 0001 ”,所以:
(7)将第一段的输出,左侧L1和右侧R1分别用下列等式表示:
(11)将6bit换位4bit后,在对其进行置换变换提高其混乱度,置换变换表5所示,置换后的结果为 ’ 0111 ‘,所以:
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,分别表示为:
段数 | 变换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,所以:
加密密钥是在通用密钥K0的基础上,按照K1、K2的顺序生成,相反,将密文还原成明文的解密密钥是在通用密钥K0的基础上按照K2、K1的顺序生成,因此加密密钥采用向左巡回变换的处理方式,生成解密密钥则采用向右巡回变换的处理方式。
(1)基于表7对K0进行选择置换,置换后的结果为:00110101。
(2)将置换后的结果分为分为上位4bit和下位4bit,分别表示为:
段数 | 变换bit数 |
---|---|
1 | 1 |
2 | 2 |
(4)将C1、D1合并,并对其进行压缩置换,将8bit压缩为6bit,压缩置换表如表9所示:
得出第一段中使用的加密密钥K2 = 111000。
(5)根据表10,对C1、D1进行右循环,C1、D1分别右巡回2bit,所以: