改进的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轮非线性迭代结构.解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序.

  1. 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所示:

    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].

    1. 算法中所用几个数学定理的说明

      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),这说明异或运算满足结合律.从而说明自然数集合及其异或运算构成群.

      1. 异或运算(⊕)的逆运算是本身,循环左移(<<<)的逆运算是循环右移(>>>)
  1. 差分故障攻击简介
    1. 故障模型
  1. 攻击者每次可以诱发存储中间值的存储单元发生任意错误.
  2. 对于同一个明文P而言,攻击者可以获得在同一个密钥K作用下的正确密文C和错误密文C*.
    1. 攻击基本思想

一般的差分故障攻击基本思想如下:首先选择特定明文,对加密过程进行故障诱导,分别获得该明文对应的正确密文和错误密文(此阶段称为故障诱导与收集数据),最后对收集到的数据进行分析,恢复出密钥.

详细过程如下:

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节介绍的密钥扩展算法的逆运算,可以计算出各轮子密钥以及加密种子密钥的值.

  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攻击试验结果

  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期刊上

时间: 2024-10-12 19:44:57

改进的SMS4算法的差分故障与暴力联合攻击的相关文章

两种改进的模拟退火算法求解大值域约束满足问题1.0

0引言 约束满足问题(Constraint Satisfaction Problem,CSP)是人工智能研究领域中一个非常重要的分支,现已成为理论计算机科学.数学和统计物理学等交叉学科研究中的热点问题.人工智能.计算机科学和自动控制等领域中的许多问题都可以归结为约束满足问题.同时,约束满足问题在实际问题如模式识别.决策支持.物流调度及资源分配等领域也有着非常广泛的应用. CSP由一个变量集合和一个约束集合组成.每个变量都有一个非空的可能值域,每个约束描述了一个变量子集与子集内各变量的相容赋值,所

改进的冒泡排序算法二

/** * Project Name:Algorithm * File Name:BubbleSortImprove2.java * Package Name: * Date:2017年9月14日上午11:30:48 * Copyright (c) 2017, [email protected] All Rights Reserved. * */ /** * ClassName:BubbleSortImprove2 * Function: 改进的冒泡排序算法, 测试数据集:6 3 5 7 0 4

两种改进的模拟退火算法求解大值域约束满足问题2.0

2    两种改进的模拟退火算法 模拟退火算法(Simulatedannealing algorithm)是一种通用的概率算法,其思想源于固体退火过程:当固体物质温度很高时,固体内部粒子运动杂乱无序:而当温度逐渐降低时粒子又渐渐趋于有序运动.模拟退火算法往往用来求解优化问题的最小值问题,算法过程中会不断地对变量的当前赋值进行扰动,以产生新的赋值.如果新的赋值使得目标函数值变小,则接受新的赋值为当前赋值.反之,则以概率接受新的赋值,其中T是当前温度,为新赋值目标函数值,为当前赋值目标函数值,重复上

倒排索引压缩:改进的PForDelta算法

由于倒排索引文件往往占用巨大的磁盘空间,我们自然想到对数据进行压缩.同时,引进压缩算法后,使得磁盘占用减少,操作系统在query processing过程中磁盘读取效率也能提升.另外,压缩算法不仅要考虑压缩效果,还要照顾到query processing过程的解压缩效率. 总的来说,好的索引压缩算法需要最大化两个方面: 1.减少磁盘资源占用 2.加快用户查询响应速度 其中,加快响应速度比减少磁盘占用更为重要.本文主要介绍PForDelta压缩算法,其简单易懂,能够提供可观的数据压缩,同时具备非常

《图形学》实验五:改进的Bresenham算法画直线

开发环境: VC++6.0,OpenGL 实验内容: 使用改进的Bresenham算法画直线. 实验结果: 代码: 1 //中点Bresenham算法生成直线 2 #include <gl/glut.h> 3 #include <math.h> 4 5 #define WIDTH 500 //窗口宽度 6 #define HEIGHT 500 //窗口高度 7 #define DRAWLINE ProBresenham(100,100,400,400); //画直线 8 9 #pr

图论之随机配流02——基于LOGIT的STOCH配流法-改进的dial算法

function dialsuanfaxishujuzhen(T) %程序说明 clc disp('======================================================================================'); disp('                   <基于LOGIT的STOCH配流法--改进的dial算法>'); disp('运行环境:MATLAB 8.3.0.532 '); disp('制 作 人:兰州交通大学

《基于改进随机抽取算法的信息论题库和智能组卷系统的设计与实现》

一:基本信息 1标题:<基于改进随机抽取算法的信息论题库和智能组卷系统的设计与实现> 2时间:2015 3来源:中国地质大学硕士学位论文 4关键词:随机抽取,题库,智能组卷. 二:内容: 研究意义:为了真正实现教学与考试分离,推进无纸化教学改革的浪潮,使命题组卷更加科学合理.公正公平,应用先进的计算机技术完成试题数据库系统建设,当需要考卷时,使用系统的组卷功能就可以很方便地从试题库中抽取符合要求的试题直接组成试卷.这样,不仅节省了教师宝贵的时间和精力,提高教学考试工作效率,更加客观.科学.全面

挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的一种聚类算法,是BIRCH层次聚类算法的改进版本.可以应用于混合属性数据集的聚类,同时加入了自动确定最佳簇数量的机制,使得方法更加实用.本文在学习文献[1]和“IBM SPSS Modeler 15 Algorithms Guide”的基础上,融入了自己的理解,更详尽地叙述两步聚类算法的流程和细节.

【最短路】求两点间最短路径的改进的Dijkstra算法及其matlab实现

代码来源:<图论算法及其matlab实现>(北京航空航天出版社) P18 书中提出了基于经典Dijkstra算法改进的两种算法. 其中算法Ⅱ的效率较高. 代码如下: 1 function a=Dijk(a) 2 %a(输入量)表示图的邻接矩阵 3 %a(输出量)表示所求最短路径的距离矩阵 4 5 %建立邻接矩阵,若不还是对称矩阵,则变为对称矩阵 6 n=length(a); 7 for i=2:n 8 for j=1:(i-1) 9 a(i,j)=a(j,i); 10 end 11 end 1