标签:
改进的SMS4算法的差分故障与暴力联合攻击
(1.中国科学院研究生院,北京100049)
摘要SMS4是在国内正式使用并于2006年公布的第一个用于无线局域网的商用分组密码算法.文中研究了SMS4对差分故障和暴力联合攻击的安全性.攻击使用随机故障模型,提出一种简化的轮函数差分故障攻击与暴力攻击相结合的方法.用该攻击方法不到1分钟就可以完全恢复出128位的种子密钥.文章结果证实SMS4密码算法很难防范利用差分故障和暴力攻击联合的攻击.为了避免这类攻击,在SMS4密码的实际使用中必须对轮函数相关的加密设备提供保护,从而使得攻击者无法使用故障诱导方法.
关键词:SMS4密码算法;故障模型;暴力攻击;差分故障攻击;差分分析;
中图分类号:TP309
Animproved differential fault and brute force combining attack on SMS4
LIUWen-hua, DU Xian-chao, GENG Qiao-ke
(1.GraduateUniversity of Chinese Academy of Sciences, Beijing, 100049, China)
Abstract:SMS4 is a bloc cipher used in WLAN and published in the year of 2006by the government of China. It does security research on SMS4 againstdifferential fault and brute force attack in this paper. A randomfault model, differential fault with simplified round function andbrute force attack are together used to crack the cipher. It takesless than one minute to recover a 128 bits key of SMS4. So aconclusion is made in the final that it is difficult for SMS4 toavoid the kind of combined attack. To improve the security of SMS4,the encryption device related round function should be protected frominducing fault from hacker.
Keywords: SMS4; fault model; brute force attack; differential faultanalysis; differential analysis;
0引言
SMS4密码算法是无线局域网WAPI的密码标准,是中国国家商用密码标准[1,2].同其他国际标准比如DES,RSA一样,在公开后公众增加了对其的了解,同时通过对它的安全性评估,可以知道其缺陷,以便更好地改进,尽可能加大黑客的攻击难度.
“故障攻击”是由Boneh等人在1996年首次提出,其总体思想是利用密码计算过程中存在的错误,加以诱导从而破解[3].这种攻击方法具有很大的实用性,可以认为是所谓“旁道攻击法(side-channelattack)”的一种.其实用性已经被证明:Biham和Shamir使用这种方法已经成功攻击了DES算法,并且后来AES和3DES等算法也已经被成功的攻击[4-7].这说明,这种攻击方法是一种非常有效的手段,因此对它进行研究以便提出更好的防范措施是非常有必要的.
文中给出的SMS4攻击利用随机故障模型、结合暴力攻击实现.随机故障模型指的是当对存储中间值的设备存储单元进行故障诱导时,攻击者将得到任意的错误.暴力攻击(Brute
ForceAttack)是指利用穷举搜索法在所有的组合方式中试探密钥的一种攻击方式.结合暴力攻击,该模型可以较快的恢复128bit的SMS4加密密钥.
文中第2节简单介绍SMS4加密算法,第3节是差分故障攻击基本思想介绍,第4节详细介绍攻击过程,第5节描述攻击试验和结果,最后给出结论.
1SMS4算法简介
SMS4算法是一个分组算法.该算法的分组长度为128比特,密钥长度为128比特.加密算法与密钥扩展算法都采用32轮非线性迭代结构.解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序.
SMS4的加密算法
定义反序变换R为:R(A0,A1,A2,A3)=(A3,A2,A1,A0),Ai∈Z232,i=0,1,2,3.设明文输入为(X0,X1,X2,X3)∈(Z232)4,密文输出为(Y0,Y1,Y2,Y3)∈(Z232)4,轮密钥为rki∈Z232,i=0,1,2,…,31.则本算法的加密变换为:
Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki),i=0,1,…,31.
(Y0,Y1,Y2,Y3)=R(X32,X33,X34,X35)=(X35,X34,X33,X32)
本算法的解密变换与加密变换结构相同,不同的仅是轮密钥的使用顺序.加密时轮密钥使用顺序为:(rk0,rk1,…,rk31).解密时轮密钥的使用顺序为:(rk31,rk30,…,rk0).SMS4算法使用的轮函数F定义为:F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki).合成置换T:Z232→Z232是一个可逆变换,由非线性变换τ和线性变换L复合而成,即T(·)=L(τ(·)).其中:非线性变换τ由4个并行的S盒构成.设输入为A=(a0,a1,a2,a3)∈(Z28)4,输出为B=(b0,b1,b2,b3)∈(Z28)4,则(b0,b1,b2,b3)=τ(A)=(S(a0),S(a1),S(a2),S(a3)).线性变换L以非线性变换τ的输出作为输入.设输入为B∈Z232,输出为C∈Z232,则C=L(B)=B⊕(B<<<2)⊕(B<<<10)⊕(B<<<18)⊕(B<<<24).加密算法如图1所示:
密钥扩展算法
加密算法的轮密钥由加密密钥通过密钥扩展算法生成.加密密钥MK=(MK0,MK1,MK2,MK3),MKi∈Z232,i=0,1,2,3;令Ki∈Z232(i=0,1,…,35),轮密钥为rki∈Z232(i=0,1,…,31),轮
密钥生成方法如下:首先,(K0,K1,K2,K3)=(MK0⊕FK0,MK1⊕FK1,MK2⊕FK2,MK3⊕FK3),然后,对i=0,1,2,…,31:rki=Ki+4=Ki⊕T`(Ki+1⊕Ki+2⊕Ki+3⊕CKi)
说明:
T`变换与加密算法轮函数中的T基本相同,只将其中的线性变换L修改为以下L`:L`(B)=B⊕(B<<<13)⊕(B<<<23);
FK=(FK0,FK1,FK2,FK3)为系统参数,其值用16进制表示为:FK0=(A3B1BAC6),FK1=(56AA3350),FK2=(677D9197),FK3=(B27022DC).CK=(CK0,FK1,…,FK31)为32个固定参数,其值请参见相关文档[1].
算法中所用几个数学定理的说明
自然数集合及其异或运算构成群
设自然数X∈N232,N是自然数.那么<X,⊕>是个群.证明如下:(1)存在单位元:0⊕X=X,故0是单位元;(2)运算封闭:如果A,B∈N232,A⊕B∈N232,说明运算封闭;(3)有逆元:因为对于任意一个X∈N232,X⊕X=0;说明X的逆元存在且就是X自己.(4)满足结合律:设A,B,C∈N232,(A⊕B)⊕C=A⊕(B⊕C),这说明异或运算满足结合律.从而说明自然数集合及其异或运算构成群.
异或运算(⊕)的逆运算是本身,循环左移(<<<)的逆运算是循环右移(>>>)
差分故障攻击简介
故障模型
攻击者每次可以诱发存储中间值的存储单元发生任意错误.
对于同一个明文P而言,攻击者可以获得在同一个密钥K作用下的正确密文C和错误密文C*.
攻击基本思想
一般的差分故障攻击基本思想如下:首先选择特定明文,对加密过程进行故障诱导,分别获得该明文对应的正确密文和错误密文(此阶段称为故障诱导与收集数据),最后对收集到的数据进行分析,恢复出密钥.
详细过程如下:
1)利用第1节证明的群<X,⊕>性质,可知0是群<X,⊕>的单位元,对于第i轮合成置换T(Xi+1⊕Xi+2⊕Xi+3⊕rki),如果选择特定输入:Xi+1=Xi+2=Xi+3=0;那么合成置换T简化:T(Xi+1⊕Xi+2⊕Xi+3⊕rki)=T(0⊕0⊕0⊕rki)=T(rki).轮函数F最终简化:F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki)=0⊕T(0⊕0⊕0⊕rki)=T(rki),i=0,1,…,31.根据此结论画出简化的轮函数示意图,如图2所示:
2)事先,根据轮函数F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi+4=T(rki),遍历rki的所有可能取值(32bit自然数,取值范围:0~232),输出对应的F值,也就是Xi+4值.即对于rki每一个可能取值输出
一个对应的Xi+4,在由rki组成的集合和Xi+4组成的集合之间建立一一映射,并且把Xi+4所有可能取值按照递增关系排好序,如图3所示.
当加密时,输入一个真正的未知轮密钥rki,根据图2所示的简化轮函数模型,可以看出,在故障诱导后,得到的Xi+4不再和Xi,Xi+1,Xi+2,Xi+3发生任何联系,Xi+4只依赖于输入rki,即Xi+4=T(rki).这样,根据Xi+4用折半查找算法在图3所示Xi+4的集合中快速定位,然后根据预先建立的一一映射关系得到Xi+4的原像rki,也就是要求的第i轮未知轮密钥.
3)重复进行第1、2步,直到恢复出所有32个轮密钥.因为密钥扩展算法中只存在异或(⊕)和循环左移运算(<<<),根据第2节的数学证明,它们都存在逆运算.所以再根据第1节介绍的密钥扩展算法的逆运算,可以计算出各轮子密钥以及加密种子密钥的值.
攻击试验及结果
本次试验使用一台普通PC机,其配置为IntelCore Duo CPU T2350,内存类型为DDR2,大小为1GB,硬盘大小为120GB.因为数据量大,所以单独使用一个16G字节的磁盘分区存放Xi+4.此算法中Xi+4使用C语言的一维数组来存储,数组每项占4个字节,其范围:0~232-1,有232项,每一项存储一位自然数,所以共4Χ4G=16G字节.
在GCC编译环境下,用C语言实现了模拟攻击软件,该软件包含SMS4加密算法,使用一个线程加密,用另外一个线程模拟攻击,用软件模拟故障诱导过程.每次进行10次试验,选择其中一组结果如表1所示.
算法说明:在目前的软件实现算法中,折半查找采用直接读取windows操作系统下NTFS分区下Xi+4文件的方法,其在硬盘上的大小为16GB;每次读4个字节,也就是1位自然数,这种算法导致折半查找的速度受到影响.如果设法取得文件中每个记录的索引,再把此索引放入内存,从而只需要搜索索引就可以找到文件中Xi+4的值.DDR2类型内存的读取速度高达338MB/S,而硬盘访问速度比内存慢一个数量级以上(硬盘读取约为16MB/S),可见如果用此方法,可以显著提高搜索的速度.
从该实验可见,攻击是可行的.根据结果,攻击一次SMS4密钥(32个轮密钥)只需不到1分钟.
序号 攻击所有32轮所用时间序号 攻击所有32轮所用时间
1 650毫秒6 628毫秒
2 749毫秒7 830毫秒
3 677毫秒8 570毫秒
4 691毫秒9 360毫秒
5 637毫秒10 1000毫秒
表1攻击试验结果
结论
文中给出了一种模型,它通过故障诱导引入特殊的输入数据,从而简化SMS4算法轮函数的差分故障与暴力联合攻击.该攻击方法除了利用故障诱导外,还使用了链表以及折半查找算法,可以在暴力攻击中利用输出值和输入值之间的映射关系找出输入密码,从而实施该攻击.从试验结果可以看出,此类攻击对SMS4十分有效,所以使用SMS4密码算法时,必须对轮函数相关的加密设备提供保护,以防止攻击者进行故障诱导.
对SMS4的攻击以及预防是一个有意义的课题,通过研究,找到算法的缺陷和弱点,在具体实现时就可以减少或者避免风险,从而进一步提高密码本身的安全性,这也是为何我国公开SMS4密码算法积极意义之一.除了对它进行攻击之外,还有很多有意义的课题值得进一步挖掘和研究.下一步的研究重点是如何提高搜索的效率,进一步提高攻击速度,以及如何进一步提高其性能.
参考文献:
[1]国家商用密码管理办公室[S].无线局域网产品使用的SMS4密码算法.http://www.oscca.gov.cn/upfile/200621016423197990.pdf
[2]张蕾,吴文玲.SMS4密码算法的差分故障攻击[J].计算机学报,2006,9:1597-1598
[3]Boneh D., DeMillo R.A., Lipton R.J.. On the importanceof checking cryptographic protocols for faults[C]. In: Proceedings ofthe EUROCRYPT’97 Konstanz, Germany, 1997. 37-51
[4]Hemme L.. A differential fault attack against earlyrounds of (triple-) DES[C]. In: Joye Marc, Quisquater Jean-Jacqueseds. Cryptographic Hardware and Embedded Systems-CHES 2004.LectureNotes in Computer Science 3156. Berlin: Springer Verlag, 2004.254-267
[5]Biham E., Shamir A. Differential fault analysis of secret keycryptosystems[C]. In: Proceedings of the CRYPTO’97, Santa Barbara,California, USA, 1997. 513-525
[6]Hoch Jonathan J., Shamir A.. Fault analysis of stream ciphers[C]. In:Joye Marc, Quisquater Jean-Jacques eds. Cryptographic Hardware andEmbedded Systems-CHES2004. Lecture Notes in Computer Science 3156.Berlin: Springer Verlag, 2004. 240-253
[7]Chen Chien-Ning, Yen Sung-Ming. Differential faultanalysis on AES key schedule and some countermeasures[C].In: Proceedings of the Australasian Conference on InformationSecurity and Privacy-ACISP 2003, Wollongong, Australia, 2003.118-129
[8]耿素云,屈婉玲.离散数学(修订版)[M].北京:高等教育出版社,2004.
附录
攻击试验数据如下:
明文:6966 20 77 69 6e 74 65 72 20 63 6f 6d 65 73 2c (ASCII码表示:if winter comes,)
密钥:0123 45 67 89 ab cd ef fe dc ba 98 76 54 32 10
正确密文:55ec b7 65 45 04 ed ea 0a cd 13 9c 8f a0 4a 76
第i轮Xi+4以及暴力搜索出的轮密钥为:
第i轮 Xi+4 轮密钥(rki)第i轮 Xi+4轮密钥(rki)
0 0x34e2e3a4 0xf12186f9 16 0xff99f357 0xd120b428
1 0x750f11ad 0x41662b61 17 0x0633fa09 0x73b55fa3
2 0x9f243eef 0x5a6ab19a 18 0x025cb167 0xcc874966
3 0xfe5213bf 0x7ba92077 19 0x7c39a660 0x92244439
4 0x57707b32 0x367360f4 20 0x21faafcc 0xe89e641f
5 0x6fef2c24 0x776a0c61 21 0x25fd0766 0x98ca015a
6 0xe4fc7756 0xb6bb89b3 22 0xe4c35982 0xc7159060
7 0xed4bb3ac 0x24763151 23 0xfbc1733f 0x99e1fd2e
8 0xbd9af12c 0xa520307c 24 0xcfcbb5d9 0xb79bd80c
9 0x0b906704 0xb7584dbd 25 0xbb63482e 0x1d2115b0
10 0xa1883cf2 0xc30753ed 26 0x1fd3ff2d 0x0e228aeb
11 0x1606fe94 0x7ee55b57 27 0x1cd1f899 0xf1780c81
12 0xa692a805 0x6988608c 28 0x6d267345 0x428d3654
逆向计算出的种子密钥为:01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10
本文首次发表在计算机工程与设计,2009.18期刊上
标签:
原文地址:http://blog.csdn.net/lichwei1983/article/details/44400393