103
1 分分分分分分分分分分 DES 分分 分分分分分分分 《》 4 分 (2)

分组密码: 数据加密标准 DES 算法

Embed Size (px)

DESCRIPTION

分组密码: 数据加密标准 DES 算法. 《 现代密码学 》 第 4 章 (2). 本节主要内容. 1 、数据加密标准 DES 的产生 2 、 S-DES 算法 3 、 DES 加密与解密过程 4 、 DES 的安全性分析 5 、 DES 的改进与实现 6 、作业. 美国国家标准局 1973 年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于 1973 年 5 月 15 日和 1974 年 8 月 27 日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的(通常称为 DES 密码算法要求)主要为以下四点: - PowerPoint PPT Presentation

Citation preview

Page 1: 分组密码: 数据加密标准 DES 算法

1

分组密码:数据加密标准 DES 算法

《现代密码学》第 4 章 (2)

Page 2: 分组密码: 数据加密标准 DES 算法

2

本节主要内容

1 、数据加密标准 DES 的产生 2 、 S-DES 算法 3 、 DES 加密与解密过程 4 、 DES 的安全性分析 5 、 DES 的改进与实现 6 、作业

Page 3: 分组密码: 数据加密标准 DES 算法

3

1. 数据加密标准 DES 的产生 美国国家标准局 1973 年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于 1973 年 5 月 15 日和 1974 年 8 月 27 日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的(通常称为 DES 密码算法要求)主要为以下四点: ( 1 )提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改; ( 2 )具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握; ( 3 ) DES 密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础; ( 4 )实现经济,运行有效,并且适用于多种完全不同的应用。

Page 4: 分组密码: 数据加密标准 DES 算法

4

1977 年 1 月,美国政府颁布:采纳 IBM 公司设计的方案作为非机密数据的正式数据加密标准( DES Data Encryption Standard )。

1. 数据加密标准 DES 的产生

Page 5: 分组密码: 数据加密标准 DES 算法

5

数据加密标准( data encryption standard, DES )是迄今为止世界上最为广泛使用和流行的一种分组密码算法,它的分组长度为 64 比特,密钥长度为 56 比特,它是由美国 IBM 公司研制的,是早期的称作 Lucifer 密码的一种发展和修改。 DES 在 1975 年 3 月 17 日首次被公布在联邦记录中,经过大量的公开讨论后, DES 于 1977 年 1月 15 日被正式批准并作为美国联邦信息处理标准,即 FIPS-46 ,同年 7 月 15 日开始生效。

1. 数据加密标准 DES 的产生

Page 6: 分组密码: 数据加密标准 DES 算法

6

规定每隔 5 年由美国国家保密局( national security agency, NSA )作出评估,并重新批准它是否继续作为联邦加密标准。最近的一次评估是在 1994 年 1 月,美国已决定 1998 年 12 月以后将不再使用 DES 。 1997 年 DESCHALL 小组经过近 4 个月的努力,通过 Internet 搜索了 3×1016 个密钥,找出了 DES的密钥,恢复出了明文。

1. 数据加密标准 DES 的产生

Page 7: 分组密码: 数据加密标准 DES 算法

7

1998 年 5 月美国 EFF(electronics frontier foundation) 宣布,他们以一台价值 20万美元的计算机改装成的专用解密机,用 56 小时破译了 56 比特密钥的 DES 。美国国家标准和技术协会已征集并进行了几轮评估、筛选,产生了称之为 AES(advanced encryption standard) 的新加密标准。尽管如此, DES对于推动密码理论的发展和应用毕竟起了重大作用,对于掌握分组密码的基本理论、设计思想和实际应用仍然有着重要的参考价值,下面首先来描述这一算法。

1. 数据加密标准 DES 的产生

Page 8: 分组密码: 数据加密标准 DES 算法

8

Simplified DES 方案,简称 S-DES 方案。它是一个供教学而非安全的加密算法,它与DES 的特性和结构类似,但参数小。注: 1.* 加密算法涉及五个函数:(1) 初始置换 IP(initial permutation)(2) 复合函数 fk1 ,它是由密钥 K 确定的,具有置换和代换的运算。 (3) 置换函数 SW(4) 复合函数 fk2

(5) 初始置换 IP 的逆置换 IP-1

2. 简化的 DES

Page 9: 分组密码: 数据加密标准 DES 算法

9

加密

S-DES 方案示意图10bit 密

钥 解密

8bit明文 P10 8bit明文

IP 移位 IP-1

P8fk fk

SW SW移位

P8fk fk

IPIP-1

8bit 密文 8bit 密文

K2 K2

K1K1

Page 10: 分组密码: 数据加密标准 DES 算法

10

IP-1*fk2*SW*fk1*IP也可写为密文 =IP-1 ( fk2(SW(fk1(IP( 明文 )))))其中 K1=P8( 移位 (P10( 密钥 K)))K2=P8( 移位 ( 移位 (P10( 密钥 K))))

解密算法的数学表示:明文 =IP-1 ( fk1(SW(fk2(IP( 密文 )))))

S-DES 加密算法的数学表示

Page 11: 分组密码: 数据加密标准 DES 算法

11

对 S-DES 的深入描述( 1 ) S-DES 的密钥生成:

设 10bit 的密钥为( k1,k2,…,k10 )置换 P10 是这样定义的

P10(k1,k2,…,k10)=(k3,k5,k2,k7,k4,k10,k1,k9,k8,k6) P8= (k1,k2,…,k10)=(k6,k3,k7,k4,k8,k5,k10,k9 )

LS-1 为循环左移 1 位, LS-2 为循环左移 2 位 按照上述条件 , 若 K 选为 (1010000010), 产生

的两个子密钥分别为 K1=(1 0 1 0 0 1 0 0),K2=(0 1 0 0 0 0 1 1)

Page 12: 分组密码: 数据加密标准 DES 算法

12

(2) S-DES 的加密运算 : 初始置换用 IP 函数 : IP= 1 2 3 4 5 6 7 8

2 6 3 1 4 8 5 7 末端算法的置换为 IP 的逆置换 :IP-1= 1 2 3 4 5 6 7 8 4 1 3 5 7 2 8 6 易见 IP-1(IP(X))=X

Page 13: 分组密码: 数据加密标准 DES 算法

13

S-DES 加密图8-bit 明文

IP

E/P

+

S0 S1

P4

+

L R

4

K1

844

fk

F

4

Page 14: 分组密码: 数据加密标准 DES 算法

14

S-DES 加密图 ( 续 )

E/P

+

S0 S1

8K2

P4

+

IP-1

8-bit 密文

4

8

44fk

F4 4

2 2

8

SW

Page 15: 分组密码: 数据加密标准 DES 算法

15

函数 fk ,是加密方案中的最重要部分,它可表示为:fk(L,R)=(LF(R,SK),R) ,其中 L , R 为 8 位输入 , 左右各为 4 位 , F 为从 4 位集到 4 位集的一个映射 , 并不要求是 1-1 的。 SK 为子密钥。 对映射 F 来说: 首先输入是一个 4- 位数( n1,n2,n3,n4 ),第一步运算是扩张 / 置换( E/P )运算: E/P 4 1 2 3 2 3 4 1 事实上,它的直观表现形式为: n4 n1 n2 n3 n2 n3 n4 n1

Page 16: 分组密码: 数据加密标准 DES 算法

16

8-bit 子密钥: K1=(k11,k12,k13,k14,k15,k16,k17,k1

8), 然后与 E/P 的结果作异或运算得:n4+k11 n1+k12 n2+k13 n3+k14n2+k15 n3+k16 n4+k17 n1+k18

把它们重记为 8 位: P0,0 P0,1 P0,2 P0,3 P1,0 P1,1 P1,2 P1,3 上述第一行输入进 S- 盒 S0 ,产生 2- 位的输出;第二行的 4 位输入进 S 盒 S1 ,产生 2- 位的输出。

Page 17: 分组密码: 数据加密标准 DES 算法

17

两个 S 盒按如下定义:

2313

3120

0123

2301

3

2

1

03210

0S

3012

0103

3102

3210

3

2

1

03210

1S

Page 18: 分组密码: 数据加密标准 DES 算法

18

S 盒按下述规则运算: 将第 1 和第 4 的输入比特做为 2- bit 数,指示为 S 盒的一个行;将第 2 和第 3 的输入比特做为S 盒的一个列。如此确定为 S 盒矩阵的( i,j )数。 例如:( P0,0, P0,3 ) =(00), 并且 (P0,1,P0,2)=(1 0)确定了 S0 中的第 0 行 2 列( 0 , 2 )的系数为 3 ,记为( 1 1 )输出。由 S0, S1 输出 4-bit 经置换 P4

2 4 3 1它的输出就是 F 函数的输出。

Page 19: 分组密码: 数据加密标准 DES 算法

19

S-DES 的密钥生成

10-bit 密钥P10

LS-1 LS-1

LS-2 LS-2

P8

P8

K1

8

K2

5 5

55

8

Page 20: 分组密码: 数据加密标准 DES 算法

20

S-DES 的安全性分析

对 10 bit 密钥的强行攻击是可行的密钥空间: 2^10=1024密码分析:利用已知明文攻击:已知 : 明文( p1,p2,……,p8), 及对应的密文( c1,c2,……,c8),未知: (k1,k2, ……, k10)Ci 是 pj’s 和 kj’s 的函数这些加密算法可以表示成 8 个含 10 个变量的非线性方程非线性是由 S盒作用的结果

Page 21: 分组密码: 数据加密标准 DES 算法

21

S0 的非线性表示如下: 设 a,b,c,d 为输入的 4 个比特,输出的两个比特

分别为 q,r. 则 q=abcd+ab+ac+b+d mod2 r=abcd+abd+ab+ac+ad+a+c+1 mod2 线性映射与非线性映射交替产生了复杂的密文

比特输出函数,使得密码分析很困难。(可以试图寻找 8 个密文比特的复杂度)

S-DES 的安全性分析

Page 22: 分组密码: 数据加密标准 DES 算法

22

图 4.5 是 DES 加密算法的框图,其中明文分组长为 64 比特,密钥长为 56 比特。图的左边是明文的处理过程,有 3 个阶段,首先是一个初始置换 IP ,用于重排明文分组的 64 比特数据。然后是具有相同功能的 16轮变换,每轮中都有置换和代换运算,第 16轮变换的输出分为左右两半,并被交换次序。最后再经过一个逆初始置换 IP-1 (为 IP 的逆)从而产生 64 比特的密文。除初始置换和逆初始置换外, DES 的结构和图 4.3所示的 Feistel 密码结构完全相同。

3.DES 描述

Page 23: 分组密码: 数据加密标准 DES 算法

23图 4.5 DES 加密算法框图

DES 加密算法框图

Page 24: 分组密码: 数据加密标准 DES 算法

24

图 4.5 的右边是使用 56 比特密钥的方法。密钥首先通过一个置换函数,然后,对加密过程的每一轮,通过一个左循环移位和一个置换产生一个子密钥。其中每轮的置换都相同,但由于密钥被重复迭代,所以产生的每轮子密钥不相同。

Page 25: 分组密码: 数据加密标准 DES 算法

25

DES 加密算法描述64 比特明文

初始置换

第 1轮

第 2轮

第 16轮

左右交换

初始逆置换

64 比特密文

56 比特密钥

置换选择 1

左循环移位置换选择 11K

左循环移位置换选择 12K

左循环移位置换选择 116K

DES 加密算法框图

Page 26: 分组密码: 数据加密标准 DES 算法

26

DES 一轮加密的简图

Li-1 Ri-1

F

+

Li Ri

Ki

Page 27: 分组密码: 数据加密标准 DES 算法

27

DES 加密过程描述

Page 28: 分组密码: 数据加密标准 DES 算法

28

DES 加密算法描述

第 i轮迭代

P

Ri-1 (32bit) Ki(48bit)

E

E(Ri-1) (48bit)

B1 B2 B3 B4 B5 B6 B7 B8

f(Ri-1 ,Ki)

S1 S2 S3 S4 S5 S6 S7 S8

C1 C2 C3 C4 C5 C6 C7 C8

(重排:有重复 )

M(64bit)

L0(32bit) R0(32bit)

Li-1 Ri-1

IP-1

C (64bit)

Li Ri

f Ki(48bit)

IP ( 置换 )

R16(32bit) L16(32bit)

Page 29: 分组密码: 数据加密标准 DES 算法

29

IP 初始置换

(a)初始置换 IP

Page 30: 分组密码: 数据加密标准 DES 算法

30

(b)初始逆置换

Page 31: 分组密码: 数据加密标准 DES 算法

31

DES 的描述在前面函数 f 的图示中,扩展置换(选择运算) E 的定义为:

32 1 2 3 4 54 5 6 7 8 98 9 10 11 12 13

12 13 14 15 16 1716 17 18 19 20 2120 21 22 23 24 2524 25 26 27 28 2928 29 30 31 32 1

置换运算 P 的定义为:16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9

19 13 30 6 22 11 4 25

Page 32: 分组密码: 数据加密标准 DES 算法

32

轮结构

Des 加密算法的轮结构

1iL

32 比特1iR

32 比特

扩展 /置换( E表)

XOR

代换 /选择( S盒)

置换 (p)

XOR

iRiL

48

48

32

32

1iC

28 比特1iD

28 比特

左移位 左移位

置换选择 2

iDiC

iK

Page 33: 分组密码: 数据加密标准 DES 算法

33

首先看图的左半部分。将 64 比特的轮输入分成各为 32 比特的左、右两半,分别记为 L 和 R。和 Feistel网络一样,每轮变换可由以下公式表示:

1

1 1( , )i i

i i i i

L R

R L F R K

Page 34: 分组密码: 数据加密标准 DES 算法

34

DES 加密算法的轮结构

Page 35: 分组密码: 数据加密标准 DES 算法

35

R(32 比特 )

E

R(48 比特 )

K(48 比特 )

S1 S1 S1 S1 S1 S1 S1 S1

P

32 比特

函数 F(R , K) 的计算过程

Page 36: 分组密码: 数据加密标准 DES 算法

36

每个 S 盒的输入为 6 比特,输出为 4 比特,其变换关系如下:

S 盒

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15列行

0123

S1

14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 015 12 8 2 4 9 1 7 5 11 3 14 10 0 613

S1 盒的变换表

Page 37: 分组密码: 数据加密标准 DES 算法

37

(类比于 S-DES ) ,F ( Ri-1, Ki )函数 F 以长度为 32 的比特串 A=R ( 32bits )作第一个输入,以长度为 48 的比特串变元 J=K(48bits) 作为第二个输入。产生的输出为长度为 32 的位串。(1) 对第一个变元 A ,由给定的扩展函数 E ,将其扩展成 48 位串, E ( A )(2) 计算 E ( A ) +J ,并把结果写成连续的 8 个 6 位串 ,B=b1b2b3b4b5b6b7b8

对 F 函数的说明

Page 38: 分组密码: 数据加密标准 DES 算法

38

(3)使用 8 个 S盒,每个 Sj是一个固定的 416矩阵,它的元素取 0~15 的整数。给定长度为 6 个比特串,如 Bj=b1b2b3b4b5b6, 计算 Sj(Bj) 如下: b1b6 两个比特确定了 Sj的行数 , r(0<=r<=3); 而b2b3b4b5 四个比特确定了 Sj的列数 c ( 0<=c<=15 )。最后 Sj(Bj)的值为 S-盒矩阵 Sj中 r 行 c列的元素( r,c ) , 得 Cj=Sj(Bj)。(4) 最后, P 为固定置换。

对 F 函数的说明

Page 39: 分组密码: 数据加密标准 DES 算法

39

DES 轮函数 F()

Page 40: 分组密码: 数据加密标准 DES 算法

40

其中轮密钥 Ki 为 48 比特,函数 F(R,K)的计算过程如图 4.7所示。轮输入的右半部分 R为 32 比特, R首先被扩展成 48 比特,扩展过程由表 3.2(c)定义,其中将 R的 16个比特各重复一次。扩展后的 48 比特再与子密钥 Ki异或,然后再通过一个 S盒,产生32 比特的输出。该输出再经过一个由表 3.2(d)定义的置换,产生的结果即为函数 F(R,K)的输出。

Page 41: 分组密码: 数据加密标准 DES 算法

41图 4.7 函数 F(R,K)的计算过程

Page 42: 分组密码: 数据加密标准 DES 算法

42

F 中的代换由 8 个 S盒组成,每个 S盒的输入长为 6 比特、输出长为 4 比特,其变换关系由表 3.3 定义,每个 S盒给出了 4 个代换(由一个表的 4 行给出)。(见 42页表 3.3 )

Page 43: 分组密码: 数据加密标准 DES 算法

43

对每个盒 Si ,其 6 比特输入中,第 1 个和第 6个比特形成一个 2位二进制数,用来选择 Si 的 4个代换中的一个。 6 比特输入中,中间 4位用来选择列。行和列选定后,得到其交叉位置的十进制数,将这个数表示为 4位二进制数即得这一 S盒的输出。例如, S1 的输入为 011001 ,行选为 01 (即第 1行),列选为 1100 (即第 12列),行列交叉位置的数为 9 ,其 4位二进制表示为 1001 ,所以 S1 的输出为 1001 。 S盒的每一行定义了一个可逆代换,图 4.2 (在 3.1.1节)表示 S1第 0 行所定义的代换。

Page 44: 分组密码: 数据加密标准 DES 算法

44

A=R(32 bits) J=K(48 bits)

E

E(A) 为 48 bits +

B1 B2 B3 B4 B5 B6 B7 B8

S1 S2 S3 S4 S5 S6 S7 S8

C1 C2 C3 C4 C5 C6 C7 C8

P

32 bits F(A,J)

B 写成 8 个 6 比特串

DES 的 F 函数

Page 45: 分组密码: 数据加密标准 DES 算法

45

初始置换 IP :对明文输入进行次序的打乱。 逆置换 IP-1 :

扩展函数 E;( 32 到 48 ) 置换函数 P。

DES 中使用的特定函数

Page 46: 分组密码: 数据加密标准 DES 算法

46

初始置换 IP :从表 3.2 中看出 X 的第 58个比特是 IP ( X )的第一个比特; X 的第50 个比特是 IP ( X )的第二个比特…

逆置换 IP-1 ;扩展函数 E ;置换函数 P 。

DES 中使用的其它特定函数

Page 47: 分组密码: 数据加密标准 DES 算法

47

再看图 4.5 和图 4.6 ,输入算法的 56 比特密钥首先经过一个置换运算,该置换由表 3.4(a) 给出,然后将置换后的 56 比特分为各为 28 比特的左、右两半,分别记为 C0 和 D0 。在第 i 轮分别对 Ci-1 和Di-1进行左循环移位,所移位数由表 3.4(c) 给出。移位后的结果作为求下一轮子密钥的输入,同时也作为置换选择 2 的输入。通过置换选择 2产生的 48 比特的 Ki ,即为本轮的子密钥,作为函数 F(Ri-1,Ki)的输入。其中置换选择 2 由表 3.4(b)定义。(见 44页表 3.4 )

密钥的产生

Page 48: 分组密码: 数据加密标准 DES 算法

48

从密钥 K 计算子密钥 实际上, K 是长度为 64 的位串,其中 5

6 位是密钥, 8 位是奇偶校验位(为了检错),在密钥编排的计算中,这些校验位可略去。(1). 给定 64 位的密钥 K ,放弃奇偶校验位( 8 , 16 ,…, 64 )并根据固定置换 PC-1 (见 144页图 4-4-9 )来排列 K 中剩下的位。我们写 PC-1(K)=C0D0其中 C0 由 PC-1 ( K )的前 28 位组成; D0 由后 28 位组成。

Page 49: 分组密码: 数据加密标准 DES 算法

49

(2) 对 1<=i<=16 ,计算 Ci=LSi(Ci-1);Di=LSi(Di-1)LSi 表示循环左移 2 或 1 个位置,取决于 i 的的值。 i=1,2,9 和 16 时移 1 个位置,否则移 2 位置。Ki=PC-2(CiDi), PC-2 为固定置。

注:一共 16 轮,每一轮使用 K 中 48 位组成一个 48比特密钥。可算出 16 个表,第 i 个表中的元素可对应上第 i 轮密钥使用 K 中第几比特!如:第 7 轮的表 7 : K7取 K 中的比特情况:52 57 11 1 26 59 10 34 44 51 25 199 41 3 2 50 35 36 43 42 33 60 1828 7 14 29 47 46 22 5 15 63 61 394 31 13 38 53 62 55 20 23 37 30 6

Page 50: 分组密码: 数据加密标准 DES 算法

50

DES 的密钥扩展各轮迭代一共使用 16 个加密子密钥 K1,K2,,K16 ,

它们依据所给 56bit 主密钥 K 按下述扩展算法产生:K(56bit)

C0(28bit) D0(28bit)

PC-1 ( 置换 )

LS1 LS1

C1 D1

C16 D16

LS16 LS16

PC-2

PC-2

K1(48bit)

K16(48bit)

( 选取:有舍弃 )

其中,

其它,2

16,9,2,1,1 iLS i

Page 51: 分组密码: 数据加密标准 DES 算法

51

密钥的产生K

PC-1

C0 D0

LS1 LS1

C1 D1

LS2 LS2

PC-2 K1

C2 D2

LS3 LS3

PC-2 K2

LSi表示循环左移一个或两个位置其中 i 为 1 , 2 , 9 , 16移一个位置其余移两个位置

Page 52: 分组密码: 数据加密标准 DES 算法

52

57 49 41 33 25 17 9

1 58 50 42 34 26 18

10 2 59 51 43 35 27

19 11 3 60 52 44 36

63 55 47 39 31 23 15

7 62 54 46 38 30 22

14 6 61 53 45 37 29

21 13 5 28 20 12 4

14 17 11 24 1 5

3 28 15 6 21 10

23 19 12 4 26 8

16 7 27 20 13 2

41 52 31 37 47 55

30 40 51 45 33 48

44 49 39 56 34 53

46 42 50 36 29 32

PC-1置换 PC-2置换

在前面密钥扩展的图示中,置换 PC-1与选取 PC-2 分别为:

Page 53: 分组密码: 数据加密标准 DES 算法

53

DES 的描述注 . 对 i=1,2,,Ci、 Di 分别是由 C0、

D0左旋若干比特而得到,至 i=16 ,刚好左旋了 28 比特位而回复当初,即 :C16=C0 , D16=D0 。

人们往往把主密钥 K 顺序地每 7bit归为一组,共计 8 组,每一组都按应含奇数个1而在后面补上一个校验bit : 0或 1 。如此,K被扩展为一个长是 64 的比特串 K+ ,可用 16位十六进制数表示。 K+ 由安全信道传送,其带上 8 个校验比特(分别在第 8位、 16位、、 64位)就是为了对传输过程中可能出错进行检测和校对。

Page 54: 分组密码: 数据加密标准 DES 算法

54

取 16 进制明文 X : 0123456789ABCDEF 密钥 K 为: 133457799BBCDFF1 去掉奇偶校验位以二进制形式表示的密钥是 00010010011010010101101111001001101101111011011111111000应用 IP ,我们得到:L0=11001100000000001100110011111111L1=R0=11110000101010101111000010101010然后进行 16 轮加密。最后对 L16, R16 使用 IP-1 得到密文:85E813540F0AB405

DES 加密的一个例子

Page 55: 分组密码: 数据加密标准 DES 算法

55

DES 的解密过程脱密过程采用与加密过程一样的

算法,只不过须将加密过程中 16轮迭代所用的子密钥 ( 亦称为轮密钥 )

K1,K2,,K16

反序进行使用。 (在前面讲过的密钥扩展过程中若改 LSi 为

则也就可以依次产生这逆序的子密钥。 )

其它,2

16,9,2,11,0

ii

RS i

Page 56: 分组密码: 数据加密标准 DES 算法

56

DES 解密DES 解密与加密使用相同的算法,但子密钥的使用顺序相反。

E E

1K 2K

P X C

加密

E E

2K 1K

C X P

解密

二重 DES

Page 57: 分组密码: 数据加密标准 DES 算法

57

DES 的设计特色

在 DES 算法中,函数 是最基本的关键环节,其中

用 S-盒实现小块的非线性变换,达

到混乱目的;用置换 P 实现大块的非线性变换,

达到扩散目的。置换 P 的设计使每层 S-盒的 4bit输出

进入到下一层的 4 个不同 S-盒;每个 S-盒的输入由分属上一层中 4 个不同 S-盒的输出构成。

322

482

322: FFFf

Page 58: 分组密码: 数据加密标准 DES 算法

58

DES 的设计特色

S-盒的设计准则还没有完全公开。一

些密码学家怀疑美国 NSA(the National Se-

curity Agency) 设计 S-盒时隐藏了“陷门”,使得只有他们才知道破译算法,但没有证据能表明这一点。

Page 59: 分组密码: 数据加密标准 DES 算法

59

1976 年,美国 NSA披露了 S-盒的下述

几条设计原则:每个 S-盒的每一行是整数 0~15 的一

个全排列;每个 S-盒的输出都不是其输入的线

性或仿射函数;改变任一 S-盒任意 1bit 的输入,其

输出至少有 2bit 发生变化;

DES 的设计特色

Page 60: 分组密码: 数据加密标准 DES 算法

60

对任一 S-盒的任意 6bit输入 x ,S(x)

与 S(x001100) 至少有 2bit 不同;对任一 S-盒的任意 6bit输入 x ,及

,{0,1},都有 S(x)≠S(x1100);对任一 S-盒,当它的任一位输入保

持不变,其它 5位输入尽情变化时,所有诸 4bit输出中, 0与 1 的总数接近相等。

DES 的设计特色

Page 61: 分组密码: 数据加密标准 DES 算法

61

DES 的争论 DES 的核心是 S 盒,除此之外的计算是属线性的。 S 盒作为该密码体制的非线性组件对安全性至关重要。

S 盒的设计准则:1. S 盒不是它输入变量的线性函数2.改变 S 盒的一个输入位至少要引起两位的输出改变3. 对任何一个 S 盒,如果固定一个输入比特,其它输入变化时,输出数字中 0和 1 的总数近于相等。

Page 62: 分组密码: 数据加密标准 DES 算法

62

公众仍然不知道 S 盒的构造中是否还使用了进一步的设计准则(有陷门?)。

密钥长度是否足够? 迭代的长度?( 8、 16、 32?)

Page 63: 分组密码: 数据加密标准 DES 算法

63

4.DES 的安全问题

DES 的安全性完全依赖于所用的密钥。

自从其算法作为标准公开以来,人们对它的安全性就有激烈的争论。下面简要介绍20 年来人们就其安全方面的一些主要研究结果。

取反特性 . 对于明文组 M ,密文组C

和主密钥 K,若 C=DESK(M)则 ,其中 , 和 分别为 M,C 和 K的逐位取反。

)(MDESC K

M C K

Page 64: 分组密码: 数据加密标准 DES 算法

64

证明 . 若以 K为主密钥扩展的 16个

加密子密钥记为 K1,K2,,K16 ,则以 为主密钥扩展的 16 个加密子密钥为

注意到 ,不难看出

注意到 ,不难看出

K

1621 ,,, KKK

bababa )1()1(

16,,2,1),(),( 11 iKRfKRf iiii

babababa )(1)1(

16,,2,1,11 iRLRLRL iiii

J

iiiK

DES 的安全问题

Page 65: 分组密码: 数据加密标准 DES 算法

65

上述取补特性会使 DES 在选择明文攻

击下所需工作量减少一半:攻击者为破译所使用的密钥,选取两个明密文对 与 ,并对于可能密钥 ,计

算出 DESK(M)=C 。若 C=C1或 ,则分别说明 K或 为实际密钥。

),( 1CM

),( 2CM 562FK

K

2CC

DES 的安全问题

Page 66: 分组密码: 数据加密标准 DES 算法

66

弱密钥与半弱密钥 . 大多数密码体制都有某些明显的“坏密钥”, DES也不例外。

对于 ,若由 K扩展出来的加密子密钥为: K1,K2,,K15,K16 ,而由 K’扩展出来的加密子密钥却是: K16,K15,,K2,K1 ,即有 ,则称 K与 K’互为对合。

下面我们分析一下 中到底有些什么样的对合对?

KK DESDES 1

562FKK 、

562F

DES 的安全问题

Page 67: 分组密码: 数据加密标准 DES 算法

67

在 DES 的主密钥扩展中, C0 与 D0各自独

立地循环移位来产生加 (解 )密子密钥。若C0 与 D0 分别是 {00,11,10,01}中任意一个的 14 次重复,

则因这样的 C0 与 D0 都对环移 (无论左或右 )偶数位具有自封闭性,故

若 ,则由 K 扩展出来的加密子密钥为:K1,K2,K2,K2,K2,K2,K2,K2,K1,K1,K1,K1,K1,K1,K1,K2 ;

KDCPC )(1 001

DES 的安全问题

Page 68: 分组密码: 数据加密标准 DES 算法

68

把 C0 与 D0 各自左环移一位得 C1与 D1 ,

设 ,则由 K’扩展出来的加密子密钥为:

K2,K1,K1,K1,K1,K1,K1,K1,K2,K2,K2,K2,K2,K2,K2,K1 。

因此,由上述 C0 、 D0 导致的 K与

K’互为对合;实际上,除了这些以外,在 中似乎不再有其它的对合对了。

DES 的安全问题

KDCPC )(1 111

562F

Page 69: 分组密码: 数据加密标准 DES 算法

69

对于 ,若K是自己的对合,则称K为 DES 的一个弱密钥;若K存在异于自己的对合,则称 K为 DES 的一个半弱密钥。

显然, C0 与 D0 分别是 {00,11,10,01}中任意一个的 14 次重复的情况共有 42=16种,其中

C0 与 D0 分别是 {00,11}中任意一个的14 次重复的情况 (计 22=4 种 ) 对应弱密钥;

剩下的 (16-4=12 种 ) 对应半弱密钥。

562FK

DES 的安全问题

Page 70: 分组密码: 数据加密标准 DES 算法

70

弱密钥与半弱密钥直接引起的“危险”

是在多重使用 DES 加密中,第二次加密有可能使第一次加密复原;另外,弱密钥与半弱密钥使得扩展出来的诸加密子密钥至多有两种差异,如此导致原本多轮迭代的复杂结构简化和容易分析。

所幸在总数 256 个可选密钥中,弱密钥与半弱密钥所占的比例极小,如果是随机选择, ( 半 ) 弱密钥出现的概率很小,因而其存在性并不会危及 DES 的安全。

DES 的安全问题

Page 71: 分组密码: 数据加密标准 DES 算法

71

密文与明文、密文与密钥的相关性 . 人们的研究结果表明:DES 的编码过程可使每个密文比特都

是所有明文比特和所有密钥比特的复杂混合函数,而要达到这一要求至少需要 DES的迭代: 5轮。

人们也用 2-检验证明: DES迭代 8轮

以后,就可认为输出和输入不相关了。

DES 的安全问题

Page 72: 分组密码: 数据加密标准 DES 算法

72

密钥搜索机 . 在对 DES 安全性的批评

意见中,较一致的看法是 DES 的密钥太短!其长度 56bit ,致使密钥量仅为 256≈1017 ,不能抵抗穷搜攻击,事实证明的确如此。

1997 年 1 月 28 日,美国 RSA 数据安全公司在RSA 安全年会上发布了一项“秘密密钥挑战”竞赛,分别悬赏 1000 美金、 5000 美金和 10000 美金用于攻破不同长度的 RC5 密码算法,同时还悬赏 10000美金破译密钥长度为 56bit 的 DES 。 RSA 公司发起这场挑战赛是为了调查在 Internet 上分布式计算的能力,并测试不同密钥长度的 RC5 算法和密钥长度为 56bit 的 DES 算法的相对强度。

DES 的安全问题

Page 73: 分组密码: 数据加密标准 DES 算法

73

结果是:密钥长度为 40bit 和 48bit的RC5 算法被攻破;美国克罗拉多州的程序员Verser从 1997 年 3 月 13 日起用了 96天的时间,在 Internet 上数万名志愿者的协同工作下,于 1997 年 6 月 17 日成功地找到了 DES的密钥,获得了 RSA 公司颁发的 10000 美金的奖励。

这一事件表明,依靠 Internet 的分布式计算能力,用穷搜方法破译 DES 已成为可能。因此,随着计算机能力的增强与计算技术的提高,必须相应地增加密码算法的密钥长度。

DES 的安全问题

Page 74: 分组密码: 数据加密标准 DES 算法

74

1977 年, Diffe 和 Hellman曾建议制

造每秒能测试 106 个密钥的 VLSI芯片,将这样的 100×104 个芯片并行操作搜索完整个密钥空间大约需 1天时间。他们估计制造这样一台机器需耗资大约 2000万美金。

1993 年, Wiener给出了一个详细的设计密钥搜索机的方案。他建议制造每秒能测试 5×107 个密钥的芯片,基于这种芯片的机器将流水作业,使得 16 次加密同时

DES 的安全问题

Page 75: 分组密码: 数据加密标准 DES 算法

75

发生。目前制造这种芯片每片需耗资 10.5美金,耗资 10万美金能建造一个由 5760个芯片组成的框架,这使得搜索一个密钥平均大约需要 1.5天。使用十个这样框架的机器将耗资 100万美金,搜索一个密钥平均大约 3.5 小时。

据新华社 1998 年 7 月 22 日消息 ,电子边境基金学会 (EFF)使用一台 25万美金的电脑在 56 小时内破译了 56位密钥的 DES 。

DES 的安全问题

Page 76: 分组密码: 数据加密标准 DES 算法

76

DES 的攻击方法 .目前攻击 DES 的主要

方法有时间 -空间权衡攻击、差分攻击、线性攻击和相关密钥攻击等方法,在这些攻击方法中,线性攻击方法是最有效的一种方法。

除了上面介绍的几个方面外, 20 年来人们还发表了许多有关 DES 的其它方面的研究文章,这些研究不仅深入分析、检验了DES 的各个方面,而且也大大地推动了密码学的研究和发展。

DES 的安全问题

Page 77: 分组密码: 数据加密标准 DES 算法

77

5.DES 的强化变形利用随机因素对 8 个 S-盒的排列顺序

进行置换 . 随意选取一个正整数,比如今天的

日期: 1106 。对于 k=8,7,,2 ,依次求出 1106

(mod k):(2,0,2,1,2,2,0) <*>

(注意到 2,3,,8 的最小公倍数为 3·5·7· 8=840 ,进行上述计算时可将 1106 用1106(mod 840)=266替代)。

Page 78: 分组密码: 数据加密标准 DES 算法

78

5.DES 的强化变形按照上面的数组 <*>求出 1~8 的一个

全排列:1(其实,由已知全排列 34165827也可以求出对应的数组 <*>:

34165827( , , , , , , ))。按照上面求得的全排列,把 8 个 S-盒重

排成:S3,S4,S1,S6,S5,S8,S2,S7 。

12 312 3412 34152 341652 341652734165827

2 0 2 1 2 2 0

Page 79: 分组密码: 数据加密标准 DES 算法

79

5.DES 的强化变形三重 DES(the Triple DES). 为了克服 DES之 56bit 密钥长度较短的

弱点,人们想到采用下述以 DES 作为基本环节的加密方式:

称之为三重 DES 。三重 DES 使进行密钥穷搜攻击的复杂度

从 O(256)增至 O(2112),并且采用一定的技巧编程,三重 DES 的加密时间仅为 DES的 2倍、而不是通常想象的 3倍!

)( 211

121KKCDESDESDESM KK K

加密变换

Page 80: 分组密码: 数据加密标准 DES 算法

80

为了提高 DES 的安全性,并利用实现 DES 的现有软硬件,可将 DES 算法在多密钥下多重使用。 二重 DES 是多重使用 DES 时最简单的形式,如图 4.8所示。其中明文为 P ,两个加密密钥为 K1 和 K2 ,密文为:

解密时,以相反顺序使用两个密钥:2 1[ [ ]]K KC E E P

1 2[ [ ]]K KP D D C

二重 DES

Page 81: 分组密码: 数据加密标准 DES 算法

81图 4.8 二重 DES

二重 DES

Page 82: 分组密码: 数据加密标准 DES 算法

82

因此,二重 DES所用密钥长度为 112比特,强度极大地增加。然而,假设对任意两个密钥 K1 和 K2 ,能够找出另一密钥 K3 ,使得

2 1 3[ [ ]] [ ]K K KE E P E P

二重 DES

Page 83: 分组密码: 数据加密标准 DES 算法

83

那么,二重 DES 以及多重 DES都没有意义,因为它们与 56 比特密钥的单重 DES等价,好在这种假设对 DES 并不成立。将 DES 加密过程 64 比特分组到 64 比特分组的映射看作一个置换,如果考虑 264 个所有可能的输入分组,则密钥给定后, DES 的加密将把每个输入分组映射到一个惟一的输出分组。否则,如果有两个输入分组被映射到同一分组,则解密过程就无法实施。对 264 个输入分组,总映射个数为 。 2064 102 ! 10

二重 DES

Page 84: 分组密码: 数据加密标准 DES 算法

84

另一方面,对每个不同的密钥, DES都定义了一个映射,总映射数为 256<1017 。因此,可假定用两个不同的密钥两次使用 DES ,可得一个新映射,而且这一新映射不出现在单重 DES 定义的映射中。 这一假定已于 1992 年被证明。所以使用二重 DES产生的映射不会等价于单重 DES 加密。但对二重 DES 有以下一种称为中途相遇攻击的攻击方案,这种攻击不依赖于 DES 的任何特性,因而可用于攻击任何分组密码。其基本思想如下:

二重 DES

Page 85: 分组密码: 数据加密标准 DES 算法

85

如果有

那么(见图 4.8 )

2 1[ [ ]]K KC E E P

1 2[ ] [ ]K KX E P D C

二重 DES

Page 86: 分组密码: 数据加密标准 DES 算法

86

如果已知一个明文密文对 (P,C),攻击的实施可如下进行:首先,用 256 个所有可能的 K1对 P 加密,将加密结果存入一表并对表按 X排序,然后用 256 个所有可能的 K2对C 解密,在上述表中查找与 C 解密结果相匹配的项,如果找到,则记下相应的 K1 和 K2 。最后再用一新的明文密文对 (P′,C′) 检验上面找到的 K1 和 K2 ,用 K1 和 K2对 P′两次加密,若结果等于 C′,就可确定 K1 和 K2 是所要找的密钥。

二重 DES

Page 87: 分组密码: 数据加密标准 DES 算法

87

对已知的明文 P ,二重 DES 能产生 264

个可能的密文 ,而可能的密钥个数为 2112 ,所以平均来说,对一个已知的明文,有 2112/264=248 个密钥可产生已知的密文。而再经过另外一对明文密文的检验,误报率将下降到248-64=2-16 。所以在实施中途相遇攻击时,如果已知两个明文密文对,则找到正确密钥的概率为 1-2-16 。

二重 DES

Page 88: 分组密码: 数据加密标准 DES 算法

88

抵抗中途相遇攻击的一种方法是使用 3个不同的密钥做 3 次加密,从而可使已知明文攻击的代价增加到 2112 。然而,这样又会使密钥长度增加到 56×3=168 比特,因而过于笨重。一种实用的方法是仅使用两个密钥做 3 次加密,实现方式为加密 \|解密 \|加密,简记为 EDE( encrypt decrypt encrypt) ,见图 4.9 ,即:

两个密钥的三重 DES

1 2 1[ [ [ ]]]K K KC E D E P

Page 89: 分组密码: 数据加密标准 DES 算法

89

图 4.9 两个密钥的三重 DES

Page 90: 分组密码: 数据加密标准 DES 算法

90

两个密钥的三重 DES

三重 DES

E D

1K 2K

P A B

加密

D E

1K 2K

C B A

解密

E

1K

C

D

1K

P

Page 91: 分组密码: 数据加密标准 DES 算法

91

此方案已在密钥管理标准 ANS X.917 和 ISO 8732 中被采用。

Page 92: 分组密码: 数据加密标准 DES 算法

92

三个密钥的三重 DES 密钥长度为 168 比特,加密方式为

令 K3=K2或K1=K2 ,则变为一重 DES 。三个密钥的三重 DES 已在因特网的许多应用(如 PGP 和 S/MIME )中被采用。

三个密钥的三重 DES

3 2 1[ [ [ ]]]K K KC E D E P

Page 93: 分组密码: 数据加密标准 DES 算法

93

三个密钥的三重 DES

三重 DES

E D

1K 2K

P A B

加密

D E

3K 2K

C B A

解密

E

3K

C

D

1K

P

Page 94: 分组密码: 数据加密标准 DES 算法

94

DES 的软件实现用 8086/8088宏汇编语言编写 DES程

序的技巧和要点 . 将第 16轮迭代结果 L16R16 的交换与置

换 IP-1复合成一个新的置换 (记为 IP’):在 R16L16 中 ,大于 32 的位置 t 应出现在 L16里,对应在 L16R16里便是t-32 ;32 以内的位置 t 应出现在 R16里,对应在 L16R16里便是t+32 。

8 40 16 48 24 56 32 64 7 39 15 47 23 55 31 63 6 38 14 46 22 54 30 62 5 37 13 45 21 53 29 61 4 36 12 44 20 52 28 60 3 35 11 43 19 51 27 59 2 34 10 42 18 50 26 58 1 33 9 41 17 49 25 57

Page 95: 分组密码: 数据加密标准 DES 算法

95

DES 的软件实现IP,IP’,E,P,PC-1,PC-2 基于同一个

底层程序来实现:该底层程序主要应用诸移位指令来

完成数据比特的重新选取。按照

000000(0,0), 000001(1,0),, 011110(0,15), 011111(1,15)

100000(2,0), 100001(3,0),, 111110(2,15), 111111(3,15)

重排每个 S-盒数据,并使用 XLAT指令完成经过 S-盒的运算。

Page 96: 分组密码: 数据加密标准 DES 算法

96

作业 1

试证明 S-DES 的加密、解密是互逆的,即: D( E(M,K), K)=M 。

Page 97: 分组密码: 数据加密标准 DES 算法

97

作业 2

P2=(5,7,1,8,4,2)

主密钥 K(8bit)

P1=(2,6,8,1,7,4,3,5)

P2=(5,7,1,8,4,2)

C0(4bit) D0(4bit)

左环移 1位 左环移 1位

C1(4bit) D1(4bit)

左环移 3位 左环移 3位

明文组 M(8bit)

IP=(8,4,6,2,3,1,5,7)

T0(4bit) T1(4bit)

f(T1,K1)

T1(4bit) T2(4bit)

IP-1

密文组 C(8bit)

f(T2,K2)

T3(4bit) T2(4bit)

K1(6bit)

K2(6bit)

C2(4bit) D2(4bit)

小规模 DES 的加密过程及密钥扩展如下图所示:

Page 98: 分组密码: 数据加密标准 DES 算法

98

其中函数值 f(T,K)的计算过程如下:

01

01

S2

S1

列行

2 0 1 3 1 3 2 0

0 2 3 1 3 1 0 2

0 1 2 3输出

试以 K=10110100 为主密钥,对明文组 M=10100101进

行加密 (在标明比特位数的方框内填入数据 ),并在草纸上解密以验证所做加密的正确性。

T(4bit)

E=(4,1,2,2,3,4)

S1

P=(3,1,2, 4)

f(T, K) (4bit)

K(6bit)

S2

2bit2bit

作业 2

Page 99: 分组密码: 数据加密标准 DES 算法

99

作业 3小规模 DES 的加密与密钥扩展过程如最后

页图示。1.  如果已知明文组 10010101 在密钥 0111

0101 下加密成 01000101 ,那么在密钥 10001010

下加密 01101010所成密文组是什么?

2. 解密过程可与最后页左图一样(只须将明密文组的位置对调),若密钥扩展也想使用最后页的右图,则在哪些地方要做相应的修改?

3. 若 8bit 密钥 K 经扩展得出的两个子密钥依次是 K1、 K2 ,另一个 8bit 密钥 K’扩展出来

的两个子密钥依次是 K2、 K1 ,则称 K与 K’互为对合。

Page 100: 分组密码: 数据加密标准 DES 算法

100

作业 3设在下页右图中,P1= (2 6 8 1 7 4 3 5) , P2=(5 7 1 8 4 2) ,

且 K=ω1ω2ω3ω4ω5ω6ω7ω8 ,⑴证明: K存在对合的充要条件是

ω1=ω6, ω2=ω8, ω3=ω7, ω4=ω5 ;⑵求出所有存在对合的密钥 K ;

⑶ K 以自身为对合(称 K自对合)的充要条件是什么?

⑷求出所有自对合的密钥 K 。

Page 101: 分组密码: 数据加密标准 DES 算法

101

明文组 M(8bit)

IP

T0(4bit) T1(4bit)

f(T1,K1)

T1(4bit) T2(4bit)

IP-1

密文组 C(8bit)

密钥 K(8bit)

P1

C0(4bit) D0(4bit)

左环移 1位

f(T2,K2)

T3(4bit) T2(4bit)

左环移 1位

C1(4bit) D1(4bit)

左环移 3位 左环移 3位

P2

K1(6bit)

C2(4bit) D2(4bit)

P2

K2(6bit)

注 . 我们省略了对 f(Ti,Ki) ( i=1,2 )计算过程的描

述。

Page 102: 分组密码: 数据加密标准 DES 算法

102

1. A Shannon style Substitution Box (S-box) grows in size as the number of input bits increases. For inputs of 4, 6, 8, 10, and 12 bits, list how many entries would be required. How large would each of these entries be, and why? What are the implications for the growth of this number on implementing such S-boxes in hardware, software (on a smartcard, PC)? Now consider a Permutation box (P-box). Much larger P-boxes can be used than S-boxes, why? How would you implement a P-box in hardware, software?

作业 4

Page 103: 分组密码: 数据加密标准 DES 算法

103

THE END!