一种针对SM4密码算法末轮约减轮故障分析攻击检测方法

文档序号:30596195发布日期:2022-07-01 20:43阅读:139来源:国知局
一种针对SM4密码算法末轮约减轮故障分析攻击检测方法
一种针对sm4密码算法末轮约减轮故障分析攻击检测方法
技术领域
1.本发明涉及密码算法分析检测领域,尤其涉及一种针对sm4密码算法后4轮的约减轮故障分析的方法。


背景技术:

2.一般情况下,运行密码算法的硬件设备或软件程序都能够正确的执行各种密码算法运算,但是在有干扰的情况下,密码运算的单元模块可能会出现一些故障,比如运算异常或者寄存器故障。利用这些故障引起的错误信息来攻击恢复出密钥的方法称为密码故障分析。
3.目前密码设备的接口和实现对故障注入的防护措施都有欠缺,一般都比较容易受到攻击。1996年,boneh等首先将故障注入的方法引入到密码算法的分析中,从此针对智能芯片的故障注入技术开始飞速发展。
4.根据攻击者侵入密码设备的程度,可以将故障注入分为3种,包括非侵入式故障注入、半侵入式故障注入和侵入式故障注入。顾名思义,后两种方式需要在物理上接触密码芯片,因此需要用于剖片处理的设备、化学用品以及用于注入故障的特殊设备。非侵入式的故障注入主要通过外界干扰的方式,如电压、时钟、磁场等,因此不需要这些昂贵的设备。
5.故障注入攻击通常由两个部分构成,即故障注入和错误数据利用。故障注入是在某些适合的时间诱导密码运行中的某些中间状态发生故障,这种攻击的实施方式和实际产生的效果依赖于攻击者使用的设备和工作环境。错误利用主要是利用故障注入所产生的结果即错误数据信息,并使用与其对应的分析方法来恢复出部分甚至全部密钥,攻击能否成功一般既依赖于密码系统的设计和实现,也依赖于其算法规范。
6.故障注入攻击的执行可以分为4个步骤:(1)选定故障模型攻击者在进行故障注入前需要明确给出错误注入时机、位置、动作和效果模型。典型的故障模型为:在加密过程中某中间轮发生单字节的瞬时故障。
7.(2)故障注入根据故障模型,攻击者选定故障注入的手段,如电流、时钟、激光、射线等干扰方式进行错误注入。常用的诱导故障发生的方法分为3类:1.直接从外部加入非正常信息,如异常的时钟、电压、温度等;2.结合探测攻击,从内部引入错误;3.skorobogatov和anderson发明的半入侵攻击属于错误攻击,可在去除钝化层之后,使用激光或重粒子辐照芯片制定区域,引入错误。
8.(3)错误样本筛选在故障注入完成后,攻击者根据故障模型,参考密码运行最终输出中的错误宽度、错误位置、错误值,甚至从错误注入后密码运行的时间长短来筛选理想的错误样本,该步骤对于错误分析效率具有较大影响。
9.(4)密钥分析在筛选出理想的错误样本后,攻击者分析密码运行正确输出和错误输出之间的关系,使用一定的错误分析方法结合密码算法设计分析出相关密钥值。
10.sm4算法是分组长度和密钥长度均为128bit,加密算法和解密算法均为32轮的非线性迭代密码算法,其加密算法和解密算法结构相同,只是运算时轮密钥使用的顺序相反,解密轮密钥是加密轮密钥的逆序。sm4加密算法的详细流程如图1所示。
11.在图1中xi∈z
232
(z
2e
表示ebit的向量集(z
2e
)),明文输入为(x0,x1,x2,x3),密文输出为(y0,y1,y2,y3),其中xi、x
i+1
、x
i+2
和x
i+3
为轮迭代运算函数f的输入,rki∈z
232
每轮的轮密钥,i∈{ 0,1,2,

,31}。
12.从加密的流程可以看出,轮迭代函数f包括的运算有异或、非线性变换τ和线性变换l,轮迭代函数的表达式为:x
i+4
=f(xi,x
i+1
,x
i+2
,x
i+3
,rki)=xi⊕
t(x
i+1

x
i+2

x
i+3

rki) ,在该表达式中,t表示合成置换,是由非线性变换τ和线性变换l复合而成,迭代函数f的详细的流程如图2所示,在整个sm4密码算法的加解密过程中,一共要执行32轮这样的轮迭代函数f。
13.令resi=t(x
i+1

x
i+2

x
i+3

rki),则:x
i+4
=f(xi,x
i+1
,x
i+2
,x
i+3
,rki)= xi⊕
t(x
i+1

x
i+2

x
i+3

rki)变为:x
i+4
=f(xi,x
i+1
,x
i+2
,x
i+3
,rki)= xi⊕
resi非线性变换τ是由4个并行s盒子构成,每个s盒子为固定的8bit输入8bit输出的置换,记为sbox(.)。
14.设输入为ai=a
i,0
||a
i,1
||a
i,2
||a
i,3
=x
i+1

x
i+2

x
i+3

rki,其中a
i,j
∈z
232
,表示第i轮第j(j∈{0,1,2,3 })个s盒子的输入,||表示两个数据bit的拼接,输出为bi=b
i,0
||b
i,1
||b
i,2
||b
i,3
,b
i,j
表示第i轮、第j个s盒子的输出,则非线性变换τ为:bi=τ(ai)=sbox(a
i,0
)||sbox(a
i,1
)||sbox(a
i,2
)||sbox(a
i,3
)线性变换l的描述如下所示,ci=l(bi)=bi⊕
(bi《《《2)

(bi《《《10)

(bi《《《18)

(bi《《《24)在该式中,ci∈z
232
,bi∈z
232
,ci为线性变换l的输出,bi为线性变换l的输入,同时也是非线性变换τ的输出。
15.sm4的密钥扩展算法:轮密钥由加密密钥通过密钥扩展算法生成,其结构与加密变换类似。设加密密钥为mk=(mk0,mk1, mk2, mk3),i=0,1,2,3。令ki∈z
232
,i=0,1,

,35,轮密钥rki∈z
232
,i=0,1,

,31,则轮密钥生成方法如下式所示:(k0,k1, k2, k3)=( mk0⊕
fk0,mk1⊕
fk1, mk2⊕
fk2, mk3⊕
fk3)rki=k
i+4
=ki⊕
t`( k
i+1
⊕ki+2
⊕ki+3

cki)其中,t`变换与加密变换中的t变换基本相同,只是其中的线性变换l必须修改为以下l`:l’(b)=b

(b《《《13)

(b《《《23)系统参数fki(i=1,2,3)的取值,采用16进制表示为:fk0=a3b1bac6,fk1=56aa3350,fk2=677d9197,fk3=b27022dc。
16.固定参数ck的取值方法为:设ck
i,j
为cki的第j字节(i=0,1,...,31;j=0,1,2,3),即cki=( ck
i,0
, ck
i,1
, ck
i,2
, ck
i,3
)∈(z
28
)4,则ck
i,j
=((4i+j)*7)mod 256。32个固定参数
cki用16进制表示为:00070e15, 1c232a31, 383f464d, 545b6269,70777e85, 8c939aa1, a8afb6bd, c4cbd2d9,e0e7eef5, fc030a11, 181f262d, 343b4249,50575e65, 6c737a81, 888f969d, a4abb2b9,c0c7ced5, dce3eaf1, f8ff060d, 141b2229,30373e45, 4c535a61, 686f767d, 848b9299,a0a7aeb5, bcc3cad1, d8dfe6ed, f4fb0209,10171e25, 2c333a41, 484f565d, 646b7279根据密钥扩展算法,反推出密钥的方法如下:a、加密运算:对于加密运算,攻击出前四轮的轮子密钥rk0,rk1,rk2和rk3,根据密钥扩展算法得下式:rk0=k4=k0⊕
t(k1⊕
k2⊕
k3⊕
ck0) (1)rk1=k5=k1⊕
t(k2⊕
k3⊕
k4⊕
ck1)(2)rk2=k6=k2⊕
t(k3⊕
k4⊕
k5⊕
ck2) (3)rk3=k7=k3⊕
t(k4⊕
k5⊕
k6⊕
ck3)(4)由(1)、(2)、(3)和(4)式可得k3,如(5)式所示。
17.k3=rk3⊕
t(rk0⊕
rk1⊕
rk 2

ck3)
ꢀꢀꢀꢀꢀ
(5)由(3)和(5)式得k2,如(6)式所示。
18.k2=rk2⊕
t(k3⊕
rk0⊕
rk1⊕
ck2)(6)由(2)、(5)和(6)式得k1,如(7)式所示。
19.k1=rk1⊕
t(k2⊕
k3⊕
rk0⊕
ck1)
ꢀꢀꢀꢀꢀꢀ
(7)由(2)、(5)和(6)式得k0,如(8)式所示。
20.k0=rk0⊕
t(k1⊕
k2⊕
k3⊕
ck0)
ꢀꢀꢀꢀꢀꢀ
(8)又(k0,k1,k2,k3)=(mk0⊕
fk0, mk1⊕
fk1, mk2⊕
fk2, mk3⊕
fk3),所以可得密钥为mk0= k0⊕
fk0,mk1= k1⊕
fk1,mk2= k2⊕
fk2,mk3= k3⊕
fk3。
21.b、解密运算:对于解密运算,攻击出前四轮的轮子密钥rk0、rk1、rk2和rk3,根据密钥扩展算法得下式:rk0=k
35
=k
31

t(k
32
⊕k33
⊕k34

ck
31
)
ꢀꢀꢀ
(9)rk1=k
34
=k
30

t(k
31
⊕k32
⊕k33

ck
30
)
ꢀꢀꢀ
(10)rk2=k
33
=k
29

t(k
30
⊕k31
⊕k32

ck
29
)
ꢀꢀ
(11)rk3=k
32
=k
28

t(k
29
⊕k30
⊕k31

ck
29
)
ꢀꢀ
(12)由(9)、(10)、(11)和(12)式子,得到k
32
、k
33
、k
34
和k
35
,i取31到0,计算ki=k
i+4

t(k
i+1

k i+2

k i+3

cki),即可得到k0、k1、k2和k3,又(k0,k1,k2,k3)=(mk0⊕
fk0, mk1⊕
fk1, mk2⊕
fk2, mk3⊕
fk3),所以可得密钥为mk0= k0⊕
fk0,mk1= k1⊕
fk1,mk2= k2⊕
fk2,mk3= k3⊕
fk3。
22.目前,针对sm4密码算法末轮约减轮故障分析攻击检测方法该方法先利用故障注
入的技术使sm4密码执行的时候提前跳出正常的32轮迭代,然后利用该故障情况下生成的输出得到后4轮中某一轮输出,接着有计划的重复上述操作直至获取后4轮的全部轮输出并结合明文信息计算出后4轮的轮密钥,最后根据后4轮的轮密钥计算出整个算法的初始密钥。


技术实现要素:

23.本发明的目的是提供一种针对sm4密码算法末轮约减轮故障分析攻击检测方法,以解决对sm4算法进行攻击时方法复杂,样本量大的问题。通过注入故障的技术使sm4密码运行时提前跳出轮函数的迭代过程从而获取后4轮中某轮的轮输入,然后重复上述操作以获取后4轮的全部轮输入,然后结合密文信息推断出后4轮的轮密钥,最后结合密钥扩展算法利用后4轮的轮密钥计算出初始密钥,从而不仅实现了针对sm4密码算法线性变换输出的侧信道能量攻击,而且降低了攻击次数,增强了攻击效率、灵活性、有效性和成功率。
24.为解决上述技术问题,本发明提供一种种针对sm4密码算法末轮约减轮故障分析攻击检测方法,具体包括以下步骤:s1:对sm4密码算法后4轮的轮输入进行故障注入来减少迭代的轮数,获取sm4密码算法后4轮的轮输入;s2:根据sm4密码算法后4轮的轮输入推出后4轮的轮密钥,根据sm4密钥扩展算法,逆向计算出初始密钥。
25.进一步地,s1具体包括以下步骤:s11:选择故障注入整体的位置为后4轮,选择完成之后设定sum=4,集合r={29,30,31,32};s12:开始执行sm4密码算法,进行故障注入,若提前跳出加解密的迭代轮且轮数属于集合r中的元素,记该运算的轮数为r,若未成功则重复本步骤;s13:判断r是否已在中,如果是则跳转到步骤s12,如果不是则将其添加到集合中,根据步骤s12中的输出利用反序变化推出该运算的轮输入,count自增;s14:判断count是否等于sum,如果不是则跳转到s12继续执行,反之则故障注入完毕,根据密文信息和步骤s13中记录的后4轮的轮输入推断第29轮、第30轮、第31轮的轮输出。
附图说明
26.图1为sm4加密算法流程图;图2为迭代函数f的流程图;图3为对后4轮的轮输入进行故障注入的位置示意图;图4为针对sm4密码算法后4轮的约减轮故障分析攻击方法的流程图。图5为说明书摘要附图。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1