第三章 现代加密方法

Preview:

DESCRIPTION

第三章 现代加密方法. - PowerPoint PPT Presentation

Citation preview

第三章 现代加密方法

• 1 简化的 DES DES-Data Encryption Standard(1977 年元月 15 日 - 美国联邦标准) 1998 年!!Simplified DES 方案,简称 S-DES 方案。注: 1.* 加密算法涉及五个函数:(1) 初始置换 IP(initial permutation)(2) 复合函数 fk1 ,它是由密钥 K 确定的,具有转换和 替换的运算。 (3)转换函数 SW(4) 复合函数 fk2

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

加密10bit 密

钥 解密

8bit 明文 P10 8bit 明文

IP 移位 IP-1

P8fk fk

SW SW移位

P8fk fk

IPIP-1

8bit 密文 8bit 密文

K2 K2

K1K1

S-D

ES

方案示意图

• 2*. 加密算法的数学表示: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 的深入描述• ( 1 ) S-DES 的密钥生成:

设 10bit 的密钥为( k1,k2,k3,k4,k5,k6,k7, k8,k9,k10)置换 P10 是这样定义的P10(k1,k2,…,k10)=(k3,k5,k2,k7,k4,k10,k1,k9,k8,k6)相当于P10=

LS-1 为循环左移,在这里实现左移 2 位 P8=

按照上述条件 , 若 K 选为 (1010000010), 产生的两个子密钥分别为 K1=(1 0 1 0 0 1 0 0),K2=(0 1 0 0 0 0 1 1)

68911047253

10987654321

910584736

87654321

S-DES 的密钥生成10-bit 密钥P10

LS-1 LS-1

LS-2 LS-2

P8

P8

K1

8

K2

5 5

55

8

(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

S-DES 加密图8-bit 明文

IP

E/P

+

S0 S1

P4

+

L R

4

K1

844

fk

F

4

S-DES 加密图 ( 续 )

E/P

+

S0 S1

8K2

P4

+

IP-1

8-bit 密文

4

8

44fk

F4 4

2 2

8

SW

函数 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

8-bit 子密钥: K1=(k11,k12,k13,k14,k15,k16,k17,k18), 然后与E/P 的结果作异或运算得:

n4+k11 n1+k12 n2+k13 n3+k14

n2+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- 位的输出。两个S 盒按如下定义:

2313

3120

0123

2301

3

2

1

03210

0S

3012

0103

3102

3210

3

2

1

03210

1S

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 函数的输出。

2 DES 的描述• DES 利用 56 比特串长度的密钥 K 来加密长度为 64 位的明文,得到

长度为 64 位的密文• 该算法分三个阶段实现:

1. 给定明文 X ,通过一个固定的初始置换 IP 来排列 X 中的位,得到 X0 。X0=IP ( X ) =L0R0

其中 L0 由 X0 前 32 位组成, R0 由 X0 的后 32 位组成。2. 计算函数 F 的 16 次迭代 , 根据下述规则来计算 LiRi(1<=i<=16 ) Li=Ri-1, Ri=Li-1 F(Ri-1, Ki)其中 Ki 是长为 48 位的子密钥。子密钥 K1 , K2 ,…, K16 是作为密钥 K ( 56 位)的函数而计算出的。 3. 对比特串 R16L16 使用逆置换 IP-1 得到密文 Y 。Y=IP-1 ( R16L16 )

一轮加密的简图

Li-1 Ri-1

F

+

Li Ri

Ki

• 对 F 函数的说明:(类比于 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

(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 为固定置换。

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 函数

• DES 中使用的其它特定函数:初始置换 IP :见 68 页表 3.2, 从表中看出 X 的第 58 个比特是 IP ( X )的第一个比特; X 的第 50 个比特是 IP( X )的第二个比特…逆置换 IP-1 ;扩展函数 E ;置换函数 P 。

• 从密钥 K 计算子密钥: 实际上, K 是长度为 64 的位串,其中 56 位是密钥,8 位是奇偶校验位(为了检错),在密钥编排的计算中,这些校验位可略去。(1). 给定 64 位的密钥 K ,放弃奇偶校验位( 8 , 16 ,…, 64 )并根据固定置换 PC-1 (见 72 页表 3.4( a ))来排列 K 中剩下的位。我们写 PC-1(K)=C0D0

其中 C0 由 PC-1 ( K )的前 28 位组成; D0 由后 28 位组成。

• (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 为固定置换 , 见 72 页 3.4(b) 。

• 注:一共 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

图表(密钥生成 Ki )K

PC-1

C0 D0

LS1 LS1

C1 D1

LS2 LS2

LS16 LS16

C16 D16

PC-2

PC-2

K1

K16

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

3 DES 的争论

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

• 1976 年美国 NSA提出了下列几条 S 盒的设计准则:1. S 盒的每一行是整数 0 ,…, 15 的一个置换2. 没有一个 S 盒是它输入变量的线性函数3.改变 S 盒的一个输入位至少要引起两位的输出改变4. 对任何一个 S 盒和任何一个输入 X , S ( X )和 S(X001100 )至少有两个比特不同(这里 X 是长度为 6 的比特串)5. 对任何一个 S 盒,对任何一个输入对 e,f属于 {0,1},S(X) S(X11ef00)

• 6. 对任何一个 S 盒,如果固定一个输入比特,来看一个固定输出比特的值,这个输出比特为 0 的输入数目将接近于这个输出比特为 1 的输入数目。

• *公众仍然不知道 S 盒的构造中是否还使用了进一步的设计准则。

• 参见 74 页 3.4 DES 的强度。

4 差分密码分析与线性密码分析

• (1) 差分密码分析 对 DES 有效的分析方法 --差分分析方法,是由 E.Biham 和 A.Shamir提出的。见Differential Cryptanalysis of DES-like Cryptosystems. E.Biham A.ShamirThe Weizmann Institute of ScienceDepartment of Aplied Mathematics

June 18,1999该文给出选择性明文攻击,是一个很有效的方法。对于攻击 8轮 DES ,在 486那样的计算机上,只需 2 分钟可攻破。

• 首先说明:1. 对于 DES 的分析,可忽略初始置换 IP 和 IP-1 。2. 对 DES限制到 n轮( n<=16 )。3. 以 L0R0 为明文,且以 LnRn 作为 n轮 DES 的密文。4. 对两个明文 L0R0 和 L0

*R0* ,规定它们的异或值为 L0´

R0 ´ =L0R0 L0*R0

* ,整个讨论都使用撇号( ´ )表示两个比特串的异或值。

• 定义 1 :设 Sj 是一个特定的 S 盒( 1<=j<=8) ,考虑长度为 6 的比特串的一个有序对( Bj,Bj

* ) ,我们说 Sj 的输入异或是 Bj Bj

*, 输出异或是 Sj(Bj) Sj(Rj*)

• 注:输入异或是长度为 6 的比特串,输出异或是长度为 4 的比特串。

• 定义 2 :对任何一个 Bj´(Z2)6= {a0,a1,a2,a3,a4,a5|aj {0,∈1}} ,定义集合△ (Bj´) 是由输入异或为 Bj´ 的有序对(Bj,Bj

*) 组成。• 注: 1*. 对比特串 Bj´ 来说,集合△ (Bj´)包含 26=64 个

有序对元素。有 △ (Bj´)={(Bj,Bj Bj´)| Bj (Z∈ 2)6} 2*. 对△ (Bj´) 中的每一对,我们能计算出 Sj 的输出异或,同时用表列出结果的分布。 有 64 个输入异或,它们经 Sj 的输出分布在 24=16种可能值之中,这些分布的非均匀性,就是攻击 DES的基础。

• 3*. 表示一个 S 盒的所有可能对的输入异或和输出异或分布的表称为该 S 盒的差分分布表。

• 例子 1 。若考虑第一个 S 盒 S1 ,输入异或为 B1´=110100, 那么: △ (B1´)= (110100)={(000000,110100),△ (000001, 110101), …., (111111, 001011)}对集合△ (B1´) 中的每一对,计算 S1 盒的输出异或。 例如 S1(000000)=E16=1110 S1(110100)=916=1001所以 (000000,110100) 的输出异或是 0111 。计算△ (B1´)= (110100)△ 中所有 64 对的输出异或,得输出异或分布表:

+

0 个 8 个 16 个 6 个 2 个 0 个 0 个 12 个

1000 1001 1010 1011 1100 1101 1110 1111

6 个 0 个 0 个 0 个 0 个 8 个 0 个 16 个

• 0000 0001 0010 0011 0100 0101 0110 0111

注意! 16 个可能输出异或中,仅有 8种出现。它们的分布是不均匀的。一般说来,对固定的一个 S 盒 Sj 说来,给一个输入异或 Bj

´, 那么平均出现 75%-80% 的相异输出异或。

• 为描述这类分布如何产生的,先表述一些进一步的概念。

• 定义 3 :对长度为 6 的比特串 Bj´ 和长度为 4 的比特串 C

j´ (1<=j<=8), 定义 INj(Bj

´,Cj´)={Bj ( Z2 ) 6|Sj(Bj) Sj(Bj Bj

´)=Cj´}

Nj(Bj´,Cj

´)=|INj(Bj´,Cj

´)|

• 注: 1*. 对特定的 S 盒 Sj, 它的输入异或为 Bj´ 且相应的

输出异或为 Cj´ ,这里 Nj(Bj

´,Cj´) 就是用来表示其输入对

的数目。 2*. 对于上述例子 1 中的输出异或分布表表现了 N1

( 110100 , C1´ ) ( 其中 C1

´ (Z2)4)所指示的对 S 盒 S1

来说,它的输入异或为( 110100 )且相应的输出异或为 C1

´ 的分布情况。 3*. 对于集合 IN1 ( 110100 , C1

´ ),表示输入异或为( 110100 )的所有可能输入引起输出异或情况的分布表,见下页:

输出异或 可能输入0000

0001 000011,001111,011110,011111

101010,101011,110111,111011

0010 000100,000101,001110,010001

010010,010100,011010,011011

100000,100101,010110,101110

101111,110000,110001,111010

0011 000001,000010,010101,100001

110101,110110

0100 010011,100111

0101

0110

0111 000000,001000,001101,010111

011000,011101,100011,101001

101100,110100,111001,111100

1000 001001,001100,011001,101101

111000,111101

1001

1010

1011

1100

1101 000110,010000,010110,011100,100010,100100,101000,110010

1110

1111 000111,001010,001011,110011,111110,111111

• 考虑一般的情况:对于 DES 的 8 个 S 盒的每一个盒有 64种可能的输入异或,于是可算出有 512 个分布。回忆上一讲:知在第 i轮中 S 盒的输入为 B=E J ,其中 E=E ( R

i-1 )是 Ri-1 的扩展, J=Ki 是由第 i轮的密钥比特组成。现在对所有 8 个 S 盒的输入异或计算如下: B B*=(E J) (E* J)= E E*=E´由此可见,输入异或不依赖于密钥比特 J.将 B , E 和 J均写成 8 个 6 比特串的并: B=B1B2B3B4B5B6B7B8

E=E1E2E3E4E5E6E7E8

J=J1J2J3J4J5J6J7J8

类似地可表述 B* , E* , J* (表达式略) 假设我们知道 Ej 和 Ej

* 的值(对某一个 j,1<= j<=8 )和 Sj 的输出异或值 Cj ´=Sj(Bj) Sj(Bj

*), 那么必有 Ej JjINj(Ej ´,Cj ´) , Bj=Ej Jj; Bj ´=Ej Ej

*

• 我们的目的是要破译密钥 J 的部分比特串 Jj 。定义测试集合 Testj

• 定义 4 ( Testj ) : 设 Ej 和 Ej* 是长度为 6 的比特串, Cj

´ 是长度为 4 的比特串,定义 Testj(Ej,Ej

*,Cj´)={Bj Ej|Bj IN∈ j(Ej

´,Cj´)}

这里 Bj Ej 是 Jj 的形式, Ej 是固定的 ,Ej´=Ej Ej

*

我们有• 定理 1 :假设 Ej 和 Ej

* 是 S 盒 Sj 的两个输入, Sj 的输出译或为 Cj

´ ,记 Ej ´=Ej Ej

* ,那么密钥比特 Jj 出现在集合 Testj(Ej,Ej

*,Cj ´)之中。

注:可见在集合 Testj(Ej,Ej*,Cj

´) 中,长度为 6 比特刚好有 Nj(Ej

´,Cj ´) 个, Jj 的正确值一定是这些可能值中的一

个。

• 例子 2 :假设 E1=000001 , E1*=110101 和 C1 =1101 ,因为 N1

( 110100 , 1101 ) =8 ,(见第 5面 110100 输入分布表),可知集合 Test1(000001 , 110101 , 1101 )中,刚好有 8 个比特串:原因为可从表中得到: IN1 ( 110100 , 1101 ) ={000110 , 010000 , 010110 ,011100 , 100010 , 100100 , 101000 , 110010}分别计算它们与 E1=000001 的异或得: Test1(000001,110101,1101)={000111,010001,0101111,011101,100011,100101,101001,110011}如果有两个这样的三元组 E1 , E1

* , C1 ,那么就可得到 J1 中密钥比特可能值的第 2 个集合 Test1

(2)(E1,E1*,C1) 。易见密钥比

特 Jj Test∈ 1∩Test1 (2) !! 自然这样的三元组如果更多些,定出 Jj 是肯定的。关于这方面的计算,可想出若干技巧。

攻击 3 轮 DES

明文 P(64bits)

F

F

F

+L0

+

+

密文

R0

K1

Li=Ri-1

Ri=Li-1 f(Ri-1,Ki)

K2

R1=L0 f(R0,K1)

K3

R2=L1 f(R1,K2)

R3=L2 f(R2,K3)

L1=R0

L2=R1

L3=R2

3 轮 DES 图

A

B

C

DES 的 F 函数

输入 32 比特E

48bitsE1|E2|E3|E4|E5|E6|E7|E8

子密钥J1|J2|J3|J4|J5|J6|J7|J8

+

BB1 B2 B3 B4 B5 B6 B7 B8

S1 S2 S3 S4 S5 S6 S7 S8

C1 C2 C3 C4 C5 C6 C7 C8

P

Output(32bits)

• 我们对 3轮作选择明文攻击。用明文对和相应的密文对开始我们的分析:明文对为: L0R0; L0

*R0*

密文对为: L3R3; L3*R3

* 。有表达式: R3=L2 f(R2,K3)=R1 f(R2,K3) =L0 f(R0,K1) f(R2,K3)R3

* 可用类似的方法得到: R3

*=L0* f(R0

*,K1) f(R2*,K3), 于是有

R3´=L0´ f(R1,K1) f(R0*,K1) f(R2,K3) f(R2

*,K3) 假设选择了明文,使 R0=R0

*, 此时 R0´=00…0且 f(R0,K)=f(R0

*,K) ,所以 R3´=L0´ f(R2,K3) f(R2

*,K3)由于 R3´ 可从两个密文 R3,R3

* 计算出,可知 R3´ 和 L0´已知。有:

F(R2,K3) f(R2*,K3)=R3´ L0´

• 知 f(R2,K3)=P(C) 和 f(R2*,K3)=P(C*), 其中

C 和 C* 分别表示 8 个 S 盒的两个输出。而 P 是固定的,为公开已知的置换,因此 P(C) =P(C*)=R3´ L0´, 由此可知 C´=C C*=P-1(R3´ L0´)…. 为 3轮中 8 个 S 盒的两个输出异或。另外, R2=L3 和 R2

*=L3* 是已知的(它们是密文的一部分),

因此,可用公开已知的扩展函数 E 计算E=E(L3) 和 E*=E(L3

*)对第三轮说来,它们是 S 盒的输入。于是可由 E , E* 和 C 。象前面的例子那样对 J1 , J2 , J3 , J4 , J5 , J6 , J7 , J8 中密钥比特可能值,着手构造集合 Test1,Test2,…, Test8 。由它们来确定第三轮密钥 K3 中的 48bits 。 56bits 密钥中剩下的 8 比特可通过穷举 28=256种可能来确定。

• 3 轮 DES 的差分攻击模式:输入: L0R0,L0

*R0*,L3R3 和 L3

*R3* ,其中 R0=R0

*

1. 计算 C =P-1(R3 L0 )2. 计算 E=E(L3) 和 E*

3. For j=1 to 8 do 计算 Testj(Ej,Ej*,Cj )

例子 3 。我们有如下三组明密文对,并有固定的异或值。用相同的密钥进行加密。为简单用 16 进制表示 .明文 密文 748502CD38451097

03C70306D8A09F103874756438451097 78560A0960E6D4CB486911026ACDFF31 45FA28BE5ADC730375BD31F6ACDFF31 134F7915AC253457357418DA013FEC86 D8A31B2F28BBC5CF12549847013FEC86 0F317AC2B23CB944

• 对第一组,可计算 S 盒的输入(对第三轮),它们是 E=E(L3)=0000000001111110000011101 00000000110100000001100E*=E(L3

*)=10111111000000101010110000

0001010100000001010010还可算出 S 盒的输出异或为:C=C C*=P-1(R3 L0 )=10010110010111010101101100111对第二组,第二组给出相同的计算,结果(略)。我们给出八个计数器阵列,每个阵列为 16*4 。这样按书写方式排有 64 个位置: 0,1,2,…,63 。在第一组中,我们有 E1 =101111 和 C1 =1001, 集合 IN1(101111,1001)={000000,000111,101000,101111}

• 因为 E1=000000 ,我们有 J1 Test∈ 1(000000,101111,1001)={ 000000, 000111,101000,101111}将其中 6bits 串用 2 进制数表示成对应 J1 阵列中的位置数 0,7,40,47 对应于 {000000,000111,101111}, 相当于在阵列表的空位的相应位置增值 1

J1

1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0

0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0

0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 1+1+1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

• 对三组算得的三个集合 Test1(1),Test1

(2),Test1(3) 。它们中

的元素对应的数增值 J1 位置处的 1 个单位数。于是算得 J1=47=101111 ,类似地方法定出 J2=000101 ,J3=010011 , J4=0000000 , J5=011000 , J6=000111 ,J7=000111 , J8=110001

• 注: 1*.差分攻击技术还可用于 6轮 DES ,对 8轮的DES需 214 个组选择明文。现在对 16轮 DES 也是相当有效的。见 :www.cryptography.com 。2*. 对其它体制的攻击,例 Feal,LOKI,REDOC-II ,也是有效的。

• (2). 线性密码分析见书 78 页。参考文献:Matsui. M, Linear Cryptanalytic Method for DES Cipher,Advances in Cryptology-Eurocrypt´93,Springer-Verlag, PP.398-409, 1994.

Recommended