基于SM3算法的密码模块的防攻击方法及装置与流程

文档序号:12622034阅读:323来源:国知局
基于SM3算法的密码模块的防攻击方法及装置与流程

本发明涉及数据安全技术领域,特别涉及一种基于SM3算法的密码模块的防攻击方法及装置。



背景技术:

密码杂凑算法被广泛应用于数字签名和验证、消息认证码的生成和验证以及随机数的生成等方面,满足了多种密码应用的安全需求。其中,SM3密码算法是我国唯一的密码杂凑算法,应用较为广泛。

基于SM3算法的密码模块在对输入的信息进行处理的过程中,会计算一系列的中间值。所计算的中间值的功耗与所述密码模块的密钥存在一定的相关性。因此,攻击者在对基于SM3算法的密码模块进行攻击时,可以采用侧信道能量分析的方法对所述中间值的侧信道信息进行分析,最终获得所述密码模块的密钥。



技术实现要素:

本发明解决的问题是如何防止攻击者采用侧信道能量分析方法获得基于SM3算法的密码模块的密钥。

为解决上述问题,本发明实施例提供一种基于SM3算法的密码模块的防攻击方法,所述密码模块包括第一寄存器A,B,C,D,E,F,G,H,所述密码模块对接收到的消息m进行扩展后得到消息m′,且消息m′=B(0)B(1)…B(i)…B(n-1),B(i)为消息m′的第i个消息分组,i和n为整数,0≤i≤n-1;

所述方法包括:

在所述密码模块调用SM3算法的压缩函数对消息m′的第i个消息分组B(i)进行迭代运算以前,获取分别与所述第一寄存器A,B,C,D,E,F,G,H对应的随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7并分别存储在第二寄存器中;将所获取到的随机数分别与对应的所述第一寄存器的值进行第一运算,并将 第一运算后的结果作为第1轮迭代运算中所述寄存器的起始值A′0,B′0,C′0,D′0,E′0,F′0,G′0,H′0

当所述密码模块调用SM3算法的压缩函数对所述消息分组B(i)进行迭代运算时,将所述压缩函数中的所有运算的输入进行掩码转换,并计算前M轮迭代运算的每一轮迭代运算中各个第一寄存器的值及对应的掩码;将第M轮迭代运算获得的各个第一寄存器的值分别与对应的掩码进行第一运算,并将第一运算后的结果作为第M+1轮迭代运算中各个寄存器的起始值,其中1≤M≤64。

可选地,所述将所述压缩函数中的所有运算的输入进行掩码转换,包括:

将所述压缩函数中的布尔运算的输入转换为带布尔掩码的输入,以及将所述压缩函数中的算术加运算的输入转换为带算术掩码的输入。

可选地,所述将所述压缩函数中的所有运算的输入进行掩码转换,还包括以下至少一种:

在将所述压缩函数中的布尔运算的输入转换为带布尔掩码的输入之前,获取并将随机数作为所述压缩函数中布尔运算的输入的布尔掩码;

在将所述压缩函数中的算术加运算的输入转换为带算术掩码的输入之前,获取并将随机数作为所述压缩函数中算术加运算的输入的算术掩码。

可选地,所述布尔运算包括以下其中一种:异或运算、循环移位运算、与运算、或运算及非运算。

可选地,所述算术加运算包括:模232算术加运算。

可选地,所述M的值为16。

可选地,所述M的值为4。

可选地,所述随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7分别与对应的各个寄存器的值的长度相同。

可选地,所述第一运算包括异或运算或算术加运算。

本发明实施例还提供了一种基于SM3算法的密码模块的防攻击装置,所述密码模块包括第一寄存器A,B,C,D,E,F,G,H,所述密码模块对接收到的消息m进行扩展后得到消息m′,且消息m′=B(0)B(1)…B(i)…B(n-1), B(i)为消息m′的第i个消息分组,i和n为整数,0≤i≤n-1;

所述装置包括:

获取单元,适于在所述密码模块调用SM3算法的压缩函数对消息m′的第i个消息分组B(i)进行迭代运算以前,获取分别与所述第一寄存器A,B,C,D,E,F,G,H对应的随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7,并分别存储在第二寄存器中;

第一运算单元,适于将所获取到的随机数分别与对应的所述第一寄存器的值进行第一运算,并将第一运算后的结果作为第1轮迭代运算中所述寄存器的起始值A′0,B′0,C′0,D′0,E′0,F′0,G′0,H′0

转换单元,适于在所述密码模块调用SM3算法的压缩函数对所述消息分组B(i)进行迭代运算时,所述压缩函数中的所有运算的输入进行掩码转换;

第二运算单元,适于计算前M轮迭代运算的每一轮迭代运算中各个寄存器的值及对应的掩码;

第三运算单元,适于将第M轮迭代运算获得的各个寄存器的值分别与对应的掩码进行第一运算,并将第一运算后的结果作为第M+1轮迭代运算中各个寄存器的起始值,其中1≤M≤64。

可选地,所述转换单元包括:

第一转换子单元,适于将所述压缩函数中的布尔运算的输入转换为带布尔掩码的输入;

第二转换子单元,适于将所述压缩函数中的算术加运算的输入转换为带算术掩码的输入。

可选地,所述转换单元还包括以下至少一种:

第一获取子单元,适于在将所述压缩函数中的布尔运算的输入转换为带布尔掩码的输入之前,获取并将随机数作为所述压缩函数中布尔运算的输入的布尔掩码;

第二获取子单元,适于在将所述压缩函数中的算术加运算的输入转换为带算术掩码的输入之前,获取并将随机数作为所述压缩函数中算术加运算的输入的算术掩码。

可选地,所述布尔运算包括以下其中一种:异或运算、循环移位运算、与运算、或运算及非运算。

可选地,所述算术加运算包括:模232算术加运算。

可选地,所述M的值为16。

可选地,所述M的值为4。

可选地,所述随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7分别与对应的各个寄存器的值的长度相同。

可选地,所述第一运算包括异或运算或算术加运算。

与现有技术相比,本发明的实施例具有以下优点:

通过获取随机数,并将所获取的随机数分别与对应的第一寄存器的值进行第一运算,将得到的第一运算结果作为输入,带有掩码。并且在对所述第一运算结果进行处理过程中,将压缩函数中的所有运算的输入进行掩码转换,可以使得密码模块在调用SM3密码算法进行迭代运算的过程中,避免出现真实的中间值,因此可以防止攻击者通过侧信道能量分析方法分析所述中间值,也就可以防止由此而导致的所述密码模块密钥的泄露,提高所述密码模块的安全性。

附图说明

图1是本发明实施例中基于SM3算法的密码模块的防攻击方法的流程图;

图2是本发明实施例中密码模块调用SM3算法对消息分组B(i)执行第1轮迭代运算的流程图;

图3是本发明实施例中密码模块调用SM3算法对消息分组B(i)执行第j+1轮迭代运算的流程图;

图4是本发明实施例中基于SM3算法的密码模块的防攻击装置的结构示意图;

图5是本发明实施例中转换单元的结构示意图。

具体实施方式

目前,由于基于SM3算法的密码模块在调用SM3算法对输入信息进行处理时,会计算一系列的中间值,并且,所述中间值的功耗与所述密码模块的密钥存在一定的相关性。因此,攻击者往往可以通过获取所述中间值的侧信道信息,并采用侧信道能量分析的方法对所述中间值进行分析,来获得所述密码模块的密钥。

针对上述问题,本发明的实施例提供了一种基于SM3算法的密码模块的防攻击方法。所述方法通过获取随机数,并将所获取的随机数分别与对应的第一寄存器的值进行第一运算,将得到的第一运算结果作为输入。并且,在对所述第一运算结果进行处理过程中,将压缩函数中的所有运算的输入进行掩码转换,进而可以避免所述密码模块在调用SM3密码算法进行迭代运算的过程中出现真实的中间值,也就可以防止攻击者采用侧信道能量分析方法分析所述中间值,避免由此而导致的所述密码模块密钥的泄露,提高所述密码模块的安全性。

为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施例做详细地说明。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,因此本发明不受下面公开的具体实施例的限制。

如图1所示,本发明实施例提供了一种基于SM3算法的密码模块的防攻击方法。所述密码模块包括第一寄存器A,B,C,D,E,F,G,H。当接收到消息m后,所述密码模块首先对消息m进行扩展后得到消息m′=B(0)B(1)…B(i)…B(n-1),B(i)为消息m′的第i个消息分组,i和n为整数,0≤i≤n-1。接着,所述密码模块对消息m′的每个消息分组进行函数压缩,每个函数压缩过程包括从第0轮至第63轮的迭代运算。

所述方法可以包括如下步骤11、12、13、14及15。其中,步骤11及12在所述密码模块调用SM3算法的压缩函数对消息m′的第i个消息分组B(i)进行迭代运算以前执行,步骤13至15在所述密码模块调用SM3算法的压缩函数对所述消息分组B(i)进行迭代运算的过程中执行。下面对上述步骤进行详细说明:

步骤11,获取分别与所述第一寄存器A,B,C,D,E,F,G,H对应的随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7,并分别存储在第二寄存器中。

在具体实施中,可以通过多种方式获取所述随机数,此处不作限定。例如,可以通过用户输入的方式获取所述随机数,也可以通过在其他外部设备中读取所述随机数的方式获取所述随机数,还可以通过在所述密码模块中设置随机数产生装置的方式获取所述随机数。其中,所获取的随机数可以部分相同,也可以全部相同。

在具体实施中,所述第一寄存器可以用于存储各个寄存器的值,所述第二寄存器可以用于存储所获取的随机数。所述密码模块调用SM3算法对消息m处理的过程中,随着处理过程的不同,各个第一寄存器的值相应发生变化。在本发明的实施例中,所述密码模块在调用SM3密码算法对消息m进行迭代运算前,各个第一寄存器的值为其初始值。每轮迭代运算中,各个第一寄存器都有起始值,所述密码模块根据所述第一寄存器的起始值并结合SM3算法进行迭代运算。但无论各个第一寄存器的值如何,所述第二寄存器中存储的随机数均分别与各个第一寄存器的值保持对应关系。

例如,随机数r0,0与第一寄存器A的值相对应,随机数r0,1与第一寄存器B的值相对应,随机数r0,2与第一寄存器C的值相对应,随机数r0,3与第一寄存器D的值相对应,随机数r0,4与第一寄存器E的值相对应,随机数r0,5与第一寄存器F的值相对应;r0,6与第一寄存器G的值相对应;r0,7与第一寄存器H的值相对应。

在具体实施中,所述随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7分别与对应的各个第一寄存器的值的长度相同。通常情况下,各个第一寄存器的值的长度为32bit,则所获取的各个随机数的长度对应为32bit。

步骤12,将所获取到的随机数分别与对应的所述第一寄存器的值进行第一运算,并将第一运算后的结果作为第1轮迭代运算中所述寄存器的起始值A′0,B′0,C′0,D′0,E′0,F′0,G′0,H′0

以所述第一寄存器A,B,C,D,E,F,G,H的初始值分别为A0,B0,C0,D0,E0,F0,G0,H0为例,将所获取到的随机数分别与对应的第一寄存器的初始值 进行第一运算,得到第1轮迭代运算中所述第一寄存器的起始值A′0,B′0,C′0,D′0,E′0,F′0,G′0,H′0。此时所述随机数分别为第1轮迭代运算中对应的第一寄存器的起始值的掩码。

在具体实施中,所述第一运算为异或运算或算术加运算。当所述第一运算为异或运算时,所获取的随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7分别为第1轮迭代运算中所述第一寄存器的起始值A′0,B′0,C′0,D′0,E′0,F′0,G′0,H′0的布尔掩码。当所述第一运算为算术运算时,所获取的随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7分别为第1轮迭代运算中所述第一寄存器的起始值A′0,B′0,C′0,D′0,E′0,F′0,G′0,H′0的算术掩码。

例如,第一寄存器A的起始值r0,0为A′0的布尔掩码。第一寄存器B的起始值r0,1为B′0的布尔掩码。第一寄存器C的起始值r0,2为C′0的布尔掩码。第一寄存器D的起始值r0,3为D′0的布尔掩码。第一寄存器E的起始值r0,4为E′0的布尔掩码。第一寄存器F的起始值r0,5为F′0的布尔掩码。第一寄存器G的起始值r0,6为G′0的布尔掩码。第一寄存器H的起始值r0,7为H′0的布尔掩码。

步骤13,将所述压缩函数中的所有运算的输入进行掩码转换。

由于所述压缩函数中既包括布尔运算,又包括算术加运算。其中,所述布尔运算包括异或运算、循环移位运算、与运算、或运算及非运算中的一种,所述算术加运算为模232算术加运算。因此,在将所述压缩函数中的所有运算的输入进行掩码转换时,既包括对所述压缩函数中布尔运算的输入进行掩码转换,又包括对所述压缩函数中算术加运算的输入进行掩码转换。

在具体实施中,对所述压缩函数中布尔运算进行掩码转换,即将所述压缩函数中的布尔运算的输入转换为带布尔掩码的输入。所述对所述压缩函数中算术加运算进行掩码转换,即所述压缩函数中的算术加运算的输入转换为带算术掩码的输入。

需要说明的是,在对所述压缩函数中的所有运算的输入进行掩码转换时,可以根据在迭代运算前获取到的随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7进行掩码转换,也可以在进行相应的掩码转换之前重新获取随机数,并根据重新获取到的随机数进行掩码转换。

当重新获取随机数并根据重新获取到的随机数进行掩码转换时,可以在所述压缩函数中的布尔运算的输入转换为带布尔掩码的输入之前,重新获取并将随机数作为所述压缩函数中布尔运算的输入的布尔掩码。或者,可以在将所述压缩函数中的算术加运算的输入转换为带算术掩码的输入之前,获取并将随机数作为所述压缩函数中算术加运算的输入的算术掩码。或者,可以在所述压缩函数中的布尔运算的输入转换为带布尔掩码的输入之前,以及在将所述压缩函数中的算术加运算的输入转换为带算术掩码的输入之前,均重新获取随机数,并将所获取的随机数作为所述布尔运算的输入的布尔掩码,或者作为算术加运算的输入的算术掩码。

需要说明的是,由于所述压缩函数包括多次布尔运算操作,在具体实施中,可以在每次布尔运算操作之前均重新获取随机数,也可以在部分布尔运算操作之前重新获取随机数。同样的,所述压缩函数包括多次算术加运算操作,在具体实施中,可以在每次算术加运算操作之前均重新获取随机数,也可以在部分算术加运算操作之前重新获取随机数。

将所述压缩函数中的所有运算的输入进行掩码转换,可以进一步防止消息m进行处理的过程中出现真实的中间值,提高所述密码模块的安全性。

步骤14,计算前M轮迭代运算的每一轮迭代运算中各个第一寄存器的值及对应的掩码。

在具体实施中,根据所述第一寄存器的起始值及对应的掩码调用SM3算法,可以获得本轮第一寄存器的值及对应的掩码。将本轮第一寄存器的值及对应的掩码,分别作为下一轮迭代运算中各个第一寄存器的起始值及对应的掩码。

在具体实施中,1≤M≤64,即可以分别计算64轮迭代运算中各个第一寄存器的值及对应的掩码。需要说明的是,所述M的取值与所述密码模块密钥的 长度相关。

例如,当所述密码模块的密钥长度为128bit时,攻击者通过获取前4轮迭代运算中的中间值,即可分析出所述密码模块的密钥,因此,M的值可以为4,即计算第0至3轮中每轮迭代运算中各个第一寄存器的值及对应的掩码,防止攻击者通过获取前4轮迭代运算中的中间值对所述密码模块进行攻击。当所述密码模块的密钥长度为256bit时,攻击者通过获取前16轮迭代运算中的中间值,即可分析出所述密码模块的密钥,因此,M的值可以为16,即计算第0至15轮中每轮迭代运算中各个第一寄存器的值及对应的掩码,此时即可达到防止攻击者通过获取中间值对所述密码模块进行攻击的目的。

需要说明的是,在具体计算过程中,每一轮迭代运算可能包括多个运算操作,每个运算操作的结果都存在对应的掩码。也就是说,获得各个第一寄存器的值的过程,与获得各个第一寄存器的布尔掩码的过程是同步进行的。

步骤15,将第M轮迭代运算获得的各个第一寄存器的值分别与对应的掩码进行第一运算,并将第一运算后的结果作为第M+1轮迭代运算中各个寄存器的起始值。

在具体实施中,若所述第1轮迭代运算中所述寄存器的起始值A′0,B′0,C′0,D′0,E′0,F′0,G′0,H′0是对所获取到的随机数分别与对应的所述第一寄存器的值进行异或运算得到的,则将第M轮迭代运算获得的各个第一寄存器的值分别与对应的掩码进行异或运算,即可获得第第M+1轮迭代运算中各个寄存器的起始值。若所述第1轮迭代运算中所述寄存器的起始值A′0,B′0,C′0,D′0,E′0,F′0,G′0,H′0是对所获取到的随机数分别与对应的所述第一寄存器的值进行算术加运算得到的,则将第M轮迭代运算获得的各个第一寄存器的值分别与对应的掩码进行算术加运算,即可获得第M+1轮迭代运算中各个寄存器的起始值。

以所述第一运算为异或运算为例,当所述M的值为64时,可以在第64轮迭代运算结束后,将第64轮迭代运算获得的各个第一寄存器的值分别与对应的掩码进行异或运算,异或运算后的结果为各个所述第一寄存器的值。当所述M<64时,将第M轮迭代运算获得的各个第一寄存器的值分别与对应的掩码进行异或运算,异或运算后的结果为第M+1轮迭代运算中各个第一寄存器的起始 值,所述密码模块继续调用SM3算法对所获得的第M+1轮迭代运算中各个第一寄存器的起始值进行处理,直至第64轮迭代运算完毕。

由上述内容可知,本发明实施例中基于SM3算法的密码模块的防攻击方法,通过获取随机数,并将所获取的随机数分别与对应的第一寄存器的值进行第一运算,以及通过将所述压缩函数中的所有运算的输入进行掩码转换,可以有效避免所述密码模块在调用SM3密码算法进行迭代运算的过程中出现真实的中间值,因此可以防止攻击者通过侧信道能量分析方法分析所述中间值,也就可以防止由此而导致的所述密码模块密钥的泄露,提高所述密码模块的安全性。

下面结合SM3密码算法的具体过程以及图2和图3,以所述第一运算为异或运算为例,对上述基于SM3算法的密码模块的防攻击方法进行详细说明:

所述密码模块在接收到输入的消息m后,首先调用SM3密码算法将所述消息组中的每条消息进行填充,再对填充后的消息进行函数压缩。

1、消息填充

以消息m为例,消息m的长度为l比特。首先将比特“1”添加到消息m的末尾,再添加k个“0”,其中k是满足l+1+k≡448mod 512的最小的非负整数。然后再添加一个64位的比特串,所述比特串是长度l的二进制数据,由此获得填充后的消息m′。消息m′的比特长度为512的倍数,将填充后的消息m′按512比特进行分组:

m′=B(0)B(1)…B(i)…B(n-1),其中,n=(l+k+65)/512

2、函数压缩

在具体实施中,所述函数压缩过程可以包括对分组后的消息进行消息扩展的过程,以及对经消息扩展后的数据进行函数压缩的过程,下面对上述过程进行详细说明:

2.1、消息扩展

以对消息m填充后的消息m′中的消息分组B(i)进行为例,依次执行以下步骤,以将消息分组B(i)扩展生成132个字W0,W1,…,Wp,…,W67,W′0,W′0,… ,W′63

a)将消息分组B(i)划分为16个字W0,W1,…,W15

b)对于p从16至63,依次进行如下运算:

c)对于p从0至63之间的每一个值,依次进行如下运算:

其中置换函数式中R的单位为字。

2.2、函数压缩

令A,B,C,D,E,F,G,H为字寄存器,A0,B0,C0,D0,E0,F0,G0,H0分别为所述寄存器的初始状态值,SS1j,SS2j,第一变量TT1j以及第二变量TT2j均为第j轮迭代运算中计算的中间变量,压缩函数V(i+1)=CF(V(i),B(i)),0≤i≤n-1,其中V(0)为已知的256比特初始值IV。计算过程描述如下:

ABCDEFGH←V(i)

对于j从0至63之间的每一个值,依次进行式(3)至(14)的运算:

SS1j←((Aj<<<12)+Ej+(Tj<<<j))<<<7 (3)

TT1j←FFj(Aj,Bj,Cj)+Dj+SS2j+W′j (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(i+1)

其中,迭代中使用的常数与函数如下:

常量

布尔函数:

置换函数

式(15)、(16)及(17)中R,Y,Z的单位均为字。

3、杂凑值

ABCDEFGH←V(n)

输出的256比特的杂凑值:y=ABCDEFGH。

下面以所述密码模块调用SM3算法对消息m的第i个消息分组B(i)进行函数压缩的过程为例,对本发明实施例中基于SM3算法的密码模块的防攻击方法进行详细说明:

由上述内容可知,在消息扩展阶段,将B(i)扩展生成132个字W0,W1,,Wp,…,W67,W′0,W′1,,W′63用于压缩函数CF。如图2所示,在压 缩函数CF的迭代运算开始之前,先用V(i)初始化8个第一寄存器A,B,C,D,E,F,G,H记这8个第一寄存器中存储的值为分别A0,B0,C0,D0,E0,F0,G0,H0。接着,读取8个32比特随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7并将其存储在第二寄存器中。然后将8个第一寄存器的值A0,B0,C0,D0,E0,F0,G0,H0与所获取到的8个随机数对应进行异或运算,异或运算后的结果为A′0,B′0,C′0,D′0,E′0,F′0,G′0,H′0。将异或后运算的数据分别存入8个第一寄存器A,B,C,D,E,F,G,H中,并作为第1轮迭代运算中各个第一寄存器的起始值。

所述密码模块可以按照如图2所示的流程图对B(i)执行第1轮迭代运算,并同时计算对应的布尔掩码,其中,图2中左侧部分为计算各个第一寄存器的值的过程,右侧部分为计算对应的布尔掩码的过程,将tran1表示为从布尔掩码转换到算术掩码;tran2表示从算术掩码转换到布尔掩码。具体过程如下:

步骤1、中间变量SS1的值为:SS1′0=tran2(tran1(A′0<<<12)+tran1(E′0)+T0)<<<7,

它的布尔掩码为:maskSS1=((r0,0<<<12)+r0,4)<<<7。

步骤2、中间变量SS2的值为:

它的布尔掩码为:

步骤3、中间变量TT1的值为:

它的布尔掩码为:

步骤4、中间变量TT2的值为

记:

步骤5、将数据C′0存入字寄存器D中。

步骤6、B′0经过循环移位后得到B′0<<<9,将该数据存入字寄存器C中。

步骤7、将数据A′0存入字寄存器B中。

步骤8、将中间变量TT1的值TT1′0存入字寄存器A中。

步骤9、将数据G′0存入字寄存器H中。

步骤10、F′0经过循环移位后得到F′0<<<19,将该数据存入字寄存器G中。

步骤11、将数据E′0存入字寄存器F中。

步骤12、将中间变量TT2的值TT2′0存入字寄存器E中。

所获得的第二寄存器的值分别如下:r1,0=maskTT1,r1,1=r0,0,r1,2=r0,1<<<9,r1,3=r0,2,r1,4=P0(maskTT2),r1,5=r0,4,r1,6=r0,5<<<19,r1,7=r0,6

此时,8个第一寄存器A,B,C,D,E,F,G,H的值分别为A′1,B′1,C′1,D′1,E′1,F′1,G′1,H′1,它们的布尔掩码记分别为r1,0,r1,1,r1,2,r1,3,r1,4,r1,5,r1,6,r1,7

所述密码模块可以根据如图3所示的流程图对B(i)执行第j+1次迭代运算,1≤j≤15,并同时计算对应的布尔掩码。对B(i)执行第j+1次迭代运算的具体说明如下:

步骤1、中间变量SS1的值为:SS1′j=tran2(tran1(A′j<<<12)+tran1(E′j)+(Tj<<<j))<<<7,

它的布尔掩码为:maskSS1=((rj,0<<<12)+rj,4)<<<7。

步骤2、中间变量SS2的值为:

它的布尔掩码为:

步骤3、中间变量TT1的值为:

它的布尔掩码为:

步骤4、中间变量TT2的值为

记:

步骤5、将字寄存器C中的数据C′j存入字寄存器D中。

步骤6、B′j经过循环移位后得到B′j<<<9,将该数据存入字寄存器C中。

步骤7、将数据A′j存入字寄存器B中。

步骤8、将中间变量TT1的值TT1j存入字寄存器A中。

步骤9、将数据G′j存入字寄存器H中。

步骤10、F′j经过循环移位后得到F′j<<<19,将该数据存入字寄存器G中。

步骤11、将数据E′j存入字寄存器F中。

步骤12、将中间变量TT2的值TT2′j存入字寄存器E中。

所获得的第二寄存器的值分别如下:

rj+1,0=maskTT1,rj+1,1=rj,0,rj+1,2=rj,1<<<9,rj+1,3=rj,2,rj+1,4=P0(maskTT2),rj+1,5=rj,4,rj+1,6=rj,5<<<19,rj+1,7=rj,6

此时,第j+1次迭代运算后各个第一寄存器的值分别为:A′j+1,B′j+1,C′j+1,D′j+1,E′j+1,F′j+1,G′j+1,H′j+1,它们的布尔掩码分别为rj+1,0,rj+1,1,rj+1,2,rj+1,3,rj+1,4,rj+1,5,rj+1,6,rj+1,7

所述密码模块根据上述内容对所述消息分组B(i)执行第j轮迭代运算后,获得各个第一寄存器的结果为A′j,B′j,C′j,D′j,E′j,F′j,G′j,H′j,对应的布尔掩码为rj,0,rj,1,rj,2,rj,3,rj,4,rj,5,rj,6,rj,7。对于第j+1轮迭代运算,则可以在执行第j+1 轮迭代运算前,可以先将所获得第一寄存器的值A′j,B′j,C′j,D′j,E′j,F′j,G′j,H′j分别与对应的布尔掩码rj,0,rj,1,rj,2,rj,3,rj,4,rj,5,rj,6,rj,7进行异或,异或后的结果Aj,Bj,Cj,Dj,Ej,Fj,Gj,Hj分别作为各个所述第一寄存器在第j+1轮迭代运算中的起始值。

需要说明的是,由于在SM3算法的函数压缩过程中,布尔函数在0≤j≤15时与16≤j≤63时的表达式不同,因此,各个中间变量在0≤j≤15时与16≤j≤63时对应的掩码值不同。可以理解的是,虽然本发明实施例仅给出了0≤j≤15的迭代运算过程,但本领域技术人员可以参考上述迭代运算过程获得16≤j≤63的迭代运算过程。

需要说明的是,在本发明的实施中,所述第M轮迭代运算可以为上述的第j轮运算,也可以为上述的第j+1轮运算,还可以为第j+2轮运算等,只要所述M的取值小于等于64即可。

当所述M的值64时,可以在第64轮迭代运算结束后,将第64轮迭代运算获得的各个第一寄存器的值分别与对应的掩码进行异或运算,异或运算后的结果为各个所述第一寄存器的值。

当所述M<64时,将第M轮迭代运算获得的各个第一寄存器的值分别与对应的掩码进行异或运算,异或运算后的结果为第M+1轮迭代运算中各个第一寄存器的起始值,所述密码模块继续调用SM3算法对所获得的第M+1轮迭代运算中各个第一寄存器的起始值进行处理,直至第64轮迭代运算完毕。

在具体实施中,可以采用多种方法实现从布尔掩码到算术掩码的转换。例如,可以采用算法1中的算法实现从布尔掩码到算术掩码的转换。下面对算法1进行详细说明:

当输入为x1′,对应的布尔掩码为rx1时,可以获取随机数C1,并依次执行以下步骤:

A1=A1-B1;

A1=A1+C1;

其中,C1=0或C1=-1,A1即为输入x1′经算法1后的输出,对应的算术掩码为rx

在具体实施中,可以采用多种方法实现从算术掩码到布尔掩码的转换。例如,可以采用算法2中的算法实现从算术掩码到布尔掩码的转换。下面对算法2进行详细说明:

当输入为A2,对应的算术掩码为rx2时,可以获取随机数C2,并依次执行以下步骤:

D2=D2+B2;

D2=D2-C2;

其中,C2=0或C2=-1,D2即为输入A2经算法2后的输出,对应的布尔掩码为rx2

由上述内容可知,本发明实施例中基于SM3算法的密码模块的防攻击方法,通过获取随机数,并将所述随机数与对应的第一寄存器的初始值进行异或,将得到的第一运算结果作为输入。并且,在对所述第一运算结果进行处理过程中,将所述压缩函数中的所有运算的输入进行掩码转换,使得所述密码模块在调用SM3算法对消息m处理的过程中泄漏的侧信道信息与真实的中间值无关,从而可以防止攻击者通过侧信道能量分析方法获取所述密码模块的密钥的目的,因此可以有效提供所述密码模块的安全性。

为了使本领域技术人员更好地理解和实现本发明,以下对上述基于SM3算法的密码模块的防攻击方法对应的装置进行详细描述。

如图4所示,本发明实施例提供了一种基于SM3算法的密码模块的防攻击装置。所述密码模块包括第一寄存器A,B,C,D,E,F,G,H。当接收到消息m后,所述密码模块首先对消息m进行扩展后得到消息m′= B(0)B(1)…B(i)…B(n-1)(i)为消息m′的第i个消息分组,i和n为整数,0≤i≤n-1。接着,所述密码模块对消息m′的每个消息分组进行函数压缩,每个函数压缩过程包括从第0轮至第63轮的迭代运算。

在具体实施中,所述装置可以包括:获取单元41,第一运算单元42,转换单元43,第二运算单元44及第三运算单元45。其中:

所述获取单元41适于在所述密码模块调用SM3算法的压缩函数对消息m′的第i个消息分组B(i)进行迭代运算以前,获取分别与所述第一寄存器A,B,C,D,E,F,G,H对应的随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7,并分别存储在第二寄存器中。

所述第一运算单元42适于将所获取到的随机数分别与对应的所述第一寄存器的值进行第一运算,并将第一运算后的结果作为第1轮迭代运算中所述寄存器的起始值A′0,B0,C′0,D′0,E′0,F′0,G′0,H′0

所述转换单元43适于在所述密码模块调用SM3算法的压缩函数对所述消息分组B(i)进行迭代运算时,所述压缩函数中的所有运算的输入进行掩码转换。

所述第二运算单元44适于计算前M轮迭代运算的每一轮迭代运算中各个寄存器的值及对应的掩码。

所述第三运算单元45适于将第M轮迭代运算获得的各个寄存器的值分别与对应的掩码进行第一运算,并将第一运算后的结果作为第M+1轮迭代运算中各个寄存器的起始值,其中1≤M≤64。

其中,所述第一运算包括异或运算或算术加运算。所述布尔运算可以包括:异或运算、循环移位运算、与运算、或运算及非运算中的一种。所述算术加运算可以包括:模232算术加运算。所述随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7分别与对应的各个第一寄存器的值的长度相同。例如,各个第一寄存器的值的长度为32bit,则所获取的各个随机数的长度对应为32bit。

在具体实施中,所述M的取值与所述密码模块密钥的长度相关。例如,当所述密码模块为调用SM3算法生成动态口令的密码模块时,其密钥长度可 能为128bit,也可能为256bit。当所述密钥长度为128bit时,此时M的值可以为4,即仅计算第0至3轮中每轮迭代运算中各个第一寄存器的值及对应的掩码。当所述密钥长度可能为256bit时,此时M的值可以为16,即仅计算第0至15轮中每轮迭代运算中各个第一寄存器的值及对应的掩码。

在具体实施中,如图5所示,所述转换单元50可以包括:第一转换子单元501及第二转换子单元502。其中,所述第一转换子单元501适于将所述压缩函数中的布尔运算的输入转换为带布尔掩码的输入。所述第二转换子单元502适于将所述压缩函数中的算术加运算的输入转换为带算术掩码的输入。

在具体实施中,所述转换单元50还可以包括第一获取子单元503,或者第二获取子单元504,或者既包括第一获取子单元503,又包括第二获取子单元504。其中,所述第一获取子单元503适于在将所述压缩函数中的布尔运算的输入转换为带布尔掩码的输入之前,获取并将随机数作为所述压缩函数中布尔运算的输入的布尔掩码。所述第二获取子单元504适于在将所述压缩函数中的算术加运算的输入转换为带算术掩码的输入之前,获取并将随机数作为所述压缩函数中算术加运算的输入的算术掩码。

由上述内容可知,本发明实施例中基于SM3算法的密码模块的防攻击装置,通过获取单元41来获取随机数,并由第一运算单元42将所述随机数与对应的第一寄存器的初始值进行第一运算,来引入掩码,再通过转换单元43将所述压缩函数中的所有运算的输入进行掩码转换,使得所述密码模块在调用SM3算法对消息m处理的过程中泄漏的侧信道信息与真实的中间值无关,从而可以防止攻击者通过侧信道能量分析方法获取所述密码模块的密钥的目的,因此可以有效提供所述密码模块的安全性。

需要说明的是,当所述M的值为64时,可以在第64轮迭代运算结束后,将第64轮迭代运算获得的各个第一寄存器的值分别与对应的掩码进行异或运算,异或运算后的结果为各个所述第一寄存器的值。

当所述M<64时,将第M轮迭代运算获得的各个第一寄存器的值分别与对应的掩码进行异或运算,异或运算后的结果为第M+1轮迭代运算中各个第一寄存器的起始值,所述密码模块继续调用SM3算法对所获得的第M+1轮迭代运算中各个第一寄存器的起始值进行处理,直至第64轮迭代运算完毕。

在具体实施中,所述随机数r0,0,r0,1,r0,2,r0,3,r0,4,r0,5,r0,6,r0,7分别与对应的各个第一寄存器的值的长度相同。例如,各个第一寄存器的值的长度为32bit,则所获取的各个随机数的长度对应为32bit。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。

虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。

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