E N D
第三章 现代加密方法 • 1 简化的DESDES-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密钥 解密 P10 8bit明文 8bit明文 S-DES方案示意图 加密 IP 移位 IP-1 P8 fk fk K1 K1 SW 移位 SW P8 fk fk K2 K2 IP IP-1 8bit密文 8bit密文
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)
S-DES的密钥生成 10-bit密钥 P10 LS-1 LS-1 5 5 P8 8 K1 LS-2 LS-2 5 5 P8 8 K2
(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加密图 IP 8-bit 明文 fk L R 4 E/P 4 8 + K1 F 4 4 S0 S1 P4 +
S-DES加密图(续) SW 4 4 fk E/P 8 8 K2 F + 4 4 S0 S1 2 2 P4 + 4 IP-1 8 8-bit 密文
函数fk,是加密方案中的最重要部分,它可表示为:函数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的结果作异或运算得: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盒按如下定义:
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 Ki + Li Ri
对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 + 写成8个6比特串 B 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) 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 PC-2 K1 LS2 LS2 … LS16 LS16 C16 D16 PC-2 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 MathematicsJune 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 ∈(Z2)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 • 0000 0001 0010 0011 0100 0101 0110 0111注意!16个可能输出异或中,仅有8种出现。它们的分布是不均匀的。一般说来,对固定的一个S盒Sj说来,给一个输入异或Bj´, 那么平均出现75%-80%的相异输出异或。 • 为描述这类分布如何产生的,先表述一些进一步的概念。 6个 0个 0个 0个 0个 8个 0个 16个
定义3:对长度为6的比特串Bj´和长度为4的比特串Cj´ (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)的所有可能输入引起输出异或情况的分布表,见下页:
考虑一般的情况:对于DES的8个S盒的每一个盒有64种可能的输入异或,于是可算出有512个分布。回忆上一讲:知在第i轮中S盒的输入为B=E J,其中E=E(Ri-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我们的目的是要破译密钥J的部分比特串Jj。定义测试集合Testj • 定义4(Testj):设Ej和Ej*是长度为6的比特串,Cj´是长度为4的比特串,定义Testj(Ej,Ej*,Cj´)={Bj Ej|Bj∈INj(Ej´,Cj´)}这里Bj Ej是Jj的形式,Ej是固定的,Ej´=Ej Ej*我们有 • 定理1:假设Ej和Ej*是S盒Sj的两个输入,Sj的输出译或为Cj ´,记Ej ´=EjEj*,那么密钥比特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∈Test1∩Test1(2) !!自然这样的三元组如果更多些,定出Jj是肯定的。关于这方面的计算,可想出若干技巧。
攻击3轮DES 明文P(64bits) R0 Li=Ri-1 Ri=Li-1 f(Ri-1,Ki) L0 K1 A F + K2 L1=R0 B + F R1=L0 f(R0,K1) L2=R1 K3 C + F R2=L1 f(R1,K2) L3=R2 R3=L2 f(R2,K3) 密文 3轮DES图
DES的F函数 输入32比特 E 48bits E1|E2|E3|E4|E5|E6|E7|E8 子密钥 J1|J2|J3|J4|J5|J6|J7|J8 + B 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 Output(32bits)
我们对3轮作选择明文攻击。用明文对和相应的密文对开始我们的分析:明文对为:L0R0; L0*R0*密文对为:L3R3; L3*R3*。有表达式:R3=L2f(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*)=101111110000001010101100000001010100000001010010还可算出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∈Test1(000000,101111,1001)={ 000000, 000111,101000,101111}将其中6bits串用2进制数表示成对应J1阵列中的位置数0,7,40,47对应于{000000,000111,101111}, 相当于在阵列表的空位的相应位置增值1 J1
对三组算得的三个集合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对三组算得的三个集合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.