改进的SMS4算法的差分故障与暴力联合攻击
改进的SMS4算法的差分故障与暴力联合攻击
(1.中国科学院研究生院,北京100049)
摘要SMS4是在国内正式使用并于2006年发布的第一个用于无线局域网的商用分组password算法.文中研究了SMS4对差分故障和暴力联合攻击的安全性.攻击使用随机故障模型,提出一种简化的轮函数差分故障攻击与暴力攻击相结合的方法.用该攻击方法不到1分钟就能够全然恢复出128位的种子密钥.文章结果证实SMS4password算法非常难防范利用差分故障和暴力攻击联合的攻击.为了避免这类攻击,在SMS4password的实际使用中必须对轮函数相关的加密设备提供保护,从而使得攻击者无法使用故障诱导方法.
关键词:SMS4password算法;故障模型。暴力攻击;差分故障攻击。差分分析;
中图分类号: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引言
SMS4password算法是无线局域网WAPI的password标准,是中国国家商用password标准[1,2].同其它国际标准比方DES,RSA一样,在公开后公众添加了对其的了解,同一时候通过对它的安全性评估,能够知道其缺陷,以便更好地改进,尽可能加大黑客的攻击难度.
“故障攻击”是由Boneh等人在1996年首次提出,其整体思想是利用password计算过程中存在的错误,加以诱导从而破解[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算法轮函数的差分故障与暴力联合攻击.该攻击方法除了利用故障诱导外,还使用了链表以及折半查找算法,能够在暴力攻击中利用输出值和输入值之间的映射关系找出输入password,从而实施该攻击.从试验结果能够看出,此类攻击对SMS4十分有效,所以使用SMS4password算法时,必须对轮函数相关的加密设备提供保护,以防止攻击者进行故障诱导.
对SMS4的攻击以及预防是一个有意义的课题,通过研究,找到算法的缺陷和弱点,在详细实现时就能够降低或者避免风险,从而进一步提高password本身的安全性,这也是为何我国公开SMS4password算法积极意义之中的一个.除了对它进行攻击之外,还有非常多有意义的课题值得进一步挖掘和研究.下一步的研究重点是怎样提高搜索的效率,进一步提高攻击速度,以及怎样进一步提高其性能.
參考文献:
[1]国家商用password管理办公室[S].无线局域网产品使用的SMS4password算法.http://www.oscca.gov.cn/upfile/200621016423197990.pdf
[2]张蕾,吴文玲.SMS4password算法的差分故障攻击[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
本文首次发表在计算机project与设计,2009.18期刊上
改进的SMS4算法的差分故障与暴力联合攻击的更多相关文章
- 《图形学》实验五:改进的Bresenham算法画直线
开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: //中点Bresenham算法生成直线 #include <gl/glut.h ...
- 倒排索引压缩:改进的PForDelta算法
由于倒排索引文件往往占用巨大的磁盘空间,我们自然想到对数据进行压缩.同时,引进压缩算法后,使得磁盘占用减少,操作系统在query processing过程中磁盘读取效率也能提升.另外,压缩算法不仅要考 ...
- 大话数据结构(十二)java程序——KMP算法及改进的KMP算法实现
1.朴素的模式匹配算法 朴素的模式匹配算法:就是对主串的每个字符作为子串开头,与要连接的字符串进行匹配.对主串做大循环,每个字符开头做T的长度的小循环,直到成功匹配或全部遍历完成为止. 又称BF算法 ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...
- 改进的SMO算法
S. S. Keerthi等人在Improvements to Platt's SMO Algorithm for SVM Classifier Design一文中提出了对SMO算法的改进,纵观SMO ...
- zoj 1081 (改进的弧长算法)(转)
看到网上除了射线法,很长一段代码之外,看到了一个很简单的算法解决这个问题,特意转了过来 /* 这个算法是源自<计算机图形学基础教程>(孙家广,清华大学出版社),在该书 的48-49页,名字 ...
- 算法复习——差分约束(ssoi种树)
题目: 题目描述 为了绿化乡村,H 村积极响应号召,开始种树了. H 村里有 n 幢房屋,这些屋子的排列顺序很有特点,在一条直线上.于是方便起见,我们给它们标上 1-n .树就种在房子前面的空地上. ...
- SpringCloud升级之路2020.0.x版-32. 改进负载均衡算法
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 在前面一节,我们梳理了实现 Feign 断路器以及线程隔离的思路,这一节,我们先不看如何源 ...
随机推荐
- 转 关于oracle 分区表 表空间以及索引的总结
关于oracle的表空间,分区表,以及索引的总结关键字: oracle, 表空间, 分区表, 索引 上周第一次做数据库测试碰到了很多问题特此总结: 表空间: Oracle的UNDOTBS01.DBF文 ...
- 21 段实用便捷的 PHP 代码
PHP 是目前使用最广泛的基于 Web 的编程语言,驱动着数以百万计的网站,其中也包括如 Facebook 等一些大型站点.这里收集了 21 段实用便捷的 PHP 代码摘录,对每种类型的 PHP 开发 ...
- [uiautomator篇] 如何获取apk的包名 博客模板
Android自动化学习笔记:获取APK包名的几种方法 ------------------------------------------------------------------------ ...
- 在Asp.net MVC中应该怎样使用Spring.Net
简单工厂 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口.简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常根据一 ...
- 九度oj 题目1392:排序生成最小的数
题目描述: 还记得陈博是个数字完美主义者么?^_^....这次,他又闹脾气了!我们知道计算机中常常要使用数组保存一组数字,但是今天他就要求把数组里的所有数字组成一个,并且这个数字是这些数字所能组成的所 ...
- POJ 2181 Jumping Cows
Jumping Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6398 Accepted: 3828 Desc ...
- Codeforces Round #345 (Div. 2)——B. Beautiful Paintings(贪心求上升序列个数)
B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...
- HDU-1528/1962 Card Game Cheater
两组牌中两张牌相比能赢的就连,后求最大匹配. #include <cmath> #include <cstdlib> #include <cstdio> #incl ...
- yield的概念及使用姿势
概念: 当调用Thread.yield方法时,会给线程调度器一个当前线程愿意让出CPU使用的暗示,但是线程调度器可能会忽略这个暗示. 代码演示: public class YieldDemo impl ...
- 如何发布自己的服务---zookeeper
人肉告知的方式:如果你发现你的服务一台机器不够,要再添加一台,这个时候就要告诉调用者我现在有两个ip了,你们要轮询调用来实现负载均衡:调用者咬咬牙改了,结果某天一台机器挂了,调用者发现服务有一半不可用 ...