数据加密标准 DES(data encryption standard)算法是由美国 IBM 公司研制
的一种分组密码算法,是一个迭代分组密码。
DES 是一个使用最为广泛的加密算法,虽然从 DES 出现后又产生了许多常规
加密算法,但 DES 仍是此类算法中最重要的一个。
在正式讨论 DES 算法之前,为了更好的理解算法的实际工作过程,我们先来
看一个简化的 DES 算法,以此加深对 DES 算法的理解。
图 6.9 简单 DES 的加密过程
一、简单 DES
简单 DES 的加密算法是以 8bit 的明文分组和 10bit 密钥作为输入,产生 8bit
密文分组作为输出。
1、加密过程
简单 DES 的加密过程如图 6.9 所示。
2、加密算法构成:
简单 DES 的加密算法包括 4 个基本函数:一个初始置换函数 IP;一个 fk 函
数;一个用来交换数据的 SW 置换函数;一个逆置换函数 IP-1。
(1)初始置换函数 IP
数据原先
所在位置
IP 置换
2
6
3
1
4
8
5
7
初始置换 IP 是将明文 M 中数据的排列顺序按一定的规则重新排列,而生成
新的数据序列的过程。如图 6.10 所示:
图 6.10 简单 DES 的初始置换
设 8bit 数据 K 各位分别为 K1、K2、K3、K4、K5、K6、K7、K8,则经过 IP
置换后,各位分别为 K2、K6、K3、K1、K4、K8、K5、K7。
例:设 8bit 数据为 11110011 ,则初始置换的结果为:
经 IP 置换
11110011
10111101
(2)fk 函数
fk 函数是多个置换函数和替代函数的组合函数。fk 函数将输入它的 8bit 数
据进行分组,分成左 4 位和右 4 位,然后进行如下运算。
fk(L,R)=(L⊕F(R,SK),R)
L 输入的左边 4 位分组
R 输入的右边 4 位分组
⊕ 逐位异或
(3)F(R,SK)函数
F(R,SK)函数是 fk 函数的核心函数,其中 SK 是子密钥。F(R,SK)函数
的运算方法如下:
E/P
4
1
2
3
2
3
4
1
1)扩展/置换 E/P
图 6.11 简单 DES 的扩展/置换
扩展/置换是将 4bit 输入数据经过置换和扩展而产生 8bit 数据的算法,如
图 6.11 所示。
2)与 8 位子密钥 SK 逐位异或
异或运算如图 6.12 所示。
A ⊕ B
结果
0
0
1
1
1
0
0
1
1
0
1
0
图 6.12 异或运算
1
3
0
3
0
2
2
1
3
1
1
3
2
0
3
2
0
2
3
2
1
0
0
1
2
1
1
0
3
3
0
3
S0 =
S1=
图 6.13
S 盒
图 6.14
S 盒运算
3)S 盒输出
简单 DES 算法使用两个 S 盒 S0 和 S1。如图 6.13 所示。其运算方法是将 4bit
数据输入 S 盒,第一和第四比特数据作为 2 比特数值,这个数值用来指定 S 盒的
一行。第二和第三比特数据也作为 2 比特数值,这个数值用来指定 S 盒的一列。
对应 S 盒中该行该列的数值用二进制表示,既为 S 盒的 2bit 输出。其运算方法
如图 6.14 所示。
4)P4 置换
P4
2
4
3
1
由 S0 和 S1 产生的 4bit 数据经 P4 置换,产生 4bit 数据的输出。P4 置换的方
法如图 6.15 所示。
图 6.15
P4 置换
(4)交换函数(SW) :
交换函数 SW 是将 8bit 输入数据的左四位与右四位交换位置之后产生 8bit
数据的输出。其运算方法如图 6.16 所示。
1
1
0
1
1
0
1
1
1
1
1
0
0
1
1
1
图 6.16
SW 运算
(5)逆置换函数 IP-1
逆置换函数 IP-1 是将 8bit 输入数据置换为 8bit 数据输出。其运算方法如图
6.17 所示。
IP-1
4
1
3
5
7
2
8
6
图 6.17 逆置换函数 IP-1
3、子密钥生成
简单 DES 密钥是使用
一个发送方和接收方共
享的 10bit 密钥。运算中
使用的两个 8bit 子密钥
就是从这个 10bit 密钥生
成。
输入:10bit 密钥
输出:两个 8bit 子密钥
图 6.18 简单 DES 的子密钥生成
(1)子密钥生成过程
简单 DES 的两个 8bit
子密钥的生成过程如图
6.18 所示。
(2)算法构成:
P10
3
5
2
7
4
10
1
9
8
6
P8
6
3
7
4
8
5
10
9
简单 DES 的子密钥生成算法主要由置换函数 P10 和置换函数 P8 这两个置换
函数加上循环左移构成。设 10bit 数据从左到右依次为
(k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)则置换方式如图 6.19 所示。
10000 01100
00001 11000
1010000010
10100100
00100 00011
01000011
子密钥 K1
子密钥 K2
图 6.19
P10 和 P8 置换
图 6.20 子密钥的生成
P10(k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)=
(k3,k5,k2,k7,k4,k10,k1,k9,k8,k6,);
P8(k1,k2,k3,k4,k5,k6,k7,k8,k9,k10)=(k6,k3,k7,k4,k8,k5,k10,k9)
(3)子密钥生成
例:设密钥为 1010000010 ,则子密钥的生成过程如图 6.20 所示。
4、加密过程举例
设 8bit 明文为 11110011,使用前例中的子密钥进行加密,其过程如图 6.21
所示。
二、DES 加密:
在讨论完简单 DES 加密的基础上,我们来进一步探讨 DES 的加密过程。
1、加密过程
DES 的加密过程如图 6.22 所示,其中的一轮运算要循环 16 次,每一次循环
都执行相同的过程,其具体过程如图 6.23 所示。
2、加密算法的构成:
DES 的加密算法和简单 DES 的加密算法相类似,也是主要包括 4 个基本函数:
一个初始置换函数 IP;一个 fk 函数;一个用来交换数据的 SW 置换函数;一个逆
置换函数 IP-1。
(1)IP 置换
图 6.22
DES 算法的一般过程