一种基于SM4分组密码算法的故障攻击防护方法及装置

文档序号:36404640发布日期:2023-12-16 10:36阅读:27来源:国知局
一种基于

本发明涉及信息安全,特别涉及一种基于sm4分组密码算法的故障攻击防护方法。


背景技术:

1、随着信息安全的不断提高,人们对于信息安全问题也变得愈加重视,其中,数据加密过程中的安全问题是主要考虑的方向之一。一般情况下,数据是能够进行正确加密的,但是如果受到了故障攻击,如电压故障注入或者时钟毛刺注入等,就会引起内部故障,出现错误信息,攻击者可以通过这些错误信息恢复出密钥。

2、sm4是一种分组密码算法,已广泛应用于我国信息安全的各个领域,如无线局域网加密、存储设备,智能卡设备等。

3、故障攻击一般是指在密码设备进行加密算法时引入故障,从而导致密码设备产生错误结果,攻击者利用产生的正确结果和错误结果进行对比分析,得出部分密钥,再对密码设备进行多次故障攻击,就可以得到全部初始密钥信息。

4、在现有的故障攻击防护中,最常用的防护方法是全硬件冗余,即两个模块同时进行加密操作,对比每一轮的结果,如果不一样则表明受到攻击,这种方法虽能检测出故障,但是面积开销极大。另一种常用的防护方法是物理参数监控,即利用片上硬件传感器监控芯片各个物理参数,如应对电压故障注入攻击和电磁故障注入攻击,可以加入相应的电压传感器和电磁传感器,但这种方法增加了芯片的复杂性,如面积开销增大,芯片性能降低等。


技术实现思路

1、为了解决上述技术问题,本发明提供一种防护效果好、硬件资源消耗少的基于sm4分组密码算法的故障攻击防护方法。

2、本发明解决上述问题的技术方案是:一种基于sm4分组密码算法的故障攻击防护方法,包括以下步骤:

3、步骤一:根据sm4算法的置换盒sbox的输入和输出之间存在的差值,构造出差异盒dbox;

4、步骤二:通过差异盒dbox计算出预测的sbox输出校验值,再求出实际的sbox输出校验值,二者进行对比,判断sbox是否受到故障攻击;

5、对循环移位的输入和输出进行奇偶校验值运算,通过对比循环移位的输入和输出,判断循环移位是否受到故障攻击;

6、步骤三:设置系统警告信号,当算法受到攻击,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息。

7、上述基于sm4分组密码算法的故障攻击防护方法,所述步骤一中,预先计算好差值dif,dif为sm4中sbox的输入输出之间的差值,并将所有可能的差值存储在一张16×16的表中,并称之为dbox;具体过程为:

8、随机生成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进行字节代换运算,运算遵循如下规律:

9、b′=(b0,b1,b2,b3)=τ(a)=(sbox(a0),sbox(a1),sbox(a2),sbox(a3))

10、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;

11、再将sbox的输入sbox_in(m,n)与sbox的输出sbox_out(m′,n′)进行异或运算,结果即为差值dif(m,n),即为异或运算符,m′,n′的取值范围均为16进制数,即0到f;

12、再重复上述步骤,直到差值dif(m,n)所有可能的值都计算出,并将dif(m,n)所有可能的值存在一张16×16表中,称为dbox。

13、上述基于sm4分组密码算法的故障攻击防护方法,所述步骤二中,预测的sbox输出校验值由sbox的输入和dbox得出,所述实际的sbox输出校验值是在进行sm4运算的过程中得出;

14、所述的sbox包含轮函数中的sbox和密钥编排中的sbox;

15、比较所述预测的sbox输出校验值与所述实际的sbox输出校验值是否相同;

16、若相同,则判定未受到故障攻击,继续进行后续加密操作;若不相同,则判定受到故障攻击,返回错误提示,并清空所有数据;

17、所述循环移位运算包含轮函数中的循环移位运算和密钥编排中的循环移位运算;

18、比较所述循环移位的输入奇偶校验值和输出奇偶校验值是否相同;

19、若相同,则判定未受到故障攻击,可继续进行后续加密操作;若不相同,则判定受到故障攻击,返回错误提示,并清空所有数据;

20、具体过程为:

21、2-1)获取待加密数据data_in和密钥data_key,加密数据data_in和密钥data_key均为128bit,使用sm4算法对待加密数据data_in进行加密;

22、2-2)通过密钥编排运算生成轮密钥;

23、2-3)计算密钥编排的sbox输出校验值和实际的sbox输出校验值是否一致,如果不一致,则说明密钥编排的sbox受到了攻击;

24、2-4)计算密钥编排的循环移位输入校验值和循环移位输出的校验值是否一致,如果不一致,则说明密钥编排的循环移位受到了攻击;

25、2-5)计算轮函数的sbox输出校验值和实际的sbox输出校验值是否一致,如果不一致,则说明轮函数的sbox受到了攻击;

26、2-6)计算轮函数的循环移位输入校验值和循环移位输出的校验值是否一致,如果不一致,则说明轮函数的循环移位受到了攻击。

27、上述基于sm4分组密码算法的故障攻击防护方法,所述步骤2-2)具体过程为:

28、先将128bit密钥data_key数据分成四组,每组32bit,即data_key=(mk0,mk1,mk2,mk3),其中mk0,mk1,mk2,mk3为字,然后进行密钥初始化:

29、为异或运算符;fk=(fk0,fk1,fk2,fk3)为系统参数;

30、之后再进行迭代运算:

31、

32、rki为轮密钥,cki为固定参数;t′变换包括sbox字节代换运算和循环移位运算,sbox字节代换运算与轮函数中的字节代换运算相同,循环移位运算与轮函数中的循环移位运算不同,循环移位运算为:

33、

34、其中v为输出,u为输入,表示进行异或运算,<<<表示循环左移。

35、上述基于sm4分组密码算法的故障攻击防护方法,所述步骤2-3)具体过程为:

36、根据输入的密钥

37、sbox的输入之后sbox_in_key分成四组8bit的数据,即sbox_in_key=(u0,u1,u2,u3),这四组数据同时送入并行的4个sbox中,经过字节代换后的输出记为sbox_out_key=(v0,v1,v2,v3);

38、sbox的输入校验值为

39、sbox的输出校验值为

40、再通过u0,u1,u2,u3的值,对照生成的dbox,找出相应的差值记为dif_key(q),则密钥编排运算时dbox的输出校验值又因为dif_key(q)是sbox的输入与输出异或后得到的值,因此可预测正确的sbox的输出校验值密钥编排的sbox输出的校验信号为如果psbox_key_error的值不为全零,则说明密钥编排的sbox受到了攻击,密钥编排的sbox的警告信号sbox_key_error就拉高为1,提醒系统密钥编排算法正在遭受攻击;

41、由于pprediction_sbox_out_key和psbox_out_key均为8bit,因此不仅对于1bit的注错进行检验,同时对于多bit的注错也能进行检验。

42、上述基于sm4分组密码算法的故障攻击防护方法,所述步骤2-4)具体过程为:

43、在密钥编排的循环移位增加奇偶校验点,用于检测数据的奇偶性是否发生变化,如果输入的前后奇偶校验值不一致则说明受到了故障攻击;

44、sm4的密钥编排的循环移位运算为:

45、

46、该循环移位运算是进行循环左移,并不会修改从输入到输出的奇偶校验位,因此可设置故障攻击检测点,具体如下:

47、32位输入数据为v(x)=v0+v1x+v2x2+…+v31x31,vi∈gf(2),gf(2)为只包含0,1的有限域;

48、则输入的奇偶校验位:

49、32位输出数据为w(x)=w0+w1x+w2x2+…+w31x31,ci∈gf(2);

50、则输出的奇偶校验位

51、

52、pb(x)为输入数据的奇偶校验值,pc(x)为输出数据的奇偶校验值;如果密钥编排的循环移位算法的警告信号sr_key_error为1则表明sm4的密钥编排的循环移位算法受到了故障攻击;

53、设置一个系统警告信号,当sm4算法受到攻击,则向系统上报警告信号,再将警告信号sbox_key_error与sr_key_error进行或运算,即key_error=sbox_key_error|sr_key_error,|为或运算符,key_error为密钥编排算法的警告信号,只要密钥编排的sbox或者密钥编排的循环移位受到攻击,key_error信号就拉高。

54、上述基于sm4分组密码算法的故障攻击防护方法,所述步骤2-5)具体过程为:

55、经过步骤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);

56、sbox的输入校验值为

57、sbox的输出校验值为

58、同步骤2-3),再通过c0,c1,c2,c3的值,对照步骤一生成的dbox,找出相应的差值记为dif(r),轮函数运算时dbox的输出校验值又因为dif(r)是sbox的输入与输出异或后得到的值,因此可预测正确的sbox的输出校验值轮函数运算的sbox输出的校验信号为如果psbox_error的值不为全零,则说明轮函数运算的sbox受到了攻击,轮函数运算的sbox的警告信号sbox_error就拉高为1,提醒系统算法正在遭受攻击。

59、上述基于sm4分组密码算法的故障攻击防护方法,所述步骤2-6)具体过程为:

60、在轮函数的循环移位增加奇偶校验点,用于检测数据的奇偶性是否发生变化,如果输入的前后奇偶校验值不一致则说明受到了故障攻击;

61、sm4的轮函数循环移位运算为:

62、

63、其中c为输出,b为输入,l()表示循环移位运算;

64、奇偶校验位的运算如下:

65、32位输入数据为b(x)=e0+e1x+e2x2+…+e31x31,ei∈gf(2);

66、则输入的奇偶校验位:

67、32位输出数据为c(x)=f0+f1x+f2x2+…+f31x31,fi∈gf(2);

68、则输出的奇偶校验位

69、

70、如果sr_error为1则表明sm4的轮函数的循环移位算法受到了故障攻击;

71、进一步地,再将步骤2-5)的警告信号sbox_error与sr_error进行或运算,即error=sbox_error|sr_error,error为加密算法的警告信号,只要加密算法的sbox或者加密算法的循环移位受到攻击,error信号就拉高。

72、上述基于sm4分组密码算法的故障攻击防护方法,所述步骤三中,设置系统警告信号sys_error,sys_error=error|key_error,当sm4算法的sbox和循环移位运算受到攻击,sys_error均拉高,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息;

73、所述系统警告信号由加密运算的错误信号和密钥编排运算的错误信号得出;

74、所述加密运算的错误信号由所述轮函数的sbox错误信号和所述轮函数运算中的循环移位错误信号得出;

75、所述密钥编排的错误信号由所述密钥编排的sbox错误信号和所述密钥编排的循环移位错误信号得出。

76、一种基于sm4分组密码算法的故障攻击防护装置,包括:

77、获取数据模块,用于获取待加密的明文数据和密钥;

78、密钥编排校验模块,用于根据所述密钥编排sbox的输出校验和密钥编排的循环移位校验,判断运算结果是否受到故障攻击;

79、数据加密校验模块,用于根据所述轮函数的sbox的输出校验和轮函数运算中的循环移位校验,判断运算结果是否受到故障攻击。

80、本发明的有益效果在于:本发明首先根据sm4算法的sbox的输入和输出之间存在的差值,构造出dbox;然后通过dbox计算出预测的sbox输出校验值,求出实际的sbox输出校验值,二者进行对比,判断sbox是否受到故障攻击,再对循环移位的输入和输出进行奇偶校验值运算,通过对比循环移位的输入和输出奇偶校验值,判断循环移位是否受到故障攻击;最后设置系统警告信号,当算法受到攻击,向系统上报警告信号,并将所有数据进行清零操作,以防攻击者获取有效信息。本发明方法及装置可对sm4算法易受到故障攻击的位置进行防护,使sm4算法可以有效抵抗故障攻击,并且硬件资源消耗少。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1