本发明涉及数据分析
技术领域:
,特别涉及一种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密码算法的侧信道能量分析方法,提高破解软件方式实现密码模块的消息摘要密钥的成功率。为解决上述问题,本发明实施例提供一种HMAC-SM3密码算法的侧信道能量分析方法,SM3密码算法的压缩函数在第j轮的迭代运算过程中,产生第一变量TT1j,第二变量TT2j,其中:TT1j=FFj(Aj,Bj,Cj)+Dj+SS2j+Wj′,TT2j=GGj(Ej,Fj,Gj)+Hj+SS1j+Wj,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、Wj′为对消息mi的一消息分组进行扩展后生成的字,Tj为常量;所述密码模块每次调用SM3密码算法的过程中,第p个压缩函数运算后的结果为Vp,1≤p≤N,p为整数;所述分析方法包括:分析获得第一密钥数据Kin的值,所述第一密钥数据Kin为所述密码模块第一次调用SM3密码算法时,第二个压缩函数的初始值,采用如下步骤获得Kin:向基于HMAC-SM3密码算法的密码模块输入消息组M={m0,m1,…,mi,…,mn},其中,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的值,获得所述第一密钥数据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=FFj(Aj,Bj,Cj)+Dj+SS2j+Wj′,TT2j=GGj(Ej,Fj,Gj)+Hj+SS1j+Wj,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、Wj′为对消息mi的一消息分组进行扩展后生成的字,Tj为常量;所述密码模块应用SM3密码算法的过程中,第p个压缩函数运算后的结果为Vp,1≤p≤N,p为整数;所述分析装置包括:第一分析单元,用于分析获得第一密钥数据Kin的值,所述第一密钥数据 Kin为所述密码模块第一次调用SM3密码算法时,第二个压缩函数的初始值,包括:输入子单元,用于向基于HMAC-SM3密码算法的密码模块输入消息组M={m0,m1,…,mi,…,mn},其中,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的值,获得所述第一密钥数据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密码算法的密码模块。相对于采用汉明距离模型来获得第一密钥数据的值,可以有效提高破解的成功率。通过选择()作为分析对象,进而可以根据所输出的消息VN以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得所述第二密钥数据Kout的值。由于在获得所述第二密钥数据Kout的值时,仅选择异或运算作为分析对象,可以简化分析流程,提高分析效率。附图说明图1是本发明实施例中SM3密码算法的侧信道能量分析方法的流程图;图2是基于HMAC-SM3密码算法的密码模块生成消息摘要的工作原理图;图3是本发明实施例中获得第一密钥数据的方法流程图;图4是本发明实施例中一种获得第二密钥数据的方法流程图;图5是本发明实施例中另一种获得第二密钥数据的方法流程图;图6是本发明实施例中一种SM3密码算法的侧信道能量分析装置的结构示意图;图7是本发明实施例中第一分析单元的结构示意图;图8是本发明实施例中一种第二分析单元的结构示意图;图9是本发明实施例中另一种第二分析单元的结构示意图。具体实施方式目前,在获得所述密码模块的第一密钥数据时,由于密码模块某一寄存器的已知状态值与未知状态值之间的比特转换存在能量泄露,因此可以采用汉明距离模型来对所述密码模块进行分析,进而来获得所述密码模块的第一密钥数据。但是上述方法更适合针对硬件方式实现的密码模块,对于软件方式实现的密码模块,则难以破解。针对上述问题,本发明的实施例提供了一种HMAC-SM3密码算法的侧信道能量分析方法。所述方法通过向基于HMAC-SM3密码算法的密码模块输入 消息组,一方面采集所述消息组所产生的能量消耗信息,建立对应的能量消耗矩阵;另一方面通过选择迭代运算中产生的中间变量作为分析对象,结合所输入的消息以及对应采集到的能量消耗信息,分析获得第一密钥数据的值,最终根据所述第一密钥数据和第二密钥数据的值,生成消息摘要,以达到破解所述密码模块的密钥的目的。在获得第一密钥数据的过程中,由于在选择分析对象时,采用迭代运算中产生的中间变量作为分析对象,而无须对所述密码模块某一寄存器的已知状态值与未知状态值之间的比特转换进行分析,也就无须采用汉明距离模型来获得第一密钥数据的值,因此更适合来破解软件方式实现HMAC-SM3密码算法的密码模块。相对于采用汉明距离模型来破解软件方式实现HMAC-SM3密码算法的密码模块密钥,可以有效提高破解的成功率。为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细地说明。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,因此本发明不受下面公开的具体实施例的限制。图1是本发明实施例中HMAC-SM3密码算法的侧信道能量分析方法流程图。如图1所示,所述方法可以包括:步骤101,分析获得第一密钥数据Kin的值;步骤102,分析获得第二密钥数据Kout的值;步骤103,根据所获得的第一密钥数据Kin的值以及第二密钥数据Kout的值,生成消息摘要。在具体实施中,为了获得所述消息摘要的密钥,可以采用多种分析方式。比如,可以采用直接破解所述密钥的分析方式,也可以采用间接破解所述密钥的分析方式。本发明的实施例中,采用间接破解所述密钥的分析方式。具体地,通过先分别获取第一密钥数据Kin的值即步骤101,以及第二密钥数据Kout的值即步骤102,再根据所述第一密钥数据Kin和第二密钥数据Kout生成消息摘要即步骤103,进而达到破解所述密钥的目的。需要说明的是,在本发明的实施例中,基于HMAC-SM3密码算法的密码模块即采用HMAC-SM3密码算法对发送的消息进行加密的密码模块。所述密码模块在发送所述消息时,先发送带认证信息的消息摘要。这样,消息摘要的接收方可以通过所述认证信息对消息摘要发送方的身份以及所述消息的有 效性进行验证。图2为所述消息摘要的生成原理图。如图2所示,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密码算法进行运算的过程中产生的中间状态值。201表示所述密码模块第一次调用SM3密码算法的过程,202表示所述密码模块第二次调用SM3密码算法的过程。其中,第一密钥数据Kin为所述密码模块第一次调用SM3密码算法的过程201中,第二个压缩函数2010的初始值,第二密钥数据Kout为所述密码模块最后一次调用SM3密码算法的过程202中,第二个压缩函数2020的初始值。所述密码模块通过调用SM3密码算法对鉴别密钥K进行摘要运算来生成密钥,再使用所述密钥对输入的消息进行加密,生成带有认证信息的消息摘要HMAC(mi)。为了获取所述消息摘要HMAC(mi)携带的认证信息,需要分析所述消息摘要HMAC(mi)的密钥。因此,可以通过向所述密码模块输入多条消息的方式,另每条消息的值均不相同,分析所述密码模块对所述消息进行处理的过程,进而可以分析获得第一密钥数据Kin和第二密钥数据Kout的值。最后可以根据所获得的第一密钥数据Kin的值以及第二密钥数据Kout的值,生成消息摘要。下面结合SM3密码算法的具体过程,分别对如何获取第一密钥数据Kin和第二密钥数据Kout的值进行详细说明:所述密码模块在接收到输入的消息组后,首先调用SM3密码算法将所述消息组中的每条消息进行填充,再对填充后的消息进行迭代压缩。1、消息填充以消息mi为例,消息mi的长度为l比特。首先将比特“1”添加到消息mi的末尾,再添加k个“0”,其中k是满足l+1+k≡448mod512的最小的非负整数。然后再添加一个64位的比特串,所述比特串是长度l的二进制数据,由 此获得填充后的消息mi′。消息mi′的比特长度为512的倍数,将填充后的消息mi′按512比特进行分组:mi′=B(0)B(1)…B(x)…B(X),其中,X=(l+k+65)/512根据上述过程可以对消息组M中每条消息进行消息填充,得到填充后的消息组M′={m0′,m1′,…,mi′,…,mn′}。2、迭代压缩在具体实施中,所述迭代压缩过程可以包括对分组后的消息进行消息扩展的过程,以及对经消息扩展后的数据进行函数压缩的过程,下面对上述过程进行详细说明:2.1、消息扩展以对消息mi填充后的消息mi′中的消息分组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)]]>其中置换函数P1(R)=R⊕(R<<<15)⊕(R<<<23),]]>式中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⊕(Aj<<<12)---(4)]]>TT1j←FFj(Aj,Bj,Cj)+Dj+SS2j+Wj′(5)TT2j←GGj(Ej,Fj,Gj)+Hj+SS1j+Wj(6)Dj+1←Cj(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)]]>式(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。在具体实施中,可以采用多种方式获得第一密钥数据Kin的值。例如,可以采用图3所示的方法获得第一密钥数据Kin的值。下面对图3中所示的方法进行详细说明:步骤301,向基于HMAC-SM3密码算法的密码模块输入消息组M={m0,m1,…,mi,…,mn},其中,n为正整数,0≤i≤n,且i为整数。在具体实施中,消息组M中的n条消息可以部分相同,也可以完全不同,由本领域人员自行设定。步骤302,采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵。在本发明的实施例中,可以采用侧信道能量分析的方法来破解所述密钥。例如,可以采用DPA方法来破解所述密钥,也可以采用CPA方法来破解所述密钥。但无论具体采用哪种侧信道能量分析方法,均需要采集所述密钥模块对所输入的消息进行处理时产生的能量消耗信息,再通过分析所述能量消耗信息与所述密码模块在应用HMAC-SM3密码算法时产生的敏感信息之间的相关性来破解所述密钥。采集对每条消息进行处理时所产生的能量消耗信息,即在不同的时刻对预处理过程进行采样,由此可以获得n条消息在不同时刻消息的能量消耗值,根据所获得的能量消耗值建立能量消耗矩阵。需要说明的是,在具体实施时,所采集到的能量消耗信息与分析所述密钥时采用的所述敏感信息相对应。例如,所采集到的能量消耗信息与分析所 述密钥时采用的所述敏感信息均为针对同一运算过程进行的操作,或者均为针对同一时间段进行的操作。步骤303,在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的值。步骤304,在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的值。步骤305,在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的值;步骤306,在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的值。步骤307,根据所述变量A0、B0、C0、D0、E0、F0、G0和H0的值,获得所述第一密钥数据Kin的值。由步骤301至307可知,本发明的实施例中,在获得第一密钥数据Kin的值时,通过选择不同的分析对象来获得各个寄存器的初始状态值。并且,所选择的分析对象均为所述密码模块调用SM3密码算法过程中产生中间变量,所述中间变量均可表示为(已知变量+未知固定常量)的形式。在获得某一寄存器的初始状态值时,只需对其中的一个中间变量进行分析即可,而无须对所述寄存器的已知状态值和未知状态值两个数据之间的比特转换进行分析,也就无须使用汉明距离模型来生成消息摘要,因此更适合破解软件方式实现的密码模块。当然,相对于使用汉明距离模型来破解软件方式实现的密码模块,破解的成功率更高。在具体实施中,如上所述,所述第二密钥数据Kout为最后一次调用SM3密码算法时,第二个压缩函数的初始值,即最后一次调用SM3密码算法时各个寄存器的初始状态值A0,B0,C0,D0,E0,F0,G0以及H0顺序排列所形成的数据序列。因此,在所述密码模块最后一次调用SM3密码算法时,获得所述第一密钥数据Kin的值后,也可以采用与步骤301至307类似的方法获得所述第二密钥数据Kout的值,下面对如何获得所述第二密钥数据Kout的值进行详细说明:在具体实施中,可以采用图4所示的方法获得所述第二密钥数据Kout的值。如图4所示,所述方法可以如下步骤:步骤401,向基于HMAC-SM3密码算法的密码模块输入消息组U2={u20,u21,…,u2i,…,u2n},其中,n为正整数,0≤i≤n,且i为整数。步骤402,采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵。步骤403,在j=0时,分别选择第一变量TT10和第二变量TT20作为分析对象,根据所输入的消息以及对应采集到的能量消耗数据,采用侧信道能量分析方法,先分别获得(FF0(A0,B0,C0)+D0+SS20)和(GG0(E0,F0,G0)+ H0+SS10)的值,再分别获得第一变量TT10和第二变量TT20的值,即变量A1和E1的值。步骤404,在j=1时,先分别选择()和()作为分析对象,分别根据所述变量A1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量B1、F1的值;再分别选择()和()作为分析对象,分别根据所获得的变量B1、A1的值以及变量F1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量C1、G1的值;再根据所获得的变量B1和C1的值,分别获得变量A0和B0的值;最后根据所获得的变量F1和G1的值,分别获得变量E0和F0的值。步骤405,在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的值。步骤406,在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的值,获得所述第二密钥数据Kout的值。在具体实施中,可以参照上述对步骤301至307的描述对应实施步骤401至407,此处不再赘述。需要说明的是,在具体实施中,消息组U2中所包含的消息与消息组M中所包含的消息可以完全相同,也可以部分相同,还可以完全不同。当二者所包含的消息完全相同时,具体实施时,只向所述密码模块输入一次消息组即可,而无须进行两次输入操作,所述第一密钥数据Kin的值与第二密钥数据 Kout的值根据相同的输入获得。当二者所包含的消息部分相同或者完全不同时,具体实施时,需所述密码模块输入两次消息组,所述第一密钥数据Kin的值与第二密钥数据Kout的值根据不同的输入获得。需要说明的是,当消息组U2中所包含的消息与消息组M中所包含的消息完全相同时,由于所述密码模块在第一次调用SM3密码算法和最后一次调用SM3密码算法时,各个寄存器的初始状态值是不同的,因此即使二者根据相同的输入且采用相同的方法进行获取,二者的值仍可能不同。由于所述第二密钥数据Kout的值也等于倒数第二个函数压缩的结果,即Kout=VN-1,因此也可以采用图5所示的步骤获得所述第二密钥数据Kout的值:步骤501,向基于HMAC-SM3密码算法的密码模块输入消息组U1={u10,u11,…,u1i,…,u1n},其中,n为正整数,0≤i≤n,且i为整数;步骤502,采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵。在具体实施中,可以参照上述对步骤301和302的描述对应实施步骤501和502,此处不再赘述。步骤503,选择()作为分析对象,根据所输出的消息VN以及对应采集到的能量消耗数据,采用侧信道能量分析方法获得所述第二密钥数据Kout的值。其中,所述密码模块最后一次调用SM3密码算法后,输出的消息VN是已知变量,且根据输入的消息不同,VN不断变化。VN-1为未知固定常量,即Kout为未知固定常量,()的运算过程存在能量泄露,因此可以采用侧信道能量分析的方法,对VN-1的具体数值进行猜测,并最终获得VN-1的值,即获得所述第二密钥数据Kout的值。需要说明的是,在具体实施中,所述消息组U1、消息组U2以及消息组M中任意两个消息组所包含的消息可以完全相同,也可以部分相同,还可以完全不同。例如,所述消息组U1中所包含的消息与消息组M中所包含的消息可以完全相同,也可以部分相同,还可以完全不同。当二者所包含的消息完全相同时,具体实施时,只向所述密码模块输入一次消息组即可,而无须进行两次输入操作,所述第一密钥数据Kin的值与第二密钥数据Kout的值根据相同的输入获得。当二者所包含的消息部分相同或者完全不同时,具体实施时,需所述密码模块输入两次消息组,所述第一密钥数据Kin的值与第二密钥数据Kout的值根据不同的输入获得。所述消息组U1中所包含的消息与消息组U2中所包含的消息可以完全相同,也可以部分相同,还可以完全不同。当二者所包含的消息完全相同时,具体实施时,向所述密码模块输入消息组U1或者U2时,既可以采用图4中所述的方法获得所述第二密钥数据Kout的值,也可以采用图5中所述的方法获得所述第二密钥数据Kout的值。在具体实施中,可以采用多种侧信道能量分析方法获得所述第二密钥数据Kout的值。比如,可以采用CPA的分析方法获得所述第二密钥数据Kout的值,也可以采用DPA的分析方法获得所述第二密钥数据Kout的值。下面以采用CPA的分析方法为例,对图5中获得所述第二密钥数据Kout的值的具体过程作详细描述:本发明以下的实施例中,以输入的消息组中每条消息的长度仅够调用两侧压缩函数CF,参见图2,即x=1。根据上述对SM3密码算法的描述,此时N=2,所述第二密钥数据Kout=V1。采集输入的消息组U1={u10,u11,…,u1i,…,u1n}中每条消息进行HMAC-SM3运算时的能量消耗信息,选择()参与运算时的能量消耗部分,得到能量消耗矩阵:其中,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条输入消息产生消息摘要时对应的中间值。因此可以获得中间值矩阵c)将所述中间值矩阵映射成仿真能量消耗矩阵。采用汉明重量模型将步骤b)中所获得中间值映射成仿真能量消耗值:即当所述第二密钥数据Kout的猜测数据为s时,所述密码模块对第i条输入消息产生消息摘要时的中间值所对应的仿真能量消耗值。对i条输入消息分别进行运算产生消息摘要,因此可以获得对应的仿真能量消耗矩阵: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)所有列之间的线性相关系数,得到相关系数矩阵e)选取所述相关系数矩阵R(232×T)中的最大值ρm,n=max(ρs,t),对应 的猜测密钥为正确的猜测密钥字,即得到正确的第q个字f)重复步骤a)至e),可分别获得所述第二密钥数据Kout的其它字。需要说明的是,在具体实施中,既可以字为单位对第二密钥数据Kout进行猜测,也可以将每个字拆成多个部分,单独对每一部分进行猜测。例如,可以将每个字拆成4个字节,参照上述步骤单独对每一字节进行猜测。本发明的实施例中,无论是获得第一密钥数据Kin的过程,还是获得第二密钥数据Kout的过程,所述侧信道能量分析方法均可参照步骤a)至f)进行实施,此处不再赘述。需要说明的是,采用步骤a)至f)对第二密钥数据Kout进行分析时,相对于分析获得第一密钥数据Kin,不存在分析顺序的限制。也就是说,既可以在获得第一密钥数据Kin后,再对第二密钥数据Kout进行分析,也可在获得第一密钥数据Kin前,再对第二密钥数据Kout进行分析,还可以同时对第一密钥数据Kin和第二密钥数据Kout进行分析。具体无论采用何种分析顺序,均不构成对本发明的限制,且均在本发明的保护范围之内。需要说明的是,采用步骤a)至f)对第二密钥数据Kout进行分析时,由于所选择的分析对象为异或运算,只对所述异或运算进行分析即可,而无须分别获得每个寄存器的初始状态值,有效简化了分析流程,提高了分析效率。需要说明的是,本发明的实施例中,在具体应用侧信道能量分析方法获得第一密钥数据Kin或第二密钥数据Kout时,可以采用汉明重量模型来获得对应的数据。相对于采用汉明距离模型来获得对应的数据,汉明重量模型更适合软件方式实现的密码模块,破解所述密码模块密钥的成功率也就更高。为了使本领域技术人员更好地理解和实现本发明,以下对上述HMAC-SM3密码算法的侧信道能量分析方法对应的装置进行详细描述。如图6所示,本发明的实施例提供了一种HMAC-SM3密码算法的侧信道能量分析装置。SM3密码算法的压缩函数在第j轮的迭代运算过程中,产生第一变量TT1j,第二变量TT2j,其中:TT1j=FFj(Aj,Bj,Cj)+Dj+SS2j+Wj′,TT2j=GGj(Ej,Fj,Gj)+Hj+SS1j+Wj,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、Wj′为对消息mi的一消息分组进行扩展后生成的字,Tj为常量。所述密码模块应用SM3密码算法的过程中,第p个压缩函数运算后的结果为Vp,1≤p≤N,p为整数。所述装置可以包括:第一分析单元61,第二分析单元62以及生成单元63。其中,所述第一分析单元61可以用于分析获得第一密钥数据Kin的值。所述第二分析单元62可以用于分析获得第二密钥数据Kout的值。所述生成单元单元63可以用于根据所获得的第一密钥数据Kin的值以及第二密钥数据Kout的值,生成消息摘要。其中,第一密钥数据Kin为所述密码模块第一次调用SM3密码算法时第二个压缩函数的初始值,所述第二密钥数据Kout为所述密码模块最后一次调用SM3密码算法时第二个压缩函数的初始值。在具体实施中,如图7所示,所述第一分析单元70可以包括:输入子单元701,采集子单元702,第一分析子单元703,第二分析子单元704,第三分析子单元705,第四分析子单元706以及第五分析子单元707。其中:所述输入子单元701可以用于向基于HMAC-SM3密码算法的密码模块输入消息组M={m0,m1,…,mi,…,mn},其中,n为正整数,0≤i≤n,且i为整数。所述采集子单元702可以用于采集所述密码模块应用HMAC-SM3密码算法对所输入的每条消息进行处理的过程中所产生的能量消耗信息,并建立能量消耗矩阵。所述第一分析子单元703可以用于在j=0时,分别选择第一变量TT10和第二变量TT20作为分析对象,根据所输入的消息以及对应采集到的能量消耗数据,采用侧信道能量分析方法,先分别获得(FF0(A0,B0,C0)+D0+SS20)和(GG0(E0,F0,G0)+H0+SS10)的值,再获得第一变量TT10和第二变量TT20的值,即变量A1和E1的值。所述第二分析子单元704可以用于在j=1时,先分别选择()和()作为分析对象,分别根据所述变量A1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量B1、F1的值;再分别选择()和()作为分析对象,分别根据所获得的变量B1、A1的值以及变量F1和E1的值,以及对应采集到的能量消耗数据,采用侧信道能量分析方法,分别获得变量C1、G1的值;再根据所获得的变量B1和C1的值,分别获得变量A0和B0的值;最后根据所获得的变量F1和G1的值,分别获得变量E0和F0的值。所述第三分析子单元705可以用于在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的值。所述第四分析子单元706可以用于在j=0时,选择(FF0(A0,B0,C0)+D0+SS20)作为分析对象,根据所获得的变量A0、B0和C0的值,获得D0的值;选择(GG0(E0,F0,G0)+H0+SS10)作为分析对象,根据所获得的变量E0、F0和G0的值,获得变量H0的值。所述第五分析子单元707可以根据所述变量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。具体无论采用何种侧信道能量分析方法,都不应该构成对本发明的限制。通过本发明实施例中的分析装置,可以有效提高破解软件方式实现HMAC-SM3密码算法的密码模块密钥的成功率。本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员, 在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。当前第1页1 2 3