
基于数字真随机数生成器的抗功耗攻击sm4加密电路
技术领域
1.本发明涉及sm4加密电路,尤其涉及一种基于数字真随机数生成器的抗功耗攻击sm4加密电路。
背景技术:2.sm4作为分组对称密码算法的一种,由我国自主研发实现,主要用于无线局域网和其他隐私基础设备认证,能够有效保障数据的机密性。目前,可以采用软件和硬件两种方式来实现sm4密码算法。相对于硬件实现,sm4软件实现的技术较为成熟,但随着工业和学术界对于加解密性能要求的不断提高,国内外大多数企业采用的是基于fpga的硬件系统来实现,采用硬件实现sm4密码算法已成为了一种趋势。
3.在采用密码算法进行信息加密传输时会面临着泄露的风险。旁路攻击是一种通过分析密码系统在运行时所产生的旁路信息来获取该设备的保密信息的方法,根据分析信息的类型,分为时间攻击,功耗攻击,电磁辐射攻击,故障攻击等。在众多旁路攻击中,功耗攻击最易实现且威胁最大,是密码电路中最常见的攻击手段之一,对密码电路的安全性造成的影响不可小觑。
4.目前,针对功耗攻击防护层次的不同,现有的防御措施大致可以分为算法级防护和电路级防护。算法级防护的本质是功耗随机化策略,主要包括随机掩码技术、时钟随机化技术、指令执行随机化技术等,基本原理是通过随机化操作,破坏功耗信息与密钥、明文之间的相关性。而无论哪种随机化技术,均需要依赖随机数生成器完成。随机数生成器作为加密电路中一个核心组成部分,它产生的不可预测性对于保障信息安全有着至关重要的作用,可以说随机数的质量决定了密码电路的安全程度。
5.随机数生成器一般分为两种,即真随机数生成器和伪随机数生成器。真随机数生成器的随机源(熵源)通过一些特殊的物理现象或电路结构产生,如亚稳态、电磁辐射、热噪声等形式。通过其生成的随机序列具有真正的不可预测性,没有规律可循,因此将此类序列称为真随机数。而伪随机数生成器一般采用数学计算或程序设置来产生伪随机序列,这样的序列并非真正意义上的随机数,只是周期较长,依然是有规律可循的。如果将伪随机数应用于数据加密领域,会存在一定的破解风险,而真随机数则不会出现这样的情况,能够有效保证加密电路的安全性。目前密码电路中采用的随机数大多是通过伪随机数生成器产生的伪随机序列,随机性不高,导致电路安全性较低。
技术实现要素:6.发明目的:本发明的目的是提供一种能增强密码电路安全性的基于数字真随机数生成器的抗功耗攻击sm4加密电路。
7.技术方案:本发明的抗功耗攻击sm4加密电路,包括:数字真随机数生成器、轮变换模块、密钥扩展模块、轮计数模块、输入输出选择模块和状态控制中心模块;
8.所述数字真随机数生成器与所述状态控制中心模块和所述输入输出选择模块连
接,用于产生随机变量;所述随机变量作为控制信号输入到所述状态控制中心模块,一旦所述状态控制中心模块检测到随机变量为特定值时,便会执行随机化操作;所述随机变量作为控制信号输入到所述输入输出选择模块,控制输入输出选择模块随机选择输出的明文和密钥;
9.所述轮变换模块与所述状态控制中心模块、所述输入输出选择模块、所述密钥扩展模块和所述轮计数模块连接,用于进行轮变换;所述轮变换共32轮,每轮产生128位中间值,作为下一轮轮变换的输入数据;最后一轮输出的4位32比特数据经过反序变换操作后得到密文;
10.所述密钥扩展模块与所述状态控制中心模块、所述输入输出选择模块、所述轮变换模块和所述轮计数模块连接,用于进行密钥扩展,所述密钥扩展模块通过32轮扩展运算,生成用于所述轮变换的32个轮密钥;
11.所述轮计数模块对所述密钥扩展和所述轮变换的轮数进行计数,确保所述密钥扩展和所述轮变换的32轮迭代进行;
12.所述状态控制中心模块控制数字真随机数生成器、轮变换模块、密钥扩展模块、轮计数模块和输入输出选择模块的运行状态;
13.所述输入输出选择模块根据从所述状态控制中心模块和所述数字真随机数生成器接收到的控制信号以及所述轮计数模块发出的计数信号k_counter和r_counter,完成所述密钥扩展模块和所述轮变换模块每轮的输入选择;
14.输入的明文和密钥均为128位。
15.进一步,所述数字真随机数生成器包括基于电路亚稳态和时钟抖动的熵源模块、基于d触发器的采样模块和基于异或操作的后处理模块;
16.所述数字真随机数生成器的输入为4个时钟信号,输出为4比特随机序列;基于电路亚稳态的熵源由两个异或门构成,输入为2位数据,输出的1位数据通过3个d触发器完成采样;基于时钟抖动的熵源模块由一个3级环形振荡器构成,输入也为2比特,输出的1位数据通过1个d触发器完成采样;将上述输出的两个1位数据分别与两个4位移位寄存器的输入端相连,再经过异或操作,可得到4位随机序列。
17.进一步,所述轮变换模块的输入为128位数据,输出为32位数据,且操作单位为32位字,包括轮密钥加单元、字节替换单元、线性左移单元和异或操作单元;
18.每轮轮变换的输入均为128位数据,平均划分为4个32位字,低位的3个32位字和轮密钥与轮密钥加单元的输入端相连;轮密钥加单元的输出端与字节替换单元的输入端相连;字节替换单元由4个8位输入、8位输出的s盒构成,字节替换单元的输出端与线性左移单元的输入端相连;线性左移的输出端与每轮轮变换的高32位字与异或操作单元的输入端相连;异或操作单元的输出端输出32位中间值,与上一轮的低96位数据级联,构成下一轮轮变换的128位中间值。
19.进一步,所述密钥扩展模块的输入为128位,输出为32位,包括七个异或器xor1、xor2、xor3、xor4、xor5、xor6、xor7及一个字节替换单元和一个线性左移单元;
20.密钥扩展每轮的中间值均为128位,平均划分为4个32位字,和4个32位的系统参数分别连接到xor1、xor2、xor3和xor4四个异或器的输入端;其中,xor2、xor3和xor4的输出端与异或器xor5的输入端相连;xor5的输出端与32位固定参数连接到异或器xor6的输入端;
xor6的输出端与字节替换单元的输入端相连;字节替换单元的输出端与线性左移单元的输入端相连;线性左移单元的输出端与异或器xor7的输入端相连;异或器xor7的输出为32位轮密钥。
21.进一步,所述轮计数模块的输入为1位轮计数使能信号,输出为两个6位的计数值,分别表示轮变换和密钥扩展对应的轮数,由两个寄存器、两个选择器和两个加法器构成。
22.进一步,所述输入输出选择模块的输入为4个1位状态信号、2个6位数据及4个128位数据,分别表示加密使能、轮变换结束、密钥扩展结束、加密完成、密钥扩展轮数、轮变换计数、初始输入密钥、每轮的密钥中间值、初始输入明文及每轮的轮变换中间值,输出为2个128位的轮变换中间值数据及1个1位加密结束标志信号。
23.进一步,所述状态控制中心模块的输入为1位加密使能信号和1位表示随机状态的自定义信号,输出为5个1位信号,分别表示密钥扩展使能、密钥扩展进行、轮变换使能、轮变换进行及轮变换结束的5个状态;
24.状态控制中心模块内部设置了7个状态,分别为初始状态s0、密钥扩展使能状态k_en、密钥扩展进行状态k_ing、轮变换使能状态r_en、轮变换进行状态r_ing、轮变换结束状态r_end以及随机状态rand;
25.电路默认为初始状态s0,状态控制中心模块接收到1位加密使能信号后,将轮密钥扩展使能信号拉高,随后转移到密钥扩展进行状态;密钥扩展完成后,转移到下一个状态,将轮变换使能信号拉高;此时,插入随机状态rand,由随机信号r_r控制,若检测到此时的随机信号为特定值,则电路进行随机轮变换操作,否则电路正常运行;
26.在轮变换状态时完成一小轮加密,之后进入轮变换结束状态r_end,进行轮密钥及中间值的存储;如此循环32轮,完成一组明文数据的加密。
27.本发明与现有技术相比,其显著效果如下:
28.1、本发明通过随机数生成器模块产生随机变量,并将此随机变量作为状态机的一个选择信号,破坏密钥和功耗之间的相关性以此改变密码电路在特定时刻的特定操作,模糊中间值时刻的功耗信息,从而抵抗差分功耗攻击,增强电路的安全性;
29.2、本发明采用数字真随机数生成器产生随机状态,与传统的抗功耗攻击防御措施相比,本发明能够在保证加密电路安全性的同时,减少电路的硬件资源开销。
附图说明
30.图1为本发明的总结构图;
31.图2为sm4加密流程图;
32.图3为sm4加密轮变换电路结构图;
33.图4为轮变换s盒整体结构图;
34.图5为轮变换线性移位电路结构图;
35.图6为sm4加密密钥扩展电路结构图;
36.图7为密钥扩展线性移位电路结构图;
37.图8为基于随机状态的sm4加密流程图;
38.图9为本发明的数字真随机数生成器电路结构图。
具体实施方式
39.下面结合说明书附图和具体实施方式对本发明做进一步详细描述。
40.sm4是一种32轮迭代分组密码算法,每一轮加密由密钥扩展和轮变换函数两大部分构成,其中轮变换又包括非线性的s盒字节替换、异或运算与线性移位操作。该算法的明文长度和密钥长度均为128位,数据处理的单位通常为8位字节以及32位字。sm4的加解密算法的结构相同,区别在于解密使用的密钥顺序和加密是相反的。
41.功耗攻击基于密码芯片在运行过程中产生的功耗与密钥、明文之间的相关性实现。攻击者可以通过大量的功耗曲线样本,通过数理统计分析推测出正确密钥。差分功耗攻击dpa是目前主流的功耗攻击方法,具有较强的攻击性且实施成本较低,主要包括两个步骤:功耗数据采集和功耗数据分析。功耗数据采集是指攻击者在密码算法运行时采用硬件或软件的方式对其功耗信息进行实时采集并记录。功耗数据分析是指将采集到的功耗数据进行统计分析,并根据其中的有效信息推测出正确密钥。基于均值差分法的dpa攻击方法,具体分为以下4个步骤:
42.(1)采集实际功耗曲线
43.首先选取m条随机明文,输入到密码芯片中,将其产生的功耗曲线采样点数据记为p=(p1,p2,...,pm),其中,pi(i=1,
…
,m)表示进行加密操作的第i条明文数据,将明文数据pi对应的功耗采样数据记为si=(s
i1
,s
i2
,...,s
in
),n表示每条明文数据的功耗曲线采样点数,也称采样长度,s
ij
(i=1,
…
,m,j=1,
…
,n)表示明文pi在j采样点时刻的功耗值。至此,得到一组m条明文的功耗曲线采样数据,记为s=(s1,s2,...,sm)。
44.(2)攻击位置选取
45.在进行功耗攻击时,通常需要选择一个攻击位置,该位置代表的数据必须是明文p与密钥k相关的函数,记为d=f(p,k),称其为中间值,因此攻击位置选取又称中间值选取。中间值的选取至关重要,影响着密钥破解的难易程度。选取位置过前,该时刻采集到的功耗数据无明显区别,无法推测密钥,选取位置过后,理论中间值难以计算,增加了密钥破解的难度。
46.(3)计算理论中间值
47.根据中间值对应的密钥位数a进行密钥信息的猜测,将猜测密钥记为k=(k1,k2,...,ka),其中a与猜测密钥的位数a有关。a=2a,即对a位猜测密钥来说,共有2a个猜测密钥。根据密钥k与明文p的相关函数计算得出理论中间值d
ih
=f(pi,kh)(i=1,
…
,m;h=1,
…
,a),得到一个m
×
n的中间值矩阵。矩阵的每列表示同一条密钥kh与不同的明文p计算出的中间值,将与实际密钥相同的那一列中间值对应的猜测密钥记为k
guess
。
48.(4)构建差分功耗曲线
49.计算理论中间值的目的是为了建立区分函数,在此基础上,把采集到的功耗曲线进行筛选分组,再进行差分计算。首先选择一个与中间值相关的区分函数,记为f(
·
),一般选取中间值的最高位作为区分函数。根据该位置的高低电平信息,将采集到的功耗曲线分别归类为s0和s1,用公式可表示为:
50.51.假设s0包含u条功耗曲线,s1包含v条功耗曲线,则u+v=m,即1个猜测密钥kh对应共m条功耗曲线。将功耗曲线区分为两组之后,分别对其进行算数求和、求平均计算,得到功耗曲线的均值和用公式表示为:
[0052][0053]
将两组均值功耗曲线做差,即可得到与密钥kh对应的差分功耗曲线q,用公式表示为:
[0054][0055]
将上述操作重复操作a次,即可得到a个猜测密钥对应a条差分功耗曲线,记为q=(q1,q2,...,qa)。在中间值产生的时刻,对a条差分功耗曲线在进行统计学分析,尖峰最高的功耗曲线对应的猜测密钥k
guess
即为正确密钥。
[0056]
根据差分功耗攻击的原理可知,只要隐藏或改变加密电路在中间值时刻的功耗轨迹,即可达到抵御dpa攻击。
[0057]
为了保障sm4密码电路的安全性,本发明提出一种基于数字真随机数生成器的抗功耗攻击sm4密码电路。在电路中增加了数字真随机数生成器模块,并重新编写状态机完成随机状态的植入,从而扰乱功耗轨迹,达到抵御差分功耗攻击的目的。
[0058]
(一)加密电路结构
[0059]
如图1所示,本发明的抗功耗攻击sm4加密电路,输入的明文和密钥均为128位,包括:数字真随机数生成器、轮变换模块、密钥扩展模块、轮计数模块、输入输出选择模块、状态控制中心模块。
[0060]
数字真随机数生成器可以产生真正意义上的随机数,该随机数可控制输入输出选择模块,随机选择轮变换的输入明文和密钥;轮变换模块共32轮,每轮产生128位中间值,作为下一轮轮变换的输入数据;最后一轮输出的4位32比特数据经过反序变换操作后即得到密文;密钥扩展模块通过32轮扩展运算,生成用于轮变换的32个轮密钥;轮计数模块的功能是对密钥扩展和轮变换的轮数进行计数,保证密钥扩展和轮变换的32轮迭代进行;状态控制中心模块控制整个sm4加密电路的运行状态;输入输出选择模块完成每一轮轮变换和密钥扩展的输入输出选择。
[0061]
本发明的数字真随机数生成器,输入输出均为4位数据,包括基于电路亚稳态和时钟抖动的熵源模块、基于d触发器的采样模块和基于异或操作的后处理模块;
[0062]
数字真随机数生成器的输入为4个时钟信号,输出为4比特随机序列;基于电路亚稳态的熵源由两个异或门构成,输入为2位数据,输出的1位数据通过3个d触发器完成采样;基于时钟抖动的熵源模块由一个3级环形振荡器构成,输入也为2比特,输出的1位数据通过1个d触发器完成采样;将上述输出的两个1位数据分别与两个4位移位寄存器的输入端相连,再经过异或操作,即可得到4位随机序列。
[0063]
本发明的轮变换模块,输入为128位数据,输出为32位数据,且操作单位为32位字,
包括轮密钥加单元、字节替换单元、线性左移单元和异或操作单元;
[0064]
每轮轮变换的输入均为128位数据,平均划分为4个32位字,低位的3个32位字和轮密钥与轮密钥加单元的输入端相连;轮密钥加单元的输出端与字节替换单元的输入端相连;字节替换单元由4个8位输入、8位输出的s盒构成,其输出端与线性左移单元的输入端相连;线性左移的输出端与每轮轮变换的高32位字与异或操作单元的输入端相连;异或操作单元的输出端输出32位中间值,与上一轮的低96位数据级联,构成下一轮轮变换的128位中间值。
[0065]
本发明的密钥扩展模块,输入为128位,输出为32位,包括七个异或器xor1、xor2、xor3、xor4、xor5、xor6、xor7及一个字节替换单元和一个线性左移单元;
[0066]
密钥扩展每轮的中间值均为128位,平均划分为4个32位字,和4个32位的系统参数分别连接到xor1、xor2、xor3和xor4四个异或器的输入端;其中,xor2、xor3和xor4的输出端与异或器xor5的输入端相连;xor5的输出端与32位固定参数连接到异或器xor6的输入端;xor6的输出端与字节替换单元的输入端相连;字节替换单元的输出端与线性左移单元的输入端相连;线性左移单元的输出端与异或器xor7的输入端相连;异或器xor7的输出即为32位轮密钥。
[0067]
本发明的轮计数模块,输入为1位轮计数使能信号,输出为两个6位的计数值,分别表示轮变换和密钥扩展对应的轮数,由两个寄存器、两个选择器和两个加法器构成。轮计数模块的功能是对密钥扩展和轮变换的轮数进行计数,保证密钥扩展和轮变换的32轮迭代进行。
[0068]
本发明的输入输出选择模块,输入为4个1位状态信号、2个6位数据及4个128位数据,分别表示加密使能、轮变换结束、密钥扩展结束、加密完成、密钥扩展轮数、轮变换计数、初始输入密钥、每轮的密钥中间值、初始输入明文及每轮的轮变换中间值,输出为2个128位的轮变换中间值数据及1个1位加密结束标志信号。输入选择模块的功能是根据从状态控制中心模块和数字真随机数生成器接收到的控制信号以及轮计数模块发出的计数信号k_counter和r_counter,完成密钥扩展模块和轮变换模块每轮的输入选择。
[0069]
本发明的状态控制中心模块,输入为1位加密使能信号和1位表示随机状态的自定义信号,输出为5个1位信号,分别表示密钥扩展使能、密钥扩展进行、轮变换使能、轮变换进行及轮变换结束5个状态;
[0070]
状态控制中心模块内部设置了7个状态,分别为初始状态s0、密钥扩展使能状态k_en、密钥扩展进行状态k_ing、轮变换使能状态r_en、轮变换进行状态r_ing、轮变换结束状态r_end以及随机状态rand。电路默认为初始状态s0,状态控制中心模块接收到1位加密使能信号后,将轮密钥扩展使能信号拉高,随后转移到密钥扩展进行状态。密钥扩展完成后,转移到下一个状态,将轮变换使能信号拉高。此时,插入随机状态,由随机信号r_r控制,若检测到此时的随机信号为特定值,则电路进行随机轮变换操作,否则电路正常运行。在轮变换状态时完成一小轮加密,之后进入轮变换结束状态r_end,进行轮密钥及中间值的存储。如此循环32轮,即可完成一组明文数据的加密。
[0071]
(二)工作原理
[0072]
如图2所示,sm4加密算法主要由轮变换和密钥扩展两部分构成。sm4加密过程为,先将128位明文分成4个32位字,记为p0=(x0,x1,x2,x3)。之后,将首轮输入的128位明文p0划
分为两边,x0在左边,x1,x2,x3在右边。第一轮加密时,首先将x0,x1,x2,x3与密钥扩展模块生成的轮密钥k0通过轮函数f进行计算,结果记为x4。将第一轮右边的3个字x1,x2,x3直接作为第二轮输入的前3个字,x4作为第4个字,则第二轮的轮变换输入可记作p1=(x1,x2,x3,x4)。每一轮都通过这样的步骤进行迭代计算,直到得到第32轮轮变换的输出结果p
32
=(x
32
,x
33
,x
34
,x
35
),最后将其作反序变换,得到最终密文c=(x
35
,x
34
,x
33
,x
32
)。
[0073]
如图3所示,sm4密码电路的轮变换主要由非线性结构s盒和线性变换l构成。进行加密操作时,首先将128比特的输入分组明文分为4个32位字,从高位到低位依次记为pi,p
i+1
,p
i+2
,p
i+3
(i=0,
…
,31),对应的轮密钥记为rki,需要通过专门的密钥扩展模块生成。p
i+1
,p
i+2
,p
i+3
与rki进行异或运算,再经过s盒与线性变换l,其结果再与pi进行异或运算,得到输出结果。
[0074]
在sm4的轮变换结构中,4个s盒共同构成非线性结构,执行字节替换的功能,是保障sm4算法安全的核心部分。考虑到查找表所消耗的面积资源较大,因此,本发明采用复合域求逆的方式设计s盒,其本质是一种在gf(28)域上进行的非线性变换,结构如图4所示。
[0075]
如图4所示,x表示s盒的8位输入,y表示s盒的8位输出,具体可以表示为:
[0076]
y=t(tx+v)-1
+v
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
[0077]
式(1)中,t和v为s盒中仿射变换所使用的两个矩阵,分别为:
[0078][0079]
如图5所示,经过s盒之后,输出的32比特中间值要进行线性变换l,包括四步循环左移操作和异或运算。
[0080]
sm4的密钥扩展每一轮的输入为128比特数据,输出为32比特中间值,与原轮密钥低96位级联,构成新的128位轮密钥,如此迭代32轮,每轮的结构如图6所示。
[0081]
如图6所示,首先将初始128比特的密钥mk分为4个32位字,记为mk0,mk1,mk2,mk3,将128比特的系统参数fk记为fk0,fk1,fk2,fk3,分别为:
[0082][0083]
固定参数cki(i=0,
…
,31)的长度为32比特,分别为:
[0084][0085]
公式(5)、(6)中的值均为16进制数。在图5中,左边部分为一次性操作,仅针对初始密钥,右边部分为循环操作,针对与轮密钥相关的中间值ki,k
i+1
,k
i+2
,k
i+3
。中间值经过异或操作后,得到32位比特串,再经过s盒以及线性变换l'后进行一次异或操作,输出的k
i+4
即为下一轮的32位轮密钥rki,直接用于对应的轮变换函数。
[0086]
如图7所示,线性变换l'包括两步循环左移操作和异或运算。
[0087]
如图8所示,为了防御差分功耗攻击,本发明在未添加防护措施的sm4密码电路的基础上,增加了数字真随机数生成器。每一轮内部的状态机中设置有一个随机状态,该随机状态通过随机数生成器产生的随机信号控制,每当状态机选取到该随机状态时,便会暂停正常的轮变换,选取随机明文和随机密钥进行加密操作,即伪操作。加入了随机伪操作之后,使得sm4密码电路在应该执行特定的轮变换和轮密钥扩展时,随机执行了其它的轮变换和轮密钥扩展。这种方案设计的加密电路将轮函数和密钥扩展都进行了随机化操作,导致中间值产生的时刻不是固定的,模糊了固定时刻的功耗消耗轨迹,使得攻击者无法根据差分功耗曲线来推测密钥,从而达到抵抗差分功耗攻击的目的。
[0088]
如图9所示,r、s两端接入同一时钟信号,基于电路亚稳态的熵源由两个或非门完成,利用了rs触发器双稳态的特性,作为真随机数生成器的熵源。此时q端的输出只有两种情况,当clk1为低电平时,q端输出保持不变。当clk1为高电平时,q端下一个状态的输出为不确定状态。此时的输出可能为0,也可能为1,具体稳定在哪个状态取决于电路内部的噪声。由于亚稳态会在电路中产生传播,为得到亚稳态稳定之后输出的随机序列,需要通过同步器进行延拍采样。一般情况下亚稳态通过两级d触发器传播的概率已经被大大降低,因此采用三级d触发器级联的方式,保证采样到的数据为亚稳态稳定之后输出的随机序列。基于振荡器抖动的熵源由一个与非门和两个反相器构成,形成一个环形振荡器。通过时钟信号控制振荡器的开启与停止,在输出端通过周期性的方波反映出时钟信号clk3的抖动信息。clk3相对于clk4为高频信号,即熵源时钟周期较短,采样时钟clk4为理想稳定的长周期信号。根据clk3时钟抖动超前滞后的随机性,在clk4每一个上升沿,通过d触发器均能采样到一个稳定的随机电平输出。将上述两种真随机数生成器的输出序列通过4位移位寄存器进行存储,并通过异或运算,可得到经过后处理的随机序列。
[0089]
本发明已参照当前的实施方式进行了描述,但本技术领域的普通技术人员应当认识到,上述实施方式仅用来说明本发明,并非用来限定本发明的保护范围,任何在本发明的精神和原则范围之内,所做的任何修饰、等效替换、改进,均应包含在本发明的权利保护范围之内。