发明内容
针对现有技术中存在的缺陷,本发明的目的是提供一种智能卡SM4算法的DPA攻击与密钥还原方法和系统。该方法和系统能够实现智能卡上SM4算法的DPA攻击,还原SM4加密密钥,验证智能卡上SM4算法的抗攻击能力。
为达到以上目的,本发明采用的技术方案是:一种智能卡SM4算法的DPA攻击与密钥还原方法,包括以下步骤:
步骤一,对SM4算法加密过程的前4轮进行DPA攻击,获取前4轮的子密钥;
步骤二,利用得到的前4轮子密钥恢复SM4密钥。
进一步,步骤一中,所述的SM4算法的密钥长度为128位,生成32轮子密钥参与每轮的运算,其中每一轮子密钥的长度为32位,每一轮运算中4次使用到了S盒。
更进一步,步骤一中,通过攻击S盒输出数据实现对SM4算法加密过程的前4轮进行DPA攻击,获取前4轮的子密钥。
进一步,针对SM4算法中S盒输出数据的DPA攻击方法包括:攻击SM4算法的S盒输出数据字节的汉明重量;攻击SM4算法的S盒输出数据的某一位;攻击SM4算法的S盒输出所有位。
更进一步,针对SM4算法中S盒输出数据的DPA攻击方法包括以下步骤:
1)设计一个猜测的子密钥数组k[],这个数组的长度为28:
int[]k={0x00000000,0x01010101,0x02020202,0x03030303,…,0xffffffff};
k[]中元素的格式为:0xABABABAB,其中A、B为十六进制0-f之间的任意数字,第一个AB对应参与第一个S盒运算部分的密钥,第二个AB对应参与第二个S盒运算部分的密钥,第三个AB对应参与第三个S盒运算部分的密钥,最后一个AB对应参与第四个S盒运算部分的密钥;
2)定义selected[]为1024大小的数组,用来存放S盒输出数据字节的汉明重量,根据selected[]确定密钥相关性的大小;
3)对SM4算法进行DPA攻击,获取SM4算法的前四轮子密钥。
更进一步,步骤3)中,对SM4算法进行DPA攻击,获取SM4算法的前四轮子密钥包括以下步骤:
(1)初始化操作,初始化的过程包括密钥字节数、S盒候选项数、差分功耗的条数、轮密钥的初始化:
keys=4;//4字节密钥,即每轮攻击可以获取4字节子密钥;
candidates=256;//每个S盒有256个候选项;
dataLength=keys*candidates;//差分功耗的数量;
round0Key=0;//第一轮子密钥初始化为0;
round1Key=0;//第二轮子密钥初始化为0;
round2Key=0;//第三轮子密钥初始化为0;
round3Key=0;//第四轮子密钥初始化为0;
(2)确定一个整型数组x[],用来存放攻击该轮的输入数据;
(3)攻击第一轮,读取采集到的智能卡芯片功耗数据,进行计算最终返回selected[]数组,得到的selected[]数组内容如下:selected[0]~selected[255]中存放的是第一组猜测的8位部分子密钥相关性值,选取相关性最大的值确定与之对应的8位密钥;从selected[256]~selected[511]中得到第二部分8位密钥,从selected[512]~selected[767]中得到第三部分8位密钥,从selected[768]~selected[1023]中得到第四部分8位密钥;
(4)把得到的4部分各8位子密钥依次组合,就是SM4算法第一轮加密运算的子密钥;
(5)利用已知的子密钥继而攻击下一轮,一直得到前四轮子密钥。
进一步,从破解得到的SM4算法前4轮子密钥中还原SM4算法的密钥方法如下:
1).已知rk3=f(K3,rk0,rk1,rk2),由rk0、rk1、rk2、rk3计算32位的K3;
计算方法:K3=rk3^L’(SBox(rk0^rk1^rk2^CK3));
2).已知rk2=f(K3,K2,rk0,rk1),由rk0、rk1、rk2、K3计算32为的K2;
计算方法:K2=rk2^L’(SBox(K3^rk0^rk1^CK2));
3).计算K1、K0;
计算方法:K1=rk1^L’(SBox(K2^K3^rk0^CK1));
K0=rk0^L’(SBox(K1^K2^K3^CK0));
4).由K0、K1、K2、K3和FK0、FK1、FK2、FK3还原SM4密钥MK=(MK0,MK1,MK2,MK3);
计算方法:MK3=K3^FK3;
MK2=K2^FK2;
MK1=K1^FK1;
MK0=K0^FK0;
MK0、MK1、MK2、MK3依次拼接起来就是SM4的密钥MK。
本发明还公开了一种智能卡SM4算法的DPA攻击与密钥还原系统,包括以下装置:
子密钥获取装置,用于对SM4算法加密过程的前4轮进行DPA攻击,获取前4轮的子密钥;
密钥恢复装置,用于利用得到的前4轮子密钥恢复SM4密钥。
进一步,所述的子密钥获取装置是通过攻击S盒输出数据实现对SM4算法加密过程的前4轮进行DPA攻击,获取前4轮的子密钥;所述的SM4算法的密钥长度为128位,生成32轮子密钥参与每轮的运算,其中每一轮子密钥的长度为32位,每一轮运算中4次使用到了S盒;
所述的子密钥获取装置包括以下模块:用于攻击SM4算法的S盒输出数据字节的汉明重量的模块;用于攻击SM4算法的S盒输出数据的某一位的模块;用于攻击SM4算法的S盒输出所有位的模块。
本发明的效果在于:采用本发明所述的方法及系统,通过对SM4算法的DPA攻击实现难度(比如SM4加密算法至少需要攻击4轮),对比SM4算法与其他对称加密算法(比如DES加密算法至少攻击1轮即可)抗攻击能力的强弱;设计和实现智能卡中SM4算法的防御策略,通过针对SM4的DPA攻击方法验证防御策略的有效性,攻击的实现为了更好的防御。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步描述。
一种智能卡SM4算法的DPA攻击与密钥还原方法,包括以下步骤:
步骤一,对SM4算法加密过程的前4轮进行DPA攻击,获取前4轮的子密钥;
步骤二,利用得到的4轮子密钥恢复SM4密钥。
本实施例中,如图1所示,图1是SM4密钥扩展算法流程图,MK=(MK0,MK1,MK2,MK3)为SM4的128位密钥,其中FK=(FK0,FK1,FK2,FK3)和CK=(CK0,CK1,CK2,CK3)分别是已知的系统参数和固定参数。
参照图1,SM4密钥扩展算法如下:
1)K0=MK0^FK0,K1=MK1^FK1,K2=MK2^FK2,K3=MK3^FK3;
2)K4=K0^T’(K1^K2^K3^CK0),K4即第1轮子密钥rk0;
3)K5=K1^T’(K2^K3^K4^CK1),K5即第2轮子密钥rk0;
同理,依次计算得到K6、K7……K35,即分别是第3轮、第4轮……第32轮的子密钥。
生成的32轮子密钥会参与接下来的32轮的加密运算,其中每一轮子密钥的长度为32位,每一轮运算中4次使用到了S盒。
图2是SM4加密算法的流程图,图3中虚线框起的部分是图2中步骤F的详细流程。图2中(X0,X1,X2,X3)是128位明文输入,(X32,X33,X34,X35)是加密后的128位密文。图3中的t变换是非线性变换:
B=(b0,b1,b2,b3)=t(A)=(Sbox(a0),Sbox(a1),Sbox(a2),Sbox(a3)),L变换是线性变换:C=(c0,c1,c2,c3)=L(B)=B⊕(B<<<2)⊕(B<<<10)⊕(B<<<18)⊕(B<<<24)。参照图2和图3,SM4的加密过程如下:
1)128位明文分为4组(X0,X1,X2,X3),计算X4=X0^(L(t(X1^X2^X3^rk0))),X4即第1轮加密后的结果;
2)计算X5=X1^(L(t(X2^X3^X4^rk1))),X5即第2轮加密后的结果;
3)计算X6=X2^(L(t(X3^X4^X5^rk2))),X4即第3轮加密后的结果;
同理,依次计算得到X7、X8……X32、X33、X34、X35,(X32,X33,X34,X35)即加密之后的128位密文。
本实施例中,一种智能卡SM4算法的DPA攻击与密钥还原方法,包括以下步骤:步骤一,对SM4算法加密过程的前4轮进行DPA攻击,获取前4轮的子密钥,本实施例中的具体方法如下:
攻击S盒输出数据,S盒运算是SM4算法中唯一的非线性运算部分,这里针对SM4加密算法DPA攻击的目标就是它的S盒运算部分。SM4算法中的S盒为固定的8比特输入8比特输出置换,每轮的32位子密钥分为4组,每组8位,依次进行4次S盒置换。SM4的某一轮加密中如果可以猜到这4组参与S盒运算的8位密钥,那么把这4组各含8位的密钥部分组合,就可以得到SM4的这一轮32位子密钥。
针对SM4算法中S盒输出数据的DPA攻击有效方法有3种:攻击SM4算法的S盒输出数据字节的汉明重量;攻击SM4算法的S盒输出数据的某一位;攻击SM4算法的S盒输出所有位。在实际攻击SM4算法加密的智能卡时,针对不同的智能卡和不同的实现,每种方法的攻击效果会各有优劣,所以需要适当选择这3种攻击方法中的一种。
以下详细说明SM4算法的DPA攻击3种方法:针对S盒输出字节的汉明重量的DPA攻击;针对S盒输出某一位值的DPA攻击;针对S盒输出全部位的DPA攻击。
1)设计一个猜测的子密钥数组k[],这个数组的长度为28,即256。因为每一个子密钥长度为32位,子密钥参与运算时会对应到4个8位的S盒,可以如下定义猜测的子密钥数组:
int[]k={0x00000000,0x01010101,0x02020202,0x03030303,…,0xffffffff};
即,k[]中元素的格式为:0xABABABAB,其中A、B为十六进制0-f之间的任意数字,第一个AB对应参与第一个S盒运算部分的密钥,第二个AB对应参与第二个S盒运算部分的密钥,第三个AB对应参与第三个S盒运算部分的密钥,最后一个AB对应参与第四个S盒运算部分的密钥。
2)定义selected[]为1024大小的数组,用来存放S盒输出数据字节的汉明重量,根据selected[]确定密钥相关性的大小,在DPA攻击中,相关性越高,说明猜测的密钥越接近正确密钥。
3)对SM4算法进行DPA攻击,获取SM4算法的前四轮子密钥。
如图4所示,图4是DPA攻击SM4算法的流程图,公开了SM4算法的DPA攻击的3种方法实现过程,包括以下步骤:
(1)初始化操作,初始化的过程包括密钥字节数、S盒候选项数、差分功耗的条数、轮密钥等的初始化:
keys=4;//4字节密钥,即每轮攻击可以获取4字节子密钥;
candidates=256;//每个S盒有256个候选项;
dataLength=keys*candidates;//差分功耗的数量;
round0Key=0;//第一轮子密钥初始化为0;
round1Key=0;//第二轮子密钥初始化为0;
round2Key=0;//第三轮子密钥初始化为0;
round3Key=0;//第四轮子密钥初始化为0;
(2)确定一个整型数组x[],用来存放攻击该轮的输入数据,即:若攻击的是第一轮,则x[0]-x[3]中存放的是第一轮的输入数据;若攻击的是第二轮,需要利用已经得到的第一轮子密钥计算第一轮的输出结果,在x[0]-x[3]中存放第二轮的输入数据;若攻击的是第三轮,需要利用已经得到的第一轮、第二轮子密钥计算第二轮的输出结果,在x[0]-x[3]中存放第三轮的输入数据;若攻击的是第四轮,需要利用已经得到的第一轮、第二轮、第三轮子密钥计算第三轮的输出结果,在x[0]-x[3]中存放第四轮的输入数据;
(3)按图4的流程,攻击方法选择S盒输出字节的汉明重量(其它两种攻击方法图4中亦有描述),以攻击第一轮为例,读取采集到的智能卡芯片功耗数据,进行计算最终返回selected[]数组,计算方法的伪代码如下:
1.For i=0To255:
2. mid=ByteSub(x[1]^x[2]^x[3]^k[i])
3. For j=0To3:
4. p=i,q=24
5. selected[p]=hw((mid>>q) & 0xFF)
6. p+=256,q-=8
7. End
8.End
其中k[i]中存放的是猜测密钥值,ByteSub()函数是S盒变换函数,mid是S盒输出的数据,hw()函数是汉明重量函数。伪代码中第1行是外层256次循环,第3行是内层4次循环,这样就能计算得到256*4=1024个selected值,存放于selected[p]中。
通过计算得到的selected[]数组内容如下:selected[0]~selected[255]中存放的是第一组猜测的8位部分子密钥相关性值,选取相关性最大的值确定与之对应的8位密钥;同理,从selected[256]~selected[511]中得到第二部分8位密钥,从selected[512]~selected[767]中得到第三部分8位密钥,从selected[768]~selected[1023]中得到第四部分8位密钥;
(4)把得到的4部分各8位子密钥依次组合,就是SM4算法第一轮加密运算的子密钥;
(5)利用已知的子密钥继而攻击下一轮,一直得到前四轮子密钥。
步骤二,从破解得到的SM4算法前4轮子密钥中还原SM4算法的密钥。
如图1所示,图1是SM4密钥扩展算法流程图,其中:
SM4的128位密钥:MK=(MK0,MK1,MK2,MK3);
系统参数(已知):FK=(FK0,FK1,FK2,FK3);
固定参数(已知):CK=(CK0,CK1,CK2,CK3);
系统参数FK和固定参数CK是已知的,在得到SM4前4轮子密钥rk0、rk1、rk2、rk3情况下,计算SM4完整的128位密钥方法如下:
1).已知rk3=f(K3,rk0,rk1,rk2),由rk0、rk1、rk2、rk3计算32位的K3;
计算方法:K3=rk3^L’(SBox(rk0^rk1^rk2^CK3));
2).已知rk2=f(K3,K2,rk0,rk1),由rk0、rk1、rk2、K3计算32为的K2;
计算方法:K2=rk2^L’(SBox(K3^rk0^rk1^CK2));
3).同理计算K1、K0;
计算方法:K1=rk1^L’(SBox(K2^K3^rk0^CK1));
K0=rk0^L’(SBox(K1^K2^K3^CK0));
4).由K0、K1、K2、K3和FK0、FK1、FK2、FK3还原SM4密钥MK=(MK0,MK1,MK2,MK3);
计算方法:MK3=K3^FK3;
MK2=K2^FK2;
MK1=K1^FK1;
MK0=K0^FK0;
MK0、MK1、MK2、MK3依次拼接起来就是SM4的密钥MK。
其中L’()方法和SBox以及系统参数FK和固定参数CK可参见国家商用密码管理局公开的《SMS4密码算法》。
如图5所示,一种智能卡SM4算法的DPA攻击与密钥还原系统,包括以下装置:子密钥获取装置1,用于对SM4算法加密过程的前4轮进行DPA攻击,获取前4轮的子密钥;
密钥恢复装置2,用于利用得到的4轮子密钥恢复SM4密钥。
本实施例中,所述的子密钥获取装置是通过攻击S盒输出数据实现对SM4算法加密过程的前4轮进行DPA攻击,获取前4轮的子密钥;所述的SM4算法的密钥长度为128位,生成32轮子密钥参与每轮的运算,其中每一轮子密钥的长度为32位,每一轮运算中4次使用到了S盒;
所述的子密钥获取装置包括以下模块:用于攻击SM4算法的S盒输出数据字节的汉明重量的模块11;用于攻击SM4算法的S盒输出数据的某一位的模块12;用于攻击SM4算法的S盒输出所有位的模块13。
本领域技术人员应该明白,本发明所述的方法和系统并不限于具体实施方式中所述的实施例,上面的具体描述只是为了解释本发明的目的,并非用于限制本发明。本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围,本发明的保护范围由权利要求及其等同物限定。