一种HMAC-SM3密码算法的侧信道能量分析方法及装置与流程

文档序号:11841873阅读:366来源:国知局
一种HMAC-SM3密码算法的侧信道能量分析方法及装置与流程
本发明涉及数据分析
技术领域
,特别涉及一种HMAC-SM3密码算法的侧信道能量分析方法及装置。
背景技术
:密码杂凑算法被广泛应用于数字签名和验证、消息认证码的生成和验证以及随机数的生成等方面,满足了多种密码应用的安全需求。其中,SM3密码算法是我国最早公布的密码杂凑算法,应用较为广泛。基于密码杂凑算法的消息鉴别码(Hash-basedMessageAuthenticationcode,HMAC)利用密码杂凑算法,以一个密钥和消息作为输入,输出一个带认证信息的消息摘要。消息摘要的接收方可以根据所述认证信息对消息摘要的发送方的身份以及消息的有效性进行验证。例如,HMAC-SM3密码算法是利用SM3密码算法来输出一个带认证信息的消息摘要。在很多情况下,需要分析基于HMAC-SM3密码算法所生成的消息摘要的密钥,以获取所述消息摘要携带的认证信息。在具体分析时,可以采用多种分析方法来获取密钥,例如侧信道能量分析方法。侧信道能量分析方法中,常见的分析手段包括简单能量分析(SimplePowerAnalysis,SPA)、差分能量分析(DifferentialPowerAnalysis,DPA)、相关能量分析(CorrelationPowerAnalysis,CPA)等。利用上述方法,在获得密码模块的情况下,可以通过分析密码模块在应用HMAC-SM3密码算法时产生的敏感信息与功耗等旁路信息间的相关性来破解密钥。目前,在采用侧信道能量分析方法对基于HMAC-SM3密码算法所生成的消息摘要进行分析的过程中,通常需要同时对模加和异或等多种运算所泄露的功耗进行分析。如果分析目标噪声较大,使得泄露的功耗不明显,则会导致密钥破解的成功率较低。技术实现要素:本发明解决的问题是提出一种HMAC-SM3密码算法的侧信道能量分析方法,提高破解消息摘要密钥的成功率。为解决上述问题,本发明实施例提供一种HMAC-SM3密码算法的侧信道能量分析方法,SM3密码算法的压缩函数在第j轮的迭代运算过程中,产生第一变量TT1j,第二变量TT2j,其中:TT1j=θj+W′j,θj=FFj(Aj,Bj,Cj)+Dj+SS2j,TT2j=ηj+Wj,ηj=GGj(Ej,Fj,Gj)+Hj+SS1j,SS1j=((Aj<<<12)+Ej+(Tj<<<j))<<<7,SS2j=SS1j⊕(Aj<<<12),]]>0≤j≤63,且j为整数,A,B,C,D,E,F,G,H均为基于HMAC-SM3密码算法的密码模块的寄存器,所述密码模块每次调用SM3密码算法时,第二个压缩函数的初始值均为当前调用SM3密码算法时各个所述寄存器的初始状态值A0,B0,C0,D0,E0,F0,G0,H0顺序排列所形成的数据序列,FFj(Aj,Bj,Cj)为对Aj,Bj和Cj布尔函数求值,GGj(Ej,Fj,Gj)为对Ej,Fj和Gj布尔函数求值,Wj、W′j为对一消息的一消息分组进行扩展后生成的字,Tj为常量;所述密码模块每次调用SM3密码算法的过程中,每个压缩函数运算后的结果为Vp,1≤P≤N,P为整数;所述分析方法包括:分析获得第一密钥数据Kin的值,所述第一密钥数据Kin为所述密码模块第一次调用SM3密码算法时,第二个压缩函数的初始值,采用如下步骤获得Kin:向基于HMAC-SM3密码算法的密码模块输入消息组M1={m10,m11,…,m1i,…,m1n},其中,消息m1i为随机数,n为正整数,0≤i≤n,且i为整数,采集消息组M1中每条消息的能量消耗信息,建立能量消耗矩阵,并在j=0时,分别选择第一变量TT10和第二变量TT20作为分析对象,根据消息组M1的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ0和η0的值;向基于HMAC-SM3密码算法的密码模块输入消息组M2={m20,m21,…, m2i,…,m2n},采集消息组M2中每条消息的能量消耗信息,建立能量消耗矩阵,其中,消息m2i第一个消息分组的W0及W4均为0,其余均为随机数,并在j=1时,分别选择第一变量TT11和第二变量TT21作为分析对象,根据消息组M2的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ1和η1的值;向基于HMAC-SM3密码算法的密码模块输入消息组M3=={m30,m31,…,m3i,…,m3n},采集消息组M3中每条消息的能量消耗信息,建立能量消耗矩阵,其中,消息m3i第一个消息分组的W0、W1、W4及W5均为0,其余均为随机数,并在j=2时,分别选择第一变量TT12和第二变量TT22作为分析对象,根据消息组M3的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ2和η2的值;向基于HMAC-SM3密码算法的密码模块输入消息组M4=={m40,m41,…,m4i,…,m4n},采集消息组M4中每条消息的能量消耗信息,建立能量消耗矩阵,其中,消息m4i第一个消息分组的W0、W1、W2、W4、W5及W6均为0,其余均为随机数,并在j=3时,分别选择第一变量TT13和第二变量TT23作为分析对象,根据消息组M4的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ3和η3的值;根据所获得的θ0、θ1、θ2、θ3、η0、η1、η2及η3的值,计算变量A0、B0、C0、D0、E0、F0、G0和H0的值,并将所述变量A0、B0、C0、D0、E0、F0、G0和H0的值顺序排列以获得所述第一密钥数据Kin的值;分析获得第二密钥数据Kout的值;根据所获得的第一密钥数据Kin的值以及第二密钥数据Kout的值,生成消息摘要。可选地,所述分析获得第二密钥数据Kout的值,包括:采用如下方式获得第二密钥数据Kout的值:向基于HMAC-SM3密码算法的密码模块输入消息组U1={u10,u11,…,u1i,…,u1n},其中,n为正整数,0≤i≤n,且i为整数;采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行 处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵;选择作为分析对象,根据所输出的消息VN以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得所述第二密钥数据Kout的值。可选地,所述分析获得第二密钥数据Kout的值,包括:采用如下步骤获得第二密钥数据Kout的值:向基于HMAC-SM3密码算法的密码模块输入消息组U2={u20,u21,…,u2i,…,u2n},其中,n为正整数,0≤i≤n,且i为整数;采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵;在j=0时,分别选择第一变量TT10和第二变量TT20作为分析对象,根据所输入的消息以及对应采集到的能量消耗数据,采用侧信道能量分析方法,先分别获得(FF0(A0,B0,C0)+D0+SS20)和(GG0(E0,F0,G0)+H0+SS10)的值,再分别获得第一变量TT10和第二变量TT20的值,即变量A1和E1的值;在j=1时,先分别选择和作为分析对象,分别根据所述变量A1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量B1、F1的值;再分别选择和作为分析对象,分别根据所获得的变量B1、A1的值以及变量F1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量C1、G1的值;再根据所获得的变量B1和C1的值,分别获得变量A0和B0的值;最后根据所获得的变量F1和G1的值,分别获得变量E0和F0的值;在j=1时,选择第一变量TT11或(FF1(A1,B1,C1)+D1)作为分析对象,根据所获得的变量A1、B1和C1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得变量D1的值;选择第二变量TT21或(GG1(E1,F1,G1)+H1)作为分析对象,根据所获得的变量E1、F1和G1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得变量H1的值;再根据所获得的变量D1和H1的值,分别获得变量C0和G0的值;在j=0时,选择(FF0(A0,B0,C0)+D0+SS20)作为分析对象,根据所获 得的变量A0、B0和C0的值,获得变量D0的值;选择(GG0(E0,F0,G0)+H0+SS10)作为分析对象,根据所获得的变量E0、F0和G0的值,获得变量H0的值;根据所述变量A0、B0、C0、D0、E0、F0、G0和H0的值,获得所述第二密钥数据Kout的值。可选地,所述侧信道能量分析方法包括:差分能量分析DPA或相关能量分析CPA。本发明实施例还提供了一种HMAC-SM3密码算法的侧信道能量分析装置,SM3密码算法的压缩函数在第j轮的迭代运算过程中,产生第一变量TT1j,第二变量TT2j,其中:TT1j=θj+W′j,θj=FFj(AJ,Bj,Cj)+Dj+SS2j,TT2j=ηj+Wj,ηj=GGj(Ej,Fj,Gj)+Hj+SS1j,SS1j=((Aj<<<12)+Ej+(Tj<<<j))<<<7,SS2j=SS1j⊕(Aj<<<12),]]>0≤j≤63,且j为整数,A,B,C,D,E,F,G,H均为基于HMAC-SM3密码算法的密码模块的寄存器,所述密码模块每次调用SM3密码算法时,第二个压缩函数的初始值均为当前调用SM3密码算法时各个所述寄存器的初始状态值A0,B0,C0,D0,E0,F0,G0,H0顺序排列所形成的数据序列,FFj(Aj,Bj,Cj)为对Aj,Bj和Cj布尔函数求值,GGj(Ej,Fj,Gj)为对Ej,Fj和Gj布尔函数求值,Wj、W′j为对一消息的一消息分组进行扩展后生成的字,Tj为常量;所述密码模块每次调用SM3密码算法的过程中,每个压缩函数运算后的结果为Vp,1≤P≤N,P为整数;所述分析装置包括:第一分析单元,用于分析获得第一密钥数据Kin的值,所述第一密钥数据Kin为所述密码模块第一次调用SM3密码算法时,第二个压缩函数的初始值,包括:第一输入子单元,用于向基于HMAC-SM3密码算法的密码模块输入消息 组M1={m10,m11,…,m1i,…,m1n},其中,消息m1i为随机数,n为正整数,0≤i≤n,且i为整数;第一采集子单元,用于采集消息组M1中每条消息的能量消耗信息,并建立能量消耗矩阵;第一分析子单元,用于在j=0时,分别选择第一变量TT10和第二变量TT20作为分析对象,根据消息组M1的输入数据以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得θ0和η0的值;第二输入子单元,用于向基于HMAC-SM3密码算法的密码模块输入消息组M2={m20,m21,…,m2i,…,m2n},其中,消息m2i第一个消息分组的W0及W4均为0,其余均为随机数;第二采集子单元,用于采集消息组M2中每条消息的能量消耗信息,并建立能量消耗矩阵;第二分析子单元,用于在j=1时,分别选择第一变量TT11和第二变量TT21作为分析对象,根据消息组M2的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ1和η1的值;第三输入子单元,用于向基于HMAC-SM3密码算法的密码模块输入消息组M3=={m30,m31,…,m3i,…,m3n},其中,消息m3i第一个消息分组的W0、W1、W4及W5均为0,其余均为随机数;第三采集子单元,用于采集消息组M3中每条消息的能量消耗信息,并建立能量消耗矩阵;第三分析子单元,用于在j=2时,分别选择第一变量TT12和第二变量TT22作为分析对象,根据消息组M3的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ2和η2的值;第四输入子单元,用于向基于HMAC-SM3密码算法的密码模块输入消息组M4=={m40,m41,…,m4i,…,m4n},其中,消息m4i第一个消息分组的W0、W1、W2、W4、W5及W6均为0,其余均为随机数;第四采集子单元,用于采集消息组M4中每条消息的能量消耗信息,并建 立能量消耗矩阵;第四分析子单元,用于在j=3时,分别选择第一变量TT13和第二变量TT23作为分析对象,根据消息组M4的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ3和η3的值;计算子单元,用于根据所获得的θ0、θ1、θ2、θ3、η0、η1、η2及η3的值,计算变量A0、E0、B0、F0、C0、G0、D0及H0的值,并将所述变量A0、B0、C0、D0、E0、F0、G0和H0的值顺序排列以获得所述第一密钥数据Kin的值;第二分析单元,用于分析获得第二密钥数据Kout的值;生成单元,根据所获得的第一密钥数据Kin的值以及第二密钥数据Kout的值,生成消息摘要。可选地,所述第二分析单元包括:输入子单元,用于向基于HMAC-SM3密码算法的密码模块输入消息组U1={u10,u11,…,u1i,…,u1n},其中,n为正整数,0≤i≤n,且i为整数;采集子单元,用于采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵;分析子单元,用于选择作为分析对象,根据所输出的消息VN以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得所述第二密钥数据Kout的值。可选地,所述第二分析单元包括:输入子单元,用于向基于HMAC-SM3密码算法的密码模块输入消息组U2={u20,u21,…,u2i,…,u2n},其中,n为正整数,0≤i≤n,且i为整数;采集子单元,用于采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵;第一分析子单元,用于在j=0时,分别选择第一变量TT10和第二变量TT20作为分析对象,根据所输入的消息以及对应采集到的能量消耗数据,采用侧信道能量分析方法,先分别获得(FF0(A0,B0,C0)+D0+SS20)和 (GG0(E0,F0,G0)+H0+SS10)的值,再分别获得第一变量TT10和第二变量TT20的值,即变量A1和E1的值;第二分析子单元,用于在j=1时,先分别选择和作为分析对象,分别根据所述变量A1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量B1、F1的值;再分别选择和作为分析对象,分别根据所获得的变量B1、A1的值以及变量F1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量C1、G1的值;再根据所获得的变量B1和C1的值,分别获得变量A0和B0的值;最后根据所获得的变量F1和G1的值,分别获得变量E0和F0的值;第三分析子单元,用于在j=1时,选择第一变量TT11或(FF1(A1,B1,C1)+D1)作为分析对象,根据所获得的变量A1、B1和C1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得变量D1的值;选择第二变量TT21或(GG1(E1,F1,G1)+H1)作为分析对象,根据所获得的变量E1、F1和G1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得变量H1的值;再根据所获得的变量D1和H1的值,分别获得变量C0和G0的值;第四分析子单元,用于在j=0时,选择(FF0(A0,B0,C0)+D0+SS20)作为分析对象,根据所获得的变量A0、B0和C0的值,获得D0的值;选择(GG0(E0,F0,G0)+H0+SS10)作为分析对象,根据所获得的变量E0、F0和G0的值,获得变量H0的值;第五分析子单元,用于根据所述变量A0、B0、C0、D0、E0、F0、G0和H0的值,获得所述第二密钥数据Kout的值。可选地,所述侧信道能量分析方法包括:差分能量分析DPA或相关能量分析CPA。与现有技术相比,本发明的实施例具有以下优点:通过向基于HMAC-SM3密码算法的密码模块选择性地输入消息组,以及采集对消息组中每条消息进行处理时所产生的能量消耗数据,进而可以通过选择迭代运算中的模加运算作为分析对象,再采用侧信道能量分析的方法,来获得各个寄存器的初始状 态值,也就可以获得第一密钥数据的值,最终根据所述第一密钥数据的值来生成消息摘要,以达到破解所述密码模块的密钥的目的。由于所输入的消息组具有选择性,进而可以只对迭代运算中的模加运算进行分析,而无须同时对模加以及异或等多种运算进行分析。相对于同时采用异或等其他运算获得第一密钥数据的值,模加运算的能量泄露更加明显,因此在采用侧信道能量方法分析基于HMAC-SM3密码算法的密码模块的密钥时,破解的成功率更高。附图说明图1是基于HMAC-SM3密码算法的密码模块生成消息摘要的工作原理图;图2是本发明实施例中SM3密码算法的侧信道能量分析方法的流程图;图3是本发明实施例中获得第一密钥数据的方法流程图;图4是本发明实施例中一种获得第二密钥数据的方法流程图;图5是本发明实施例中另一种获得第二密钥数据的方法流程图;图6是本发明实施例中一种SM3密码算法的侧信道能量分析装置的结构示意图;图7是本发明实施例中第一分析单元的结构示意图;图8是本发明实施例中一种第二分析单元的结构示意图;图9是本发明实施例中另一种第二分析单元的结构示意图。具体实施方式目前,在对基于HMAC-SM3密码算法的密码模块所生成的消息摘要进行分析的过程中,需要同时对模加和异或等多种运算所泄露的功耗进行分析,才能破解所述消息摘要的密钥。如果上述的一种或多种运算因某些原因导致泄露的功耗不明显,则破解所述消息摘要的成功率就会较低。针对上述问题,本发明的实施例提供了一种HMAC-SM3密码算法的侧信道能量分析方法。所述方法通过向基于HMAC-SM3密码算法的密码模块选择性地输入消息组,进而可以选择迭代运算中的模加运算作为分析对象,结合 对所输入的消息采集到的能量消耗信息,可以获得第一密钥数据的值,最终根据所述第一密钥数据的值,生成消息摘要,以达到破解所述密码模块的密钥的目的。由于在选择分析对象时,只采用迭代运算中模加运算作为分析对象即可获得第一密钥数据的值,而无须同时对模加和异或等多种运算进行分析,功耗的泄露更加明显,提高破解的成功率也就更高。为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细地说明。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,因此本发明不受下面公开的具体实施例的限制。本发明的实施例中,基于HMAC-SM3密码算法的密码模块即采用HMAC-SM3密码算法对发送的消息进行加密的密码模块。所述密码模块在发送所述消息时,先发送带认证信息的消息摘要。这样,消息摘要的接收方可以通过所述认证信息对消息摘要发送方的身份以及所述消息的有效性进行验证。图1为基于HMAC-SM3密码算法的密码模块生成消息摘要的原理图。如图1所示,mi表示一个不定长的输入消息,B(0),……,B(X-1),B(X)分别表示对消息mi进行(X+1)个分组后的每一消息分组,每一消息分组的长度为B字节。K为鉴别密钥,其长度一般为小于等于B的正整数值。ipad为B字节重复的0x36,opad为B字节重复的0x5c。CF表示SM3密码算法中的压缩函数,IV表示SM3密码算法的初始值,Kin,h1,……,hx,Kout分别表示调用SM3密码算法进行运算的过程中产生的中间状态值。101表示所述密码模块第一次调用SM3密码算法的过程,102表示所述密码模块第二次调用SM3密码算法的过程。其中,第一密钥数据Kin为所述密码模块第一次调用SM3密码算法的过程101中,第二个压缩函数1010的初始值,第二密钥数据Kout为所述密码模块最后一次调用SM3密码算法的过程102中,第二个压缩函数1020的初始值。所述密码模块通过调用SM3密码算法对鉴别密钥K进行摘要运算来生成密钥,再使用所述密钥对输入的消息进行加密,生成带有认证信息的消息摘要HMAC(mi)。为了获取所述消息摘要HMAC(mi)携带的认证信息,需要分析所述消息摘要HMAC(mi)的密钥。因此,可以通过向所述密码模块 输入多条消息的方式,另每条消息的值均不相同,分析所述密码模块对所述消息进行处理的过程,进而可以分析获得第一密钥数据Kin和第二密钥数据Kout的值。下面结合SM3密码算法的具体过程,分别对如何获取第一密钥数据Kin和第二密钥数据Kout的值进行详细说明:所述密码模块在接收到输入的消息组M后,首先调用SM3密码算法将每条消息进行填充,再对填充后的消息进行迭代压缩。1、消息填充以消息mi为例,消息mi的长度为l比特。首先将比特“1”添加到消息mi的末尾,再添加k个“0”,其中k是满足l+1+k≡448mod512的最小的非负整数。然后再添加一个64位的比特串,所述比特串是长度l的二进制数据,由此获得填充后的消息m′i。消息m′i的比特长度为512的倍数,将填充后的消息m′i按512比特进行分组:m′i=B(0)B(1)…B(x)…B(X),其中,X=(l+k+65)/512根据上述过程可以对消息组M中每条消息进行消息填充,得到填充后的消息组M′={m′0,m′1,…,m′i,…,m′n}。2、迭代压缩在具体实施中,所述迭代压缩过程可以包括对分组后的消息进行消息扩展的过程,以及对经消息扩展后的数据进行函数压缩的过程,下面对上述过程进行详细说明:2.1、消息扩展以对消息mi填充后的消息m′i中的消息分组B(x)进行为例,依次执行以下步骤,以将消息分组B(x)扩展生成132个字W0,W1,…,W67,W′0,W′1,…W′63:a)将消息分组B(x)划分为16个字W0,W1,…,W15;b)对于j从16至63,依次进行如下运算:Wj←P1(Wj-16⊕Wj-9⊕(Wj-3<<<15))⊕(Wj-13<<<7)⊕Wj-6---(1)]]>c)对于j从0至63之间的每一个值,依次进行如下运算:Wj′=Wj⊕Wj+4---(2)]]>其中置换函数式中R的单位为字。由此可以对填充后的消息组M‘中任一条消息mi‘进行消息扩展。2.2、函数压缩令A,B,C,D,E,F,G,H为字寄存器,A0,B0,C0,D0,E0,F0,G0,H0分别为所述寄存器的初始状态值,SS1j,SS2j,第一变量TT1j以及第二变量TT2j均为中间变量,压缩函数V(p+1)=CF(V(p),B(p)),0≤p≤n-1,其中V(0)为已知的256比特初始值IV。计算过程描述如下:ABCDEFGH←V(p)对于j从0至63之间的每一个值,依次进行式(3)至(14)的运算:SS1j←((Aj<<<12)+Ej+(Tj<<<j))<<<7(3)SS2j←SS1j⊕(<<<12)---(4)]]>TT1j←FFj(Aj,Bj,Cj)+Dj+SS2j+W′j(5)TT2j←GGj(Ej,Fj,Gj)+Hj+SS1j+Wj(6)Dj+1←Gj(7)Cj+1←Bj<<<9(8)Bj+1←Aj(9)Aj+1←TT1j(10)Hj+1←Gj(11)Gj+1←Fj<<<19(12)Fj+1←Ej(13)Ej+1←P0(TT2j)(14)V(p+1)←ABCDEFGH⊕V(P)]]>函数压缩后的结果为V(p)其中,迭代中使用的常数与函数如下:常量Tj=79cc45190≤j≤157a879d8a16≤j≤63;]]>布尔函数:置换函数P0(X)=R⊕(R<<<9)⊕(R<<<17)---(17)]]>式(15)、(16)及(17)中R,Y,Z的单位均为字。3、杂凑值ABCDEFGH←V(p)输出的256比特的杂凑值:y=ABCDEFGH。根据上述对SM3密码算法的描述可知,所述密码模块第一次调用SM3密码算法时,第二个压缩函数的初始值,以及最后一次调用SM3密码算法时,第二个压缩函数的初始值,均为当前调用SM3密码算法时各个寄存器的初始状态值A0,B0,C0,D0,E0,F0,G0以及H0顺序排列所形成的数据序列。所述第二密钥数据Kout的值还等于倒数第二个函数压缩的结果,即Kout=VN-1。图2是本发明实施例中HMAC-SM3密码算法的侧信道能量分析方法流程图。如图2所示,所述方法可以包括:步骤201,分析获得第一密钥数据Kin的值;步骤202,分析获得第二密钥数据Kout的值;步骤203,根据所获得的第一密钥数据Kin的值以及第二密钥数据Kout的值,生成消息摘要。在具体实施中,为了获得所述消息摘要的密钥,可以采用多种分析方式。比如,可以采用直接破解所述密钥的分析方式,也可以采用间接破解所述密钥的分析方式。本发明的实施例中,采用间接破解所述密钥的分析方式。具体地,通过先分别获取第一密钥数据Kin的值即步骤201,以及第二密钥数据Kout的值即步骤202,再根据所述第一密钥数据Kin和第二密钥数据Kout生成消 息摘要即步骤203,进而达到破解所述密钥的目的。在具体实施中,可以采用多种方法获得第一密钥数据Kin的值。比如,可以采用如图3所述的方法第一密钥数据Kin的值。下面对图3所示的方法进行详细说明:步骤301,向基于HMAC-SM3密码算法的密码模块输入消息组M1={m10,m11,…,m1i,…,m1n},其中,消息m1i为随机数,n为正整数,0≤i≤n,且i为整数,采集消息组M1中每条消息的能量消耗信息,建立能量消耗矩阵,并在j=0时,分别选择第一变量TT10和第二变量TT20作为分析对象,根据消息组M1的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ0和η0的值。参照上述对SM3密码算法的描述,根据式(5),所述密码模块调用SM3密码算法对消息组M1进行迭代运算的第一轮(即j=0)产生的第一变量TT10可以表示为:TT10=θ0+W′0,其中θ0=FF0(A0,B0,C0)+D0+SS20是固定的未知常量,W′0是已知变量,且W′0可以根据输入的消息而改变。由于式(5)的运算过程存在能量消耗泄漏,满足侧信道能量分析条件。选择第一变量TT10作为分析对象,采用侧信道能量分析的方法,猜测θ0的可能值,进而可以获得θ0的值。同理,根据式(6),第二变量TT20可以表示为TT20=η0+W0,其中η0=GG0(E0,F0,G0)+H0+SS10是固定的未知常量,W0是已知变量,W0可以根据输入的消息而改变。由于式(6)的运算过程存在能量消耗泄漏,满足侧信道能量分析条件,因此可以获得η0的值。需要说明的是,在本发明的实施例中,可以采用侧信道能量分析的方法来破解所述密钥。例如,可以采用DPA方法来破解所述密钥,也可以采用CPA方法来破解所述密钥。但无论具体采用哪种侧信道能量分析方法,均需要采集所述密钥模块对所输入的消息进行处理时产生的能量消耗信息,再通过分析所述能量消耗信息与所述密码模块在应用HMAC-SM3密码算法时产生的敏感信息之间的相关性来破解所述密钥。需要说明的是,采集对每条消息进行处理时所产生的能量消耗信息,即 在不同的时刻对分析对象所在的运算过程进行采样,由此可以获得n条消息在不同时刻消息的能量消耗值,根据所获得的能量消耗值建立能量消耗矩阵。需要说明的是,在具体实施中,消息m1i为随机数。也就是说,消息组M1中任一条消息均为随机输入数据。步骤302,向基于HMAC-SM3密码算法的密码模块输入消息组M2={m20,m21,…,m2i,…,m2n},采集消息组M2中每条消息的能量消耗信息,建立能量消耗矩阵,其中,消息m2i第一个消息分组的W0及W4均为0,其余均为随机数,并在j=1时,分别选择第一变量TT11和第二变量TT21作为分析对象,根据消息组M2的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ1和η1的值。在具体实施中,消息m2i第一个消息分组的W0及W4均为0,其余均为随机数,即消息m2i除第一个消息分组的W0及W4均为0外,所述第一个消息分组的其他扩展字以及消息m2i的其他消息分组均为随机数。也就是说,消息组M2中任一条消息的第一个消息分组的W0及W4均为0,第一个消息分组的其他扩展字以及该消息的其他消息分组均为随机数。参照上述对SM3密码算法的描述,根据式(5),所述密码模块调用SM3密码算法对消息组M1进行迭代运算的第二轮(即j=1)产生的第一变量TT11可以表示为:TT11=θ1+W′1,其中θ1=FF1(A1,B1,C1)+D1+SS21。当W0,W4均等于0时,根据式(2)可知,W′0=0,即消息组M1中每条消息的第一个消息分组的W′0均为0。此时,TT10=θ0。再根据式(10),A1=TT10,因此可以获得A1的值。由于θ1的值涉及变量A1,B1,C1以及D1,分别根据式(9)、(8)及(7)可知,B1=A0,C1=(B0<<<9),D1=C0,而A0、B0及C0均为未知固定变量,A1为已知变量,因此θ1是固定的未知常量。又由于W′1是已知变量,可以根据输入的消息而改变。由于式(5)的运算过程存在能量消耗泄漏,满足侧信道能量分析条件。选择第一变量TT11作为分析对象,采用侧信道能量分析的方法,猜测θ1的可能值,进而可以获得θ1的值。根据式(6),第二变量TT21可以表示为TT21=η1+W1,其中 η1=GG1(E1,F1,G1)+H1+SS11。由于W0为0,因此,可以获得TT20的值。根据式(14)、(13)及(12)可知,η1是固定的未知常量,W1是已知变量,W1可以根据输入的消息而改变。由于式(6)的运算过程存在能量消耗泄漏,满足侧信道能量分析条件,因此可以获得η1的值。步骤303,向基于HMAC-SM3密码算法的密码模块输入消息组M3=={m30,m31,…,m3i,…,m3n},采集消息组M3中每条消息的能量消耗信息,建立能量消耗矩阵,其中,消息m3i第一个消息分组的W0、W1、W4及W5均为0,其余均为随机数,并在j=2时,分别选择第一变量TT12和第二变量TT22作为分析对象,根据消息组M3的输入数据以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得θ2和η2的值。在具体实施中,m3i第一个消息分组的W0、W1、W4及W5均为0,其余均为随机数,即消息m3i除第一个消息分组的W0、W1、W4及W5均为0外,所述第一个消息分组的其他扩展字以及消息m3i的其他消息分组均为随机数。也就是说,消息组M3中任一条消息的第一个消息分组的W0、W1、W4及W5均为0,第一个消息分组的其他扩展字以及该消息的其他消息分组均为随机数。在j=2时,第一变量TT12可以表示为:TT12=θ2+W′2,其中,θ2=FF2(A2,B2,C2)+D2+SS22。如上所述,当W0及W4均为0时,可以获得A1的值。再将W1及W5设置为0,则可以获得TT11的值,进而可以获得A2的值。根据式(9)、(8)、(7)可知,B2=A1=θ0,C2=(B1<<<9)=(A0<<<9),D2=C1=(B0<<<9),此时,θ2为固定的未知常量,由于W′2是已知变量且可以根据输入的消息而改变,选择第一变量TT12作为分析对象,采用侧信道能量分析的方法,猜测θ2的可能值,进而可以获得θ2的值。第一变量TT22可以表示为:TT22=η2+W2,其中,η2=GG2(E2,F2,G2)+H2+SS12。如上所述,当W1为0时,可以获得TT11的值,根据式(14)、(13)及(12)可知,θ2为固定的未知常量。由于W′2是已知变量且可以根据输入的消息而改变,选择第一变量TT12作为分析对象,采用侧信道能量分析的方法,猜测θ2的可能值,进而可以获得θ2的值。步骤304,向基于HMAC-SM3密码算法的密码模块输入消息组M4=={m40,m41,…,m4i,…,m4n},采集消息组M4中每条消息的能量消耗信息,建立能量消耗矩阵,其中,消息m4i第一个消息分组的W0、W1、W2、W4、W5及W6均为0,其余均为随机数,并在j=3时,分别选择第一变量TT13和第二变量TT23作为分析对象,根据消息组M4的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ3和η3的值。在具体实施中,消息m4i第一个消息分组的W0、W1、W2、W4、W5及W6均为0,其余均为随机数,即消息m4i除第一个消息分组的W0、W1、W2、W4、W5及W6均为0外,所述第一个消息分组的其他扩展字以及消息m4i的其他消息分组均为随机数。也就是说,消息组M4中任一条消息的第一个消息分组的W0、W1、W2、W4、W5及W6均为0,第一个消息分组的其他扩展字以及该消息的其他消息分组均为随机数。在j=3时,第一变量TT13可以表示为:TT13=θ3+W′3,其中,θ3=FF3(A3,B3,C3)+D3+SS23。如上所述,当W0及W4均为0时,可以获得A1的值。将W1及W5设置为0,则可以获得TT11的值,进而可以获得A2的值。再将W2及W4设置为0,则可以获得TT12的值,进而可以获得A3的值。根据式(9)、(8)、(7)可知,B2=A1=θ0,C2=(B1<<<9)=(A0<<<9),D2=C1=(B0<<<9),此时,θ3为固定的未知常量,由于W′3是已知变量且可以根据输入的消息而改变,选择第一变量TT13作为分析对象,采用侧信道能量分析的方法,猜测θ3的可能值,进而可以获得θ3的值。第一变量TT23可以表示为:TT23=η3+W3,其中,η3=GG3(E3,F3,G3)+H3+SS13。如上所述,当W1为0时,可以获得TT11的值,W2为0时,可以获得TT112的值。再根据式(14)、(13)及(12)可知,θ2为固定的未知常量。由于W′3是已知变量且可以根据输入的消息而改变,选择第一变量TT13作为分析对象,采用侧信道能量分析的方法,猜测θ2的可能值,进而可以获得η3的值。步骤305,根据所获得的θ0、θ1、θ2、θ3、η0、η1、η2及η3的值,计算变量A0、B0、C0、D0、E0、F0、G0和H0的值,并将所述变量A0、B0、C0、D0、E0、F0、G0和H0的值顺序排列以获得所述第一密钥数据Kin或 者第二密钥数据Kout的值。具体地,依次进行如下步骤获得所述第一密钥数据Kin的值:a)根据步骤304,结合SM3密码算法,θ3可以表示为:θ3=(θ2⊕θ1⊕(⊕(θ0<<<9))+(A0<<<9)+((((θ2<<<12)+P0(η2)+(T3<<<3))<<<7)⊕(θ2<<<12)),---(18)]]>由于θ0、θ1、θ2、θ3、η2、T3都是已知的,将其代入式(18),可以获得A0的值。同理,η3可以表示为:η3=(P0(η2)⊕P0(η1)⊕(P0(η0)<<<<19))+(E0<<<19)+(((θ2<<<12)+P0(η2)+(T3<<<3))<<<7),---(19)]]>由于η0、η1、η2、η3、θ2、T3都是已知的,将其代入式(19),可以获得E0的值。b)根据步骤303,结合SM3密码算法,θ2可以表示为:θ2=(θ1⊕θ0⊕(A0<<<9))+(B0<<<9)+((((θ1<<<12)+P0(η1)+(T2<<<2))<<<7)⊕(θ1<<<12)),---(20)]]>由于θ0、θ1、θ2、η1、A0、T2都是已知的,将其代入式(20),可以获得B0的值。同理,η2可以表示为:η2=(P0(η1)⊕P0(η0)⊕(E0<<<19))+(F0<<<19)+(((θ1<<<12)+P0(η1)+(T2<<<2)<<<7),---(21)]]>由于η0、η1、η2、θ1、E0、T2都是已知的,将其代入式(21),可以获得F0的值。c)根据步骤302,结合SM3密码算法,θ1可以表示为:θ1=(θ0⊕A0⊕(B0<<<9))+C0+(((((θ0<<<12)+P0(η0)+(T1<<<1)<<<7)⊕(θ0<<<12)),---(22)]]>由于θ0、θ1、η0、A0、B0、T1都是已知的,将其代入式(22),可以获 得C0的值。同理,η1可以表示为:η1=(P0(η0)⊕E0⊕(F0<<<19))+G0+(((θ0<<<12)+P0(η0)+(T1<<<1)<<<7),---(23)]]>由于η0、η1、θ0、E0、F0、T1都是已知的,将其代入式(23),可以获得G0的值。d)根据步骤301,结合SM3密码算法,θ0可以表示为:θ0=(A0⊕B0⊕C0)+D0+((((A0<<<12)+E0+T0)<<<7)⊕(A0<<<12)),---(24)]]>由于θ0、A0、B0、C0、E0、T0都是已知的,将其代入式(24),可以获得D0的值。同理,η0表示为:η0=(E0⊕F0⊕G0)+H0+(((A0<<<12)+E0+T0)<<<7)---(25)]]>由于η0、E0、F0、G0、A0、T0都是已知的,将其代入式(25),可以获得H0的值。通过步骤a)至d),得到寄存器A0,B0,C0,D0,E0,F0,G0,H0的值,将其顺序排列,即可获得第一密钥数据Kin的值。在具体实施中,所述消息组M1中的n条消息可以部分相同,也可以完全不同,同样地,所述消息组M2中的n条消息可以部分相同,也可以完全不同,所述消息组M3中的n条消息可以部分相同,也可以完全不同,所述消息组M4中的n条消息可以部分相同,也可以完全不同,具体可以由本领域人员自行设定。由上述内容可知,本发明实施例中的方法,在获得第一密钥数据Kin的值的过程中,只针对模加运算进行分析,而无须对模加以及异或等多种运算同时进行分析,能量泄露更加明显,破解成功率也就更高。在具体实施中,如上所述,所述第二密钥数据Kout为最后一次调用SM3 密码算法时,第二个压缩函数的初始值,即最后一次调用SM3密码算法时各个寄存器的初始状态值A0,B0,C0,D0,E0,F0,G0以及H0顺序排列所形成的数据序列。因此,在所述密码模块最后一次调用SM3密码算法时,获得所述第一密钥数据Kin的值后,可以通过获得各个寄存器的初始状态值来获得所述第二密钥数据Kout的值。下面对如何获得所述第二密钥数据Kout的值进行详细说明:如图4所示,本发明的实施例提供了一种获得所述第二密钥数据Kout的值的方法,所述方法可以包括如下步骤:步骤401,向基于HMAC-SM3密码算法的密码模块输入消息组U2={u20,u21,…,u2i,…,u2n},其中,n为正整数,0≤i≤n,且i为整数。步骤402,采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵。需要说明的是,消息组U2中的n条消息可以部分相同,也可以完全不同。在具体实施中,步骤401和402可以参照上述步骤301中的相应描述进行实施,此处不再赘述。步骤403,在j=0时,分别选择第一变量TT10和第二变量TT20作为分析对象,采用侧信道能量分析方法,获得变量A1和E1的值。根据式(5)可知,TT10可以表示为TT10=θ0+W′0,其中θ0=FF0(A0,B0,C0)+D0+SS20是固定的未知常量,W′0是已知变量,且W′0可以根据攻击者的输入改变。由于式(5)的运算过程存在能量消耗泄漏,满足侧信道能量分析条件。将第一变量TT10作为分析对象,采用CPA或者DPA分析方法,猜测θ0的可能值,进而可以获得θ0的值。将所获得的θ0的值代入式(5),从而可以计算得到第一变量TT10的值。根据式(10)可知,第一变量TT10的值即下一轮的变量A1。同理,根据式(6)可知,第二变量TT20可以表示为TT20=η0+W0,其中η0=GG0(E0,F0,G0)+H0+SS10是固定的未知常量,W0是已知变量,W0可以根据攻击者的输入改变。由于式(6)的运算过程存在能量消耗泄漏,满足侧信道能量分析条件,因此可以获得η0的值,以及下一轮的变量E1的值。步骤404,在j=1时,先分别选择和作为分析对象,分别根据所述变量A1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量B1、F1的值;再分别选择和作为分析对象,分别根据所获得的变量B1、A1的值以及变量F1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量C1、G1的值;再根据所获得的变量B1和C1的值,分别获得变量A0和B0的值;根据所获得的变量F1和G1的值,分别获得变量E0和F0的值。在具体实施中,先选择作为分析对象,其中A1是已知变量,B1是未知的固定常量,的运算过程存在能量消耗泄漏,满足侧信道能量分析条件,因此可以采用CPA或者DPA分析方法,猜测B1的可能值,进而可以获得B1的值。再选择作为分析对象,将看成是已知变量,C1是未知固定常量,的运算过程存在能量消耗泄漏,满足侧信道能量分析条件,因此可以采用CPA或者DPA分析方法,猜测C1的可能值,进而可以获得C1的值。根据式(9)可知,B1=A0,因此可以获得变量A0的值。根据式(9)可知,C1=(B0<<<9),因此可以获得变量B0的值。同理,利用GG1(E1,F1,G1)=E1⊕F1⊕G1,]]>先选择作为分析对象获得变量F1的值,再选择作为分析对象,获得变量G1的值,最后根据所获得的变量F1和G1的值,分别获得变量E0和F0的值。步骤405,在j=1时,选择第一变量TT11或(FF1(A1,B1,C1)+D1)作为分析对象,采用侧信道能量分析方法,获得变量D1的值;选择第二变量TT21或(GG1(E1,F1,G1)+H1)作为分析对象,采用侧信道能量分析方法,获得变量H1的值;再根据所获得的变量D1和H1的值,分别获得变量C0和G0的值。也就是说,在获得变量D1的值时,既可以选择第一变量TT11作为分析对象,也可以选择(FF1(A1,B1,C1)+D1)作为分析对象,具体无论选择何中间变量作为分析对象,所述中间变量均可以表示为(已知变量+未知固定常量)的形式,进而可以利用侧信道分析方法,对未知固定常量的具体数据进行猜测。例如,在选择(FF1(A1,B1,C1)+D1)作为分析对象时,可以将 (FF1(A1,B1,C1)作为已知变量,D1作为未知固定常量,根据所获得的变量A1、B1和C1的值,以及对应采集到的能量消耗数据,通过CPA或者DPA的分析方法,来获得变量D1的值。获得变量D1的值后,根据式(7)来获得C0的值。同理可以获得变量G0的值。在选择(GG1(E1,F1,G1)+H1)作为分析对象时,根据所获得的变量E1、F1和G1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得变量H1的值。最后可以根据所获得的变量D1和H1的值,分别获得变量C0和G0的值;步骤406,在j=0时,选择(FF0(A0,B0,C0)+D0+SS20)作为分析对象,获得变量D0的值;选择(GG0(E0,F0,G0)+H0+SS10)作为分析对象,获得H0的值。在具体实施中,在j=0时,选择(FF0(A0,B0,C0)+D0+SS20)作为分析对象,根据所获得的变量A0、B0和C0的值,获得变量D0的值;选择(GG0(E0,F0,G0)+H0+SS10)作为分析对象,根据所获得的变量E0、F0和G0的值,获得H0的值。步骤407,根据所述变量A0、B0、C0、D0、E0、F0、G0和H0的值,获得所述第一密钥数据Kin的值。由步骤401至407可知,本发明的实施例中,在获得第一密钥数据Kin的值时,通过选择不同的分析对象来获得各个寄存器的初始状态值。并且,所选择的分析对象均为所述密码模块调用SM3密码算法过程中产生中间变量,所述中间变量均可表示为(已知变量+未知固定常量)的形式。在获得某一寄存器的初始状态值时,只需对其中的一个中间变量进行分析即可,而无须对所述寄存器的已知状态值和未知状态值两个数据之间的比特转换进行分析,也就无须使用汉明距离模型来生成消息摘要,因此更适合破解软件方式实现的密码模块。当然,相对于使用汉明距离模型来破解软件方式实现的密码模块,破解的成功率更高。在具体实施中,如上所述,所述第二密钥数据Kout的值还等于倒数第二个函数压缩的结果,即Kout=VN-1,因此,还可以采用图5中所示的方法获得所述第二密钥数据Kout的值。下面对图5中所示的方法进行详细说明:如图5所示,所述方法可以包括如下步骤:步骤501,向基于HMAC-SM3密码算法的密码模块输入消息组U1={u10,u11,…,u1i,…,u1n},其中,n为正整数,0≤i≤n,且i为整数;步骤502,采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵。在具体实施中,可以参照上述对步骤401和402的描述对应实施步骤501和502,此处不再赘述。步骤503,选择作为分析对象,根据所输出的消息VN以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得所述第二密钥数据Kout的值。其中,所述密码模块最后一次调用SM3密码算法后,输出的消息VN是已知变量,且根据输入的消息不同,VN不断变化。VN-1为未知固定常量,即Kout为未知固定常量,的运算过程存在能量泄露,因此可以采用侧信道能量分析的方法,对VN-1的具体数值进行猜测,并最终获得VN-1的值,即获得所述第二密钥数据Kout的值。需要说明的是,在具体实施中,所述消息组U1和消息组U2中的任一个可以与消息组M1、M2、M3及M4中任一个消息组所包含的消息完全相同,也可以与消息组M1、M2、M3及M4中任一个消息组所包含的消息部分相同,还可以也可以与消息组M1、M2、M3及M4中任一个消息组所包含的消息完全不同。例如,所述消息组U1中所包含的消息与消息组M1中所包含的消息可以完全相同,也可以部分相同,还可以完全不同。当二者所包含的消息完全相同时,具体实施时,只向所述密码模块输入一次消息组即可,而无须分别进行输入操作。当二者所包含的消息部分相同或者完全不同时,具体实施时,需向所述密码模块分别进行输入操作。同样地,所述消息组U2中所包含的消息与消息组M1中所包含的消息可以完全相同,也可以部分相同,还可以完全不同。可以理解的是,在具体实施中,所述消息组U1和消息组U2为随机输入 序列,具体无论采用图4中所示的方法获得第二密钥数据Kout,还是采用图5中所示的方法获得第二密钥数据Kout,所述消息组U1和消息组U2中所包含的消息数据都不应构成对本发明的限制。在具体实施中,所述侧信道能量分析方法可以包括多种分析手段,比如,可以采用CPA或者DPA的分析手段进行具体数值的分析,本发明的实施例不作限制。下面以采用CPA的分析方法为例,对获得所述第二密钥数据Kout的值的具体过程作详细描述:本发明以下的实施例中,以输入的消息组中每条消息的长度仅够调用两侧压缩函数CF,参见图2,即x=1。根据上述对SM3密码算法的描述,此时N=2,所述第二密钥数据Kout=V1。采集输入的消息组U1={u10,u11,…,u1i,…,u1n}中每条消息进行HMAC-SM3运算时的能量消耗信息,选择参与运算时的能量消耗部分,得到能量消耗矩阵:E(n×T)=e00...eT-10...eti...e0n-1...eT-1n-1,]]>其中,T为参与运算所用的时间,表示为第i条输入消息在t时刻产生的能量消耗值。通常情况下,所述第二密钥数据Kout的长度为8个字。对所述第二密钥数据Kout第q个字进行分析的过程如下:a)猜测所述第二密钥数据Kout第q个字q∈0,1,2,3,4,5,6,7,且q为整数,获得232个猜测数据;b)将所获得232个猜测数据分别代入所选择的分析对象中,获得中间值其中表示当所述第二密钥数据Kout的猜测数据为s时,所述密码模块对第i条输入消息产生消息摘要时对应的中间值。 因此可以获得中间值矩阵(n×232)=vq,00...vq,232-10...vq,si...vq,0n-1...vq,232-1n-1.]]>c)将所述中间值矩阵映射成仿真能量消耗矩阵。采用汉明重量模型将步骤b)中所获得中间值映射成仿真能量消耗值:即当所述第二密钥数据Kout的猜测数据为s时,所述密码模块对第i条输入消息产生消息摘要时的中间值所对应的仿真能量消耗值。对i条输入消息分别进行运算产生消息摘要,因此可以获得对应的仿真能量消耗矩阵:H(n×232)=]]>hq,00...hq,232-10...hq,si...hq,0n-1...hq,232-1n-1.]]>d)计算所述仿真能量消耗矩阵H(n×232)第s列与所述能量消耗矩阵E(n×T)第t列之间的相关系数ρs,t=nΣi=0n-1hq,sieti-Σi=0n-1hq,siΣi=0n-1etinΣq=0n-1(hq,si)2-(Σi=0n-1hq,si)2nΣi=0n-1(eti)2-(Σi=0n-1eti)2.]]>计算所述仿真能量消耗矩阵H(n×232)第s列与所述能量消耗矩阵E(n×T)所有列之间的线性相关系数,得到相关系数矩阵R(232×T)=ρ0,0...ρ0,T-1...ρs,t...ρ232-1,0...ρ232-1,T-1.]]>e)选取所述相关系数矩阵R(232×T)中的最大值ρm,n=max(ρs,t),对应的猜测密钥为正确的猜测密钥字,即得到正确的第q个字f)重复步骤a)至e),可分别获得所述第二密钥数据Kout的其它字。需要说明的是,在具体实施中,既可以字为单位对第二密钥数据Kout进行猜测,也可以将每个字拆成多个部分,单独对每一部分进行猜测。例如,可以将每个字拆成4个字节,参照上述步骤单独对每一字节进行猜测。本发明的实施例中,无论是获得第一密钥数据Kin的过程,还是获得第二 密钥数据Kout的过程,所述侧信道能量分析方法均可参照步骤1)至6)进行实施,此处不再赘述。需要说明的是,采用步骤1)至6)对第二密钥数据Kout进行分析时,相对于分析获得第一密钥数据Kin,不存在分析顺序的限制。也就是说,既可以在获得第一密钥数据Kin后,再对第二密钥数据Kout进行分析,也可在获得第一密钥数据Kin前,再对第二密钥数据Kout进行分析,还可以同时对第一密钥数据Kin和第二密钥数据Kout进行分析。具体无论采用何种分析顺序,均不构成对本发明的限制,且均在本发明的保护范围之内。需要说明的是,采用步骤a)至f)对第二密钥数据Kout进行分析时,由于所选择的分析对象为异或运算,只对所述异或运算进行分析即可,而无须分别获得每个寄存器的初始状态值,有效简化了分析流程,提高了分析效率。需要说明的是,本发明的实施例中,在具体应用侧信道能量分析方法获得第一密钥数据Kin或第二密钥数据Kout时,可以采用汉明重量模型来获得对应的数据。相对于采用汉明距离模型来获得对应的数据,汉明重量模型更适合软件方式实现的密码模块,破解所述密码模块密钥的成功率也就更高。为了使本领域技术人员更好地理解和实现本发明,以下对上述HMAC-SM3密码算法的侧信道能量分析方法对应的装置进行详细描述。如图6所示,本发明的实施例提供了一种HMAC-SM3密码算法的侧信道能量分析装置60。SM3密码算法的压缩函数在第j轮的迭代运算过程中,产生第一变量TT1j,第二变量TT2j,其中:TT1j=θj+W′j,θj=FFj(Aj,Bj,Cj)+Dj+SS2j,TT2j=ηj+Wj,ηj=GGj(Ej,Fj,Gj)+Hj+SS1j,SS1j=((Aj<<<12)+Ej+(Tj<<<j))<<<7,SS2j=SS1j⊕(Aj<<<12),]]>0≤j≤63,且j为整数,A,B,C,D,E,F,G,H均为基于HMAC-SM3密码算法的密码模块的寄存器。所述密码模块每次调用SM3密码算法时,第二个压缩函数的初始值均为当前调用SM3密码算法时各个所述寄存器的初始 状态值A0,B0,C0,D0,E0,F0,G0,H0顺序排列所形成的数据序列。FFj(Aj,Bj,Cj)为对Aj,Bj和Cj布尔函数求值,GGj(Ej,Fj,Gj)为对Ej,Fj和Gj布尔函数求值,Wj、W′j为对消息mi的一消息分组进行扩展后生成的字;Tj为常量。所述密码模块应用SM3密码算法的过程中,每次调用压缩函数后的结果为Vp,1≤P≤N,P为整数。所述装置60可以包括:第一分析单元61、第二分析单元62及生成单元63。其中:所述第一分析单元61可以用于分析获得第一密钥数据Kin的值,所述第二分析单元62可以用于分析获得第二密钥数据Kout的值,所述生成单元63可以根据所获得的第一密钥数据Kin的值以及第二密钥数据Kout的值,生成消息摘要。其中,所述第一密钥数据Kin为所述密码模块第一次调用SM3密码算法时第二个压缩函数的初始值,所述第二密钥数据Kout为所述密码模块最后一次调用SM3密码算法时第二个压缩函数的初始值。在具体实施中,如图7所示,所述第一分析单元70可以采用如下结构进行实施:第一输入子单元701,可以用于向基于HMAC-SM3密码算法的密码模块输入消息组M1={m10,m11,…,m1i,…,m1n},其中,消息m1i为随机数,n为正整数,0≤i≤n,且i为整数;第一采集子单元702,可以用于采集消息组M1中每条消息的能量消耗信息,并建立能量消耗矩阵;第一分析子单元703,可以用于在j=0时,分别选择第一变量TT10和第二变量TT20作为分析对象,根据消息组M1的输入数据以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得θ0和η0的值;第二输入子单元711,可以用于向基于HMAC-SM3密码算法的密码模块输入消息组M2={m20,m21,…,m2i,…,m2n},其中,消息m2i第一个消息分组的W0及W4均为0,其余均为随机数;第二采集子单元712,可以用于采集消息组M2中每条消息的能量消耗信息,并建立能量消耗矩阵;第二分析子单元713,可以用于在j=1时,分别选择第一变量TT11和第二变量TT21作为分析对象,根据消息组M2的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ1和η1的值;第三输入子单元721,可以用于向基于HMAC-SM3密码算法的密码模块输入消息组M3=={m30,m31,…,m3i,…,m3n},其中,消息m3i第一个消息分组的W0、W1、W4及W5均为0,其余均为随机数;第三采集子单元722,可以用于采集消息组M3中每条消息的能量消耗信息,并建立能量消耗矩阵;第三分析子单元723,可以用于在j=2时,分别选择第一变量TT12和第二变量TT22作为分析对象,根据消息组M3的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ2和η2的值;第四输入子单元731,可以用于向基于HMAC-SM3密码算法的密码模块输入消息组M4=={m40,m41,…,m4i,…,m4n},其中,消息m4i第一个消息分组的W0、W1、W2、W4、W5及W6均为0,其余均为随机数;第四采集子单元732,可以用于采集消息组M4中每条消息的能量消耗信息,并建立能量消耗矩阵;第四分析子单元733,可以用于在j=3时,分别选择第一变量TT13和第二变量TT23作为分析对象,根据消息组M4的输入数据以及对应采集到的能量消耗信息,采用侧信道能量分析方法,分别获得θ3和η3的值;计算子单元740,可以用于根据所获得的θ1、θ2、θ3、η1、η2及η3的值,计算变量A0、E0、B0、F0、C0、G0、D0及H0的值,并将所述变量A0、B0、C0、D0、E0、F0、G0和H0的值顺序排列以获得所述第一密钥数据Kin的值。由于所述第二密钥数据Kout既等于最后一次调用SM3密码算法时,第二个压缩函数的初始值,又等于倒数第二个函数压缩的结果,即Kout=VN-1。因此,在具体实施中,既可以采用图8所示的结构获得第二密钥数据Kout的值,也可以采用图9所示的结构获得第二密钥数据Kout的值。下面分别图8以及图9所示的结构进行说明:如图8所示,所述第二分析单元80可以包括:输入子单元801,采集子单元802以及分析子单元803。其中,所述输入子单元801可以用于向基于HMAC-SM3密码算法的密码模块输入消息组U2={u20,u21,…,u2i,…,u2n},其中,n为正整数,0≤i≤n,且i为整数。所述采集子单元802可以用于采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵。所述分析子单元803可以通过选择作为分析对象,根据所输出的消息VN以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得所述第二密钥数据Kout的值。如图9所示,所述第二分析单元90可以包括:输入子单元901,采集子单元902,第一分析子单元903,第二分析子单元904,第三分析子单元905,第四分析子单元906以及第五分析子单元907。其中:所述输入子单元901可以用于向基于HMAC-SM3密码算法的密码模块输入消息组U2={u20,u21,…,u2i,…,u2n},其中,n为正整数,0≤i≤n,且i为整数。所述采集子单元902可以用于采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵。所述第一分析子单元903可以用于在j=0时,分别选择第一变量TT10和第二变量TT20作为分析对象,根据所输入的消息以及对应采集到的能量消耗数据,采用侧信道能量分析方法,先分别获得(FF0(A0,B0,C0)+D0+SS20)和(GG0(E0,F0,G0)+H0+SS10)的值,再分别获得第一变量TT10和第二变量TT20的值,即变量A1和E1的值。所述第二分析子单元904可以用于在j=1时,先分别选择和作为分析对象,分别根据所述变量A1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量B1、F1的值;再分别选择和作为分析对象,分别根据所获得的变量B1、A1的值以及变量F1和E1的值,以及对应采集到的能量消耗数据, 采用侧信道能量分析方法,分别获得变量C1、G1的值;再根据所获得的变量B1和C1的值,分别获得变量A0和B0的值;最后根据所获得的变量F1和G1的值,分别获得变量E0和F0的值。所述第三分析子单元905可以用于在j=1时,选择第一变量TT11或(FF1(A1,B1,C1)+D1)作为分析对象,根据所获得的变量A1、B1和C1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得变量D1的值;选择第二变量TT21或(GG1(E1,F1,G1)+H1)作为分析对象,根据所获得的变量E1、F1和G1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得变量H1的值;再根据所获得的变量D1和H1的值,分别获得变量C0和G0的值。所述第四分析子单元906可以用于在j=0时,选择(FF0(A0,B0,C0)+D0+SS20)作为分析对象,根据所获得的变量A0、B0和C0的值,获得D0的值;选择(GG0(E0,F0,G0)+H0+SS10)作为分析对象,根据所获得的变量E0、F0和G0的值,获得变量H0的值。所述第五分析子单元907用于根据所述变量A0、B0、C0、D0、E0、F0、G0和H0的值,获得所述第二密钥数据Kout的值。需要说明的是,在本发明的实施例中,所述侧信道能量分析方法可以是DPA,也可以是CPA。具体无论采用何种侧信道能量分析方法,都不应该构成对本发明的限制。本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1