CN117200974A - 一种基于sm4分组密码算法的故障攻击防护方法及装置 - Google Patents
一种基于sm4分组密码算法的故障攻击防护方法及装置 Download PDFInfo
- Publication number
- CN117200974A CN117200974A CN202311284828.XA CN202311284828A CN117200974A CN 117200974 A CN117200974 A CN 117200974A CN 202311284828 A CN202311284828 A CN 202311284828A CN 117200974 A CN117200974 A CN 117200974A
- Authority
- CN
- China
- Prior art keywords
- sbox
- key
- data
- output
- error
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 125000004122 cyclic group Chemical group 0.000 claims abstract description 104
- 238000006467 substitution reaction Methods 0.000 claims description 31
- 230000009466 transformation Effects 0.000 claims description 7
- 238000001514 detection method Methods 0.000 claims description 4
- 238000002347 injection Methods 0.000 description 4
- 239000007924 injection Substances 0.000 description 4
- 238000012795 verification Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002265 prevention Effects 0.000 description 1
Landscapes
- Error Detection And Correction (AREA)
Abstract
本发明公开了一种基于SM4分组密码算法的故障攻击防护方法,首先根据SM4算法的Sbox的输入和输出之间存在的差值,构造出Dbox;然后通过Dbox计算出预测的Sbox输出校验值,求出实际的Sbox输出校验值,二者进行对比,判断Sbox是否受到故障攻击,再对循环移位的输入和输出进行奇偶校验值运算,通过对比循环移位的输入和输出奇偶校验值,判断循环移位是否受到故障攻击;最后设置系统警告信号,当算法受到攻击,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息。本发明可对SM4算法易受到故障攻击的位置进行防护,使SM4算法可以有效抵抗故障攻击,并且硬件资源消耗少。
Description
技术领域
本发明涉及信息安全技术领域,特别涉及一种基于SM4分组密码算法的故障攻击防护方法。
背景技术
随着信息安全的不断提高,人们对于信息安全问题也变得愈加重视,其中,数据加密过程中的安全问题是主要考虑的方向之一。一般情况下,数据是能够进行正确加密的,但是如果受到了故障攻击,如电压故障注入或者时钟毛刺注入等,就会引起内部故障,出现错误信息,攻击者可以通过这些错误信息恢复出密钥。
SM4是一种分组密码算法,已广泛应用于我国信息安全的各个领域,如无线局域网加密、存储设备,智能卡设备等。
故障攻击一般是指在密码设备进行加密算法时引入故障,从而导致密码设备产生错误结果,攻击者利用产生的正确结果和错误结果进行对比分析,得出部分密钥,再对密码设备进行多次故障攻击,就可以得到全部初始密钥信息。
在现有的故障攻击防护中,最常用的防护方法是全硬件冗余,即两个模块同时进行加密操作,对比每一轮的结果,如果不一样则表明受到攻击,这种方法虽能检测出故障,但是面积开销极大。另一种常用的防护方法是物理参数监控,即利用片上硬件传感器监控芯片各个物理参数,如应对电压故障注入攻击和电磁故障注入攻击,可以加入相应的电压传感器和电磁传感器,但这种方法增加了芯片的复杂性,如面积开销增大,芯片性能降低等。
发明内容
为了解决上述技术问题,本发明提供一种防护效果好、硬件资源消耗少的基于SM4分组密码算法的故障攻击防护方法。
本发明解决上述问题的技术方案是:一种基于SM4分组密码算法的故障攻击防护方法,包括以下步骤:
步骤一:根据SM4算法的置换盒Sbox的输入和输出之间存在的差值,构造出差异盒Dbox;
步骤二:通过差异盒Dbox计算出预测的Sbox输出校验值,再求出实际的Sbox输出校验值,二者进行对比,判断Sbox是否受到故障攻击;
对循环移位的输入和输出进行奇偶校验值运算,通过对比循环移位的输入和输出,判断循环移位是否受到故障攻击;
步骤三:设置系统警告信号,当算法受到攻击,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息。
上述基于SM4分组密码算法的故障攻击防护方法,所述步骤一中,预先计算好差值Dif,Dif为SM4中Sbox的输入输出之间的差值,并将所有可能的差值存储在一张16×16的表中,并称之为Dbox;具体过程为:
随机生成128bit的明文输入值plantext,并将明文数据plantext拆分为四组数据,每组32bit,即plantext=(X0,X1,X2,X3),再将第一组32bit数据X0拆分成4组8bit数据,即X0=(a0,a1,a2,a3),之后将a0,a1,a2,a3作为Sbox的输入,同时送入4个并行的Sbox进行字节代换运算,运算遵循如下规律:
B′=(b0,b1,b2,b3)=τ(A)=(Sbox(a0),Sbox(a1),Sbox(a2),Sbox(a3))
B′表示字节代换运算,b0,b1,b2,b3为Sbox的输出,τ(A)表示输入为A的非线性运算,Sbox(a0)表示Sbox的输入为a0;具体字节代换方法为把8bit的a0将原先由二进制表示的方式转换为两位16进制sbox_in(m,n),m,n的取值范围均为16进制数,即0到F,然后以16进制的第一个数字为行,第二个数字为列,在SM4的Sbox查找出对应的数字;a1,a2,a3字节代换方法同a0;
再将Sbox的输入sbox_in(m,n)与Sbox的输出sbox_out(m′,n′)进行异或运算,结果即为差值Dif(m,n),即 为异或运算符,m′,n′的取值范围均为16进制数,即0到F;
再重复上述步骤,直到差值Dif(m,n)所有可能的值都计算出,并将Dif(m,n)所有可能的值存在一张16×16表中,称为Dbox。
上述基于SM4分组密码算法的故障攻击防护方法,所述步骤二中,预测的Sbox输出校验值由Sbox的输入和Dbox得出,所述实际的Sbox输出校验值是在进行SM4运算的过程中得出;
所述的Sbox包含轮函数中的Sbox和密钥编排中的Sbox;
比较所述预测的Sbox输出校验值与所述实际的Sbox输出校验值是否相同;
若相同,则判定未受到故障攻击,继续进行后续加密操作;若不相同,则判定受到故障攻击,返回错误提示,并清空所有数据;
所述循环移位运算包含轮函数中的循环移位运算和密钥编排中的循环移位运算;
比较所述循环移位的输入奇偶校验值和输出奇偶校验值是否相同;
若相同,则判定未受到故障攻击,可继续进行后续加密操作;若不相同,则判定受到故障攻击,返回错误提示,并清空所有数据;
具体过程为:
2-1)获取待加密数据data_in和密钥data_key,加密数据data_in和密钥data_key均为128bit,使用SM4算法对待加密数据data_in进行加密;
2-2)通过密钥编排运算生成轮密钥;
2-3)计算密钥编排的Sbox输出校验值和实际的Sbox输出校验值是否一致,如果不一致,则说明密钥编排的Sbox受到了攻击;
2-4)计算密钥编排的循环移位输入校验值和循环移位输出的校验值是否一致,如果不一致,则说明密钥编排的循环移位受到了攻击;
2-5)计算轮函数的Sbox输出校验值和实际的Sbox输出校验值是否一致,如果不一致,则说明轮函数的Sbox受到了攻击;
2-6)计算轮函数的循环移位输入校验值和循环移位输出的校验值是否一致,如果不一致,则说明轮函数的循环移位受到了攻击。
上述基于SM4分组密码算法的故障攻击防护方法,所述步骤2-2)具体过程为:
先将128bit密钥data_key数据分成四组,每组32bit,即data_key=(MK0,MK1,MK2,MK3),其中MK0,MK1,MK2,MK3为字,然后进行密钥初始化:
为异或运算符;FK=(FK0,FK1,FK2,FK3)为系统参数;
之后再进行迭代运算:
rki为轮密钥,CKi为固定参数;T′变换包括Sbox字节代换运算和循环移位运算,Sbox字节代换运算与轮函数中的字节代换运算相同,循环移位运算与轮函数中的循环移位运算不同,循环移位运算为:
其中V为输出,U为输入,表示进行异或运算,<<<表示循环左移。
上述基于SM4分组密码算法的故障攻击防护方法,所述步骤2-3)具体过程为:
根据输入的密钥
Sbox的输入之后sbox_in_key分成四组8bit的数据,即sbox_in_key=(u0,u1,u2,u3),这四组数据同时送入并行的4个Sbox中,经过字节代换后的输出记为sbox_out_key=(v0,v1,v2,v3);
Sbox的输入校验值为
Sbox的输出校验值为
再通过u0,u1,u2,u3的值,对照生成的Dbox,找出相应的差值记为dif_key(q),则密钥编排运算时Dbox的输出校验值又因为dif_key(q)是Sbox的输入与输出异或后得到的值,因此可预测正确的Sbox的输出校验值密钥编排的Sbox输出的校验信号为如果Psbox_key_error的值不为全零,则说明密钥编排的Sbox受到了攻击,密钥编排的Sbox的警告信号sbox_key_error就拉高为1,提醒系统密钥编排算法正在遭受攻击;
由于Pprediction_sbox_out_key和Psbox_out_key均为8bit,因此不仅对于1bit的注错进行检验,同时对于多bit的注错也能进行检验。
上述基于SM4分组密码算法的故障攻击防护方法,所述步骤2-4)具体过程为:
在密钥编排的循环移位增加奇偶校验点,用于检测数据的奇偶性是否发生变化,如果输入的前后奇偶校验值不一致则说明受到了故障攻击;
SM4的密钥编排的循环移位运算为:
该循环移位运算是进行循环左移,并不会修改从输入到输出的奇偶校验位,因此可设置故障攻击检测点,具体如下:
32位输入数据为V(x)=v0+v1x+v2x2+…+v31x31,vi∈GF(2),GF(2)为只包含0,1的有限域;
则输入的奇偶校验位:
32位输出数据为W(x)=w0+w1x+w2x2+…+w31x31,ci∈GF(2);
则输出的奇偶校验位
Pb(x)为输入数据的奇偶校验值,Pc(x)为输出数据的奇偶校验值;如果密钥编排的循环移位算法的警告信号sr_key_error为1则表明SM4的密钥编排的循环移位算法受到了故障攻击;
设置一个系统警告信号,当SM4算法受到攻击,则向系统上报警告信号,再将警告信号sbox_key_error与sr_key_error进行或运算,即key_error=sbox_key_error|sr_key_error,|为或运算符,key_error为密钥编排算法的警告信号,只要密钥编排的sbox或者密钥编排的循环移位受到攻击,key_error信号就拉高。
上述基于SM4分组密码算法的故障攻击防护方法,所述步骤2-5)具体过程为:
经过步骤2-3)和步骤2-4),确认生成的轮密钥rki未受到错误攻击,再将rki运用到加密操作的轮函数变换中,加密时的Sbox的输入为 然后将sbox_in分成四组8bit的数据,即sbox_in=(c0,c1,c2,c3),并将c0,c1,c2,c3同时送入并行的4个Sbox中,经过字节代换后的输出记为sbox_out=(d0,d1,d2,d3);
Sbox的输入校验值为
Sbox的输出校验值为
同步骤2-3),再通过c0,c1,c2,c3的值,对照步骤一生成的Dbox,找出相应的差值记为dif(r),轮函数运算时Dbox的输出校验值又因为dif(r)是Sbox的输入与输出异或后得到的值,因此可预测正确的Sbox的输出校验值轮函数运算的Sbox输出的校验信号为如果Psbox_error的值不为全零,则说明轮函数运算的Sbox受到了攻击,轮函数运算的Sbox的警告信号sbox_error就拉高为1,提醒系统算法正在遭受攻击。
上述基于SM4分组密码算法的故障攻击防护方法,所述步骤2-6)具体过程为:
在轮函数的循环移位增加奇偶校验点,用于检测数据的奇偶性是否发生变化,如果输入的前后奇偶校验值不一致则说明受到了故障攻击;
SM4的轮函数循环移位运算为:
其中C为输出,B为输入,L()表示循环移位运算;
奇偶校验位的运算如下:
32位输入数据为B(x)=e0+e1x+e2x2+…+e31x31,ei∈GF(2);
则输入的奇偶校验位:
32位输出数据为C(x)=f0+f1x+f2x2+…+f31x31,fi∈GF(2);
则输出的奇偶校验位
如果sr_error为1则表明SM4的轮函数的循环移位算法受到了故障攻击;
进一步地,再将步骤2-5)的警告信号sbox_error与sr_error进行或运算,即error=sbox_error|sr_error,error为加密算法的警告信号,只要加密算法的sbox或者加密算法的循环移位受到攻击,error信号就拉高。
上述基于SM4分组密码算法的故障攻击防护方法,所述步骤三中,设置系统警告信号sys_error,sys_error=error|key_error,当SM4算法的Sbox和循环移位运算受到攻击,sys_error均拉高,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息;
所述系统警告信号由加密运算的错误信号和密钥编排运算的错误信号得出;
所述加密运算的错误信号由所述轮函数的Sbox错误信号和所述轮函数运算中的循环移位错误信号得出;
所述密钥编排的错误信号由所述密钥编排的Sbox错误信号和所述密钥编排的循环移位错误信号得出。
一种基于SM4分组密码算法的故障攻击防护装置,包括:
获取数据模块,用于获取待加密的明文数据和密钥;
密钥编排校验模块,用于根据所述密钥编排Sbox的输出校验和密钥编排的循环移位校验,判断运算结果是否受到故障攻击;
数据加密校验模块,用于根据所述轮函数的Sbox的输出校验和轮函数运算中的循环移位校验,判断运算结果是否受到故障攻击。
本发明的有益效果在于:本发明首先根据SM4算法的Sbox的输入和输出之间存在的差值,构造出Dbox;然后通过Dbox计算出预测的Sbox输出校验值,求出实际的Sbox输出校验值,二者进行对比,判断Sbox是否受到故障攻击,再对循环移位的输入和输出进行奇偶校验值运算,通过对比循环移位的输入和输出奇偶校验值,判断循环移位是否受到故障攻击;最后设置系统警告信号,当算法受到攻击,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息。本发明方法及装置可对SM4算法易受到故障攻击的位置进行防护,使SM4算法可以有效抵抗故障攻击,并且硬件资源消耗少。
附图说明
图1为本发明的故障攻击防护方法的总体流程图。
图2为本发明的故障攻击防护方法的细节流程图。
图3为本发明的密钥编排故障攻击防护的流程图。
图4为本发明的轮函数故障攻击防护的流程图。
图5为本发明的故障攻击防护装置的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的说明。
如图1、图2所示,一种基于SM4分组密码算法的故障攻击防护方法,包括以下步骤:
步骤一:根据SM4算法的置换盒Sbox的输入和输出之间存在的差值,构造出差异盒Dbox。
预先计算好差值Dif,Dif为SM4中Sbox的输入输出之间的差值,并将所有可能的差值存储在一张16×16的表中,并称之为Dbox;具体过程为:
随机生成128bit的明文输入值plantext,并将明文数据plantext拆分为四组数据,每组32bit,即plantext=(X0,X1,X2,X3),再将第一组32bit数据X0拆分成4组8bit数据,即X0=(a0,a1,a2,a3),之后将a0,a1,a2,a3作为Sbox的输入,同时送入4个并行的Sbox进行字节代换运算,运算遵循如下规律:
B′=(b0,b1,b2,b3)=τ(A)=(Sbox(a0),Sbox(a1),Sbox(a2),Sbox(a3))
B′表示字节代换运算,b0,b1,b2,b3为Sbox的输出,τ(A)表示输入为A的非线性运算,Sbox(a0)表示Sbox的输入为a0;具体字节代换方法为把8bit的a0将原先由二进制表示的方式转换为两位16进制sbox_in(m,n),m,n的取值范围均为16进制数,即0到F,然后以16进制的第一个数字为行,第二个数字为列,在SM4的Sbox查找出对应的数字;a1,a2,a3字节代换方法同a0;
再将Sbox的输入sbox_in(m,n)与Sbox的输出sbox_out(m′,n′)进行异或运算,结果即为差值Dif(m,n),即 为异或运算符,m′,n′的取值范围均为16进制数,即0到F;
再重复上述步骤,直到差值Dif(m,n)所有可能的值都计算出,并将Dif(m,n)所有可能的值存在一张16×16表中,称为Dbox。
步骤二:通过差异盒Dbox计算出预测的Sbox输出校验值,再求出实际的Sbox输出校验值,二者进行对比,判断Sbox是否受到故障攻击;
对循环移位的输入和输出进行奇偶校验值运算,通过对比循环移位的输入和输出,判断循环移位是否受到故障攻击。
预测的Sbox输出校验值由Sbox的输入和Dbox得出,所述实际的Sbox输出校验值是在进行SM4运算的过程中得出;
所述的Sbox包含轮函数中的Sbox和密钥编排中的Sbox;
比较所述预测的Sbox输出校验值与所述实际的Sbox输出校验值是否相同;
若相同,则判定未受到故障攻击,继续进行后续加密操作;若不相同,则判定受到故障攻击,返回错误提示,并清空所有数据;
所述循环移位运算包含轮函数中的循环移位运算和密钥编排中的循环移位运算;
比较所述循环移位的输入奇偶校验值和输出奇偶校验值是否相同;
若相同,则判定未受到故障攻击,可继续进行后续加密操作;若不相同,则判定受到故障攻击,返回错误提示,并清空所有数据。
具体过程为:
2-1)获取待加密数据data_in和密钥data_key,加密数据data_in和密钥data_key均为128bit,使用SM4算法对待加密数据data_in进行加密。
SM4加密算法的具体加密流程如下:
首先将128bit的待加密数据data_in分成四组,每组32bit,即data_in=(X0,X1,X2,X3),然后进行轮函数变换:
上式中的T为合成置换,即进行Sbox的字节代换运算以及循环移位运算,字节代换运算遵循:
B'=(b0,b1,b2,b3)=τ(A)=(Sbox(a0),Sbox(a1),Sbox(a2),Sbox(a3))循环移位运算遵循:
2-2)通过密钥编排运算生成轮密钥rki。
所述步骤2-2)具体过程为:
先将128bit密钥data_key数据分成四组,每组32bit,即data_key=(MK0,MK1,MK2,MK3),其中MK0,MK1,MK2,MK3为字,然后进行密钥初始化:
为异或运算符;FK=(FK0,FK1,FK2,FK3)为系统参数;FK给定如下:
FK0=(A3B1BAC6),FK1=(56AA3350),FK2=(677D9197),FK3=(B27022DC)。
之后再进行迭代运算:
CKi由固定参数给定,具体值为:
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。
T′变换包括Sbox字节代换运算和循环移位运算,Sbox字节代换运算与轮函数中的字节代换运算相同,循环移位运算与轮函数中的循环移位运算不同,循环移位运算为:
其中V为输出,U为输入,表示进行异或运算,<<<表示循环左移。
2-3)计算密钥编排的Sbox输出校验值和实际的Sbox输出校验值是否一致,如果不一致,则说明密钥编排的Sbox受到了攻击。
所述步骤2-3)具体过程为:
参考图3,由于SM4的S盒输出经常被作为故障攻击点,因此在SM4的S盒增加故障检测点是非常有必要的。
根据输入的密钥
Sbox的输入之后sbox_in_key分成四组8bit的数据,即sbox_in_key=(u0,u1,u2,u3),这四组数据同时送入并行的4个Sbox中,经过字节代换后的输出记为sbox_out_key=(v0,v1,v2,v3);
Sbox的输入校验值为
Sbox的输出校验值为
再通过u0,u1,u2,u3的值,对照生成的Dbox,找出相应的差值记为dif_key(q),则密钥编排运算时Dbox的输出校验值又因为dif_key(q)是Sbox的输入与输出异或后得到的值,因此可预测正确的Sbox的输出校验值密钥编排的Sbox输出的校验信号为如果Psbox_key_error的值不为全零,则说明密钥编排的Sbox受到了攻击,密钥编排的Sbox的警告信号sbox_key_error就拉高为1,提醒系统密钥编排算法正在遭受攻击;
由于Pprediction_sbox_out_key和Psbox_out_key均为8bit,因此不仅对于1bit的注错进行检验,同时对于多bit的注错也能进行检验。
2-4)计算密钥编排的循环移位输入校验值和循环移位输出的校验值是否一致,如果不一致,则说明密钥编排的循环移位受到了攻击。
所述步骤2-4)具体过程为:
参考图3,在密钥编排的循环移位增加奇偶校验点,用于检测数据的奇偶性是否发生变化,如果输入的前后奇偶校验值不一致则说明受到了故障攻击;
SM4的密钥编排线性变化为:
该线性变化进行循环左移,并不会修改从输入到输出的奇偶校验位,因此可设置故障攻击检测点,具体如下:
32位输入数据为U(x)=u0+u1x+u2x2+…+u31x31,ui∈GF(2);GF(2)为只包含0,1的有限域;
则输入的奇偶校验位:
32位输出数据为V(x)=v0+v1x+v2x2+…+v21x21,vi∈GF(2);
则输出的奇偶校验位
Pb(x)为输入数据的奇偶校验值,Pc(x)为输出数据的奇偶校验值;如果密钥编排的循环移位算法的警告信号sr_key_error为1则表明SM4的密钥编排的循环移位算法受到了故障攻击;
设置一个系统警告信号,当SM4算法受到攻击,则向系统上报警告信号,再将警告信号sbox_key_error与sr_key_error进行或运算,即key_error=sbox_key_error|sr_key_error,|为或运算符,key_error为密钥编排算法的警告信号,只要密钥编排的sbox或者密钥编排的循环移位受到攻击,key_error信号就拉高。
2-5)计算轮函数的Sbox输出校验值和实际的Sbox输出校验值是否一致,如果不一致,则说明轮函数的Sbox受到了攻击。
所述步骤2-5)具体过程为:
参考图4,经过步骤2-3)和步骤2-4),确认生成的轮密钥rki未受到错误攻击,再将rki运用到加密操作的轮函数变换中,加密时的Sbox的输入为 然后将sbox_in分成四组8bit的数据,即sbox_in=(c0,c1,c2,c3),并将c0,c1,c2,c3同时送入并行的4个Sbox中,经过字节代换后的输出记为sbox_out=(d0,d1,d2,d3);
Sbox的输入校验值为
Sbox的输出校验值为
同步骤2-3),再通过c0,c1,c2,c3的值,对照步骤一生成的Dbox,找出相应的差值记为dif(r),轮函数运算时Dbox的输出校验值又因为dif(r)是Sbox的输入与输出异或后得到的值,因此可预测正确的Sbox的输出校验值轮函数运算的Sbox输出的校验信号为如果Psbox_error的值不为全零,则说明轮函数运算的Sbox受到了攻击,轮函数运算的Sbox的警告信号sbox_error就拉高为1,提醒系统算法正在遭受攻击。
2-6)计算轮函数的循环移位输入校验值和循环移位输出的校验值是否一致,如果不一致,则说明轮函数的循环移位受到了攻击。
所述步骤2-6)具体过程为:
参考图4,在轮函数的循环移位增加奇偶校验点,用于检测数据的奇偶性是否发生变化,如果输入的前后奇偶校验值不一致则说明受到了故障攻击;
SM4的轮函数循环移位运算为:
其中C为输出,B为输入,L()表示循环移位运算;
奇偶校验位的运算如下:
32位输入数据为B(x)=e0+e1x+e2x2+…+e31x31,ei∈GF(2);
则输入的奇偶校验位:
32位输出数据为C(x)=f0+f1x+f2x2+…+f31x31,fi∈GF(2);
则输出的奇偶校验位
如果sr_error为1则表明SM4的轮函数的循环移位算法受到了故障攻击;
进一步地,再将步骤2-5)的警告信号sbox_error与sr_error进行或运算,即error=sbox_error|sr_error,error为加密算法的警告信号,只要加密算法的sbox或者加密算法的循环移位受到攻击,error信号就拉高。
步骤三:设置系统警告信号,当算法受到攻击,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息。
所述步骤三中,设置系统警告信号sys_error,sys_error=error|key_error,当SM4算法的Sbox和循环移位运算受到攻击,sys_error均拉高,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息;
所述系统警告信号由加密运算的错误信号和密钥编排运算的错误信号得出;
所述加密运算的错误信号由所述轮函数的Sbox错误信号和所述轮函数运算中的循环移位错误信号得出;
所述密钥编排的错误信号由所述密钥编排的Sbox错误信号和所述密钥编排的循环移位错误信号得出。
如图5所示,一种基于SM4分组密码算法的故障攻击防护装置,包括:
获取数据模块100,用于获取待加密的明文数据和密钥;
密钥编排校验模块200,用于根据所述密钥编排Sbox的输出校验和密钥编排的循环移位校验,判断运算结果是否受到故障攻击;
数据加密校验模块300,用于根据所述轮函数的Sbox的输出校验和轮函数运算中的循环移位校验,判断运算结果是否受到故障攻击。
Claims (10)
1.一种基于SM4分组密码算法的故障攻击防护方法,其特征在于,包括以下步骤:
步骤一:根据SM4算法的置换盒Sbox的输入和输出之间存在的差值,构造出差异盒Dbox;
步骤二:通过差异盒Dbox计算出预测的Sbox输出校验值,再求出实际的Sbox输出校验值,二者进行对比,判断Sbox是否受到故障攻击;
对循环移位的输入和输出进行奇偶校验值运算,通过对比循环移位的输入和输出,判断循环移位是否受到故障攻击;
步骤三:设置系统警告信号,当算法受到攻击,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息。
2.根据权利要求1所述的基于SM4分组密码算法的故障攻击防护方法,其特征在于,所述步骤一中,预先计算好差值Dif,Dif为SM4中Sbox的输入输出之间的差值,并将所有可能的差值存储在一张16×16的表中,并称之为Dbox;具体过程为:
随机生成128bit的明文输入值plantext,并将明文数据plantext拆分为四组数据,每组32bit,即plantext=(X0,X1,X2,X3),再将第一组32bit数据X0拆分成4组8bit数据,即X0=(a0,a1,a2,a3),之后将a0,a1,a2,a3作为Sbox的输入,同时送入4个并行的Sbox进行字节代换运算,运算遵循如下规律:
B'=(b0,b1,b2,b3)=τ(A)=(Sbox(a0),Sbox(a1),Sbox(a2),Sbox(a3))
B'表示字节代换运算,b0,b1,b2,b3为Sbox的输出,τ(A)表示输入为A的非线性运算,Sbox(a0)表示Sbox的输入为a0;具体字节代换方法为把8bit的a0将原先由二进制表示的方式转换为两位16进制sbox_in(m,n),m,n的取值范围均为16进制数,即0到F,然后以16进制的第一个数字为行,第二个数字为列,在SM4的Sbox查找出对应的数字;a1,a2,a3字节代换方法同a0;
再将Sbox的输入sbox_in(m,n)与Sbox的输出sbox_out(m′,n′)进行异或运算,结果即为差值Dif(m,n),即 为异或运算符,m′,n′的取值范围均为16进制数,即0到F;
再重复上述步骤,直到差值Dif(m,n)所有可能的值都计算出,并将Dif(m,n)所有可能的值存在一张16×16表中,称为Dbox。
3.根据权利要求1所述的基于SM4分组密码算法的故障攻击防护方法,其特征在于,所述步骤二中,预测的Sbox输出校验值由Sbox的输入和Dbox得出,所述实际的Sbox输出校验值是在进行SM4运算的过程中得出;
所述的Sbox包含轮函数中的Sbox和密钥编排中的Sbox;
比较所述预测的Sbox输出校验值与所述实际的Sbox输出校验值是否相同;
若相同,则判定未受到故障攻击,继续进行后续加密操作;若不相同,则判定受到故障攻击,返回错误提示,并清空所有数据;
所述循环移位运算包含轮函数中的循环移位运算和密钥编排中的循环移位运算;
比较所述循环移位的输入奇偶校验值和输出奇偶校验值是否相同;
若相同,则判定未受到故障攻击,可继续进行后续加密操作;若不相同,则判定受到故障攻击,返回错误提示,并清空所有数据;
具体过程为:
2-1)获取待加密数据data_in和密钥data_key,加密数据data_in和密钥data_key均为128bit,使用SM4算法对待加密数据data_in进行加密;
2-2)通过密钥编排运算生成轮密钥;
2-3)计算密钥编排的Sbox输出校验值和实际的Sbox输出校验值是否一致,如果不一致,则说明密钥编排的Sbox受到了攻击;
2-4)计算密钥编排的循环移位输入校验值和循环移位输出的校验值是否一致,如果不一致,则说明密钥编排的循环移位受到了攻击;
2-5)计算轮函数的Sbox输出校验值和实际的Sbox输出校验值是否一致,如果不一致,则说明轮函数的Sbox受到了攻击;
2-6)计算轮函数的循环移位输入校验值和循环移位输出的校验值是否一致,如果不一致,则说明轮函数的循环移位受到了攻击。
4.根据权利要求3所述的基于SM4分组密码算法的故障攻击防护方法,其特征在于,所述步骤2-2)具体过程为:
先将128bit密钥data_key数据分成四组,每组32bit,即data_key=(MK0,MK1,MK2,MK3),其中MK0,MK1,MK2,MK3为字,然后进行密钥初始化:
为异或运算符;FK=(FK0,FK1,FK2,FK3)为系统参数;
之后再进行迭代运算:
rki为轮密钥,CKi为固定参数;T′变换包括Sbox字节代换运算和循环移位运算,Sbox字节代换运算与轮函数中的字节代换运算相同,循环移位运算与轮函数中的循环移位运算不同,循环移位运算为:
其中V为输出,U为输入,表示进行异或运算,<<<表示循环左移。
5.根据权利要求4所述的基于SM4分组密码算法的故障攻击防护方法,其特征在于,所述步骤2-3)具体过程为:
根据输入的密钥
Sbox的输入之后sbox_in_key分成四组8bit的数据,即sbox_in_key=(u0,u1,u2,u3),这四组数据同时送入并行的4个Sbox中,经过字节代换后的输出记为sbox_out_key=(v0,v1,v2,v3);
Sbox的输入校验值为
Sbox的输出校验值为
再通过u0,u1,u2,u3的值,对照生成的Dbox,找出相应的差值记为dif_key(q),则密钥编排运算时Dbox的输出校验值又因为dif_key(q)是Sbox的输入与输出异或后得到的值,因此可预测正确的Sbox的输出校验值密钥编排的Sbox输出的校验信号为如果Psbox_key_error的值不为全零,则说明密钥编排的Sbox受到了攻击,密钥编排的Sbox的警告信号sbox_key_error就拉高为1,提醒系统密钥编排算法正在遭受攻击;
由于Pprediction_sbox_out_key和Psbox_out_key均为8bit,因此不仅对于1bit的注错进行检验,同时对于多bit的注错也能进行检验。
6.根据权利要求5所述的基于SM4分组密码算法的故障攻击防护方法,其特征在于,所述步骤2-4)具体过程为:
在密钥编排的循环移位增加奇偶校验点,用于检测数据的奇偶性是否发生变化,如果输入的前后奇偶校验值不一致则说明受到了故障攻击;
SM4的密钥编排的循环移位运算为:
该循环移位运算是进行循环左移,并不会修改从输入到输出的奇偶校验位,因此可设置故障攻击检测点,具体如下:
32位输入数据为V(c)=v0+v1x+v2x2+…+v31x31,vi∈GF(2),GF(2)为只包含0,1的有限域;
则输入的奇偶校验位:
32位输出数据为W(x)=w0+w1x+w2x2+…+w31x31,ci∈GF(2);
则输出的奇偶校验位
Pb(x)为输入数据的奇偶校验值,Pc(x)为输出数据的奇偶校验值;如果密钥编排的循环移位算法的警告信号sr_key_error为1则表明SM4的密钥编排的循环移位算法受到了故障攻击;
设置一个系统警告信号,当SM4算法受到攻击,则向系统上报警告信号,再将警告信号sbox_key_error与sr_key_error进行或运算,即key_error=sbox_key_error|sr_key_error,|为或运算符,key_error为密钥编排算法的警告信号,只要密钥编排的sbox或者密钥编排的循环移位受到攻击,key_error信号就拉高。
7.根据权利要求6所述的基于SM4分组密码算法的故障攻击防护方法,其特征在于,所述步骤2-5)具体过程为:
经过步骤2-3)和步骤2-4),确认生成的轮密钥rki未受到错误攻击,再将rki运用到加密操作的轮函数变换中,加密时的Sbox的输入为 然后将sbox_in分成四组8bit的数据,即sbox_in=(c0,c1,c2,c3),并将c0,c1,c2,c3同时送入并行的4个Sbox中,经过字节代换后的输出记为sbox_out=(d0,d1,d2,d3);
Sbox的输入校验值为
Sbox的输出校验值为
同步骤2-3),再通过c0,c1,c2,c3的值,对照步骤一生成的Dbox,找出相应的差值记为dif(r),轮函数运算时Dbox的输出校验值又因为dif(r)是Sbox的输入与输出异或后得到的值,因此可预测正确的Sbox的输出校验值轮函数运算的Sbox输出的校验信号为如果Psbox_error的值不为全零,则说明轮函数运算的Sbox受到了攻击,轮函数运算的Sbox的警告信号sbox_error就拉高为1,提醒系统算法正在遭受攻击。
8.根据权利要求7所述的基于SM4分组密码算法的故障攻击防护方法,其特征在于,所述步骤2-6)具体过程为:
在轮函数的循环移位增加奇偶校验点,用于检测数据的奇偶性是否发生变化,如果输入的前后奇偶校验值不一致则说明受到了故障攻击;
SM4的轮函数循环移位运算为:
其中C为输出,B为输入,L()表示循环移位运算;
奇偶校验位的运算如下:
32位输入数据为B(x)=e0+e1x+e2x2+…+e31x31,ei∈GF(2);
则输入的奇偶校验位:
32位输出数据为C(x)=f0+f1x+f2x2+…+f31x31,fi∈GF(2);
则输出的奇偶校验位
如果sr_error为1则表明SM4的轮函数的循环移位算法受到了故障攻击;
进一步地,再将步骤2-5)的警告信号sbox_error与sr_error进行或运算,即error=sbox_error|sr_error,error为加密算法的警告信号,只要加密算法的sbox或者加密算法的循环移位受到攻击,error信号就拉高。
9.根据权利要求1所述的基于SM4分组密码算法的故障攻击防护方法,其特征在于,所述步骤三中,设置系统警告信号sys_error,sys_error=error|key_error,当SM4算法的Sbox和循环移位运算受到攻击,sys_error均拉高,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息;
所述系统警告信号由加密运算的错误信号和密钥编排运算的错误信号得出;
所述加密运算的错误信号由所述轮函数的Sbox错误信号和所述轮函数运算中的循环移位错误信号得出;
所述密钥编排的错误信号由所述密钥编排的Sbox错误信号和所述密钥编排的循环移位错误信号得出。
10.一种用于实现权利要求1-9中任一项所述的故障攻击防护方法的基于SM4分组密码算法的故障攻击防护装置,其特征在于,包括:
获取数据模块,用于获取待加密的明文数据和密钥;
密钥编排校验模块,用于根据所述密钥编排Sbox的输出校验和密钥编排的循环移位校验,判断运算结果是否受到故障攻击;
数据加密校验模块,用于根据所述轮函数的Sbox的输出校验和轮函数运算中的循环移位校验,判断运算结果是否受到故障攻击。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311284828.XA CN117200974A (zh) | 2023-10-07 | 2023-10-07 | 一种基于sm4分组密码算法的故障攻击防护方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311284828.XA CN117200974A (zh) | 2023-10-07 | 2023-10-07 | 一种基于sm4分组密码算法的故障攻击防护方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117200974A true CN117200974A (zh) | 2023-12-08 |
Family
ID=88988751
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311284828.XA Pending CN117200974A (zh) | 2023-10-07 | 2023-10-07 | 一种基于sm4分组密码算法的故障攻击防护方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117200974A (zh) |
-
2023
- 2023-10-07 CN CN202311284828.XA patent/CN117200974A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10439797B2 (en) | Methods and devices against a side-channel analysis | |
Malkin et al. | A comparative cost/security analysis of fault attack countermeasures | |
US8955160B2 (en) | Method for detecting abnormalities in a cryptographic circuit protected by differential logic, and circuit for implementing said method | |
Ngo et al. | Breaking masked and shuffled CCA secure Saber KEM by power analysis | |
US9544132B2 (en) | Cryptographic method for protecting a key hardware register against fault attacks | |
Clavier et al. | Reverse engineering of a secret AES-like cipher by ineffective fault analysis | |
US9515989B1 (en) | Methods and apparatus for silent alarm channels using one-time passcode authentication tokens | |
Korkikian et al. | Blind fault attack against SPN ciphers | |
CN112653546A (zh) | 一种基于功耗分析的故障攻击检测方法 | |
CN117220865A (zh) | 经纬度加密方法、经纬度校验方法、装置及可读存储介质 | |
US8958556B2 (en) | Method of secure cryptographic calculation, in particular, against attacks of the DFA and unidirectional type, and corresponding component | |
CN111565110B (zh) | 基于ro puf多核系统的统一身份认证系统及方法 | |
Tamimi et al. | A variable circular-shift image-encryption algorithm | |
CN117200974A (zh) | 一种基于sm4分组密码算法的故障攻击防护方法及装置 | |
US8781114B2 (en) | Apparatus and method for recognizing a failure of a cryptographic unit | |
EP3832945B1 (en) | System and method for protecting memory encryption against template attacks | |
Karri et al. | Parity-based concurrent error detection in symmetric block ciphers | |
Di Natale et al. | On-line self-test of AES hardware implementations | |
KR101026647B1 (ko) | 통신 보안 시스템 및 그 방법과 이에 적용되는 키 유도 암호알고리즘 | |
Dubrova | Energy-efficient cryptographic primitives | |
CN108599920A (zh) | 一种故障攻击检测电路及故障攻击防护方法 | |
CN108365946A (zh) | 一种基于混沌系统阵列的能源互联网通信安全系统与方法 | |
Li et al. | Fault analysis of the piccolo block cipher | |
Kalle et al. | A side-channel attack on a masked and shuffled software implementation of Saber | |
Yu et al. | A hybrid approach to concurrent error detection for a compact ASIC implementation of the advanced encryption standard |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |