一种密钥抗功耗攻击的方法_3

文档序号:9202519阅读:来源:国知局
[0090]表2
[0091]
[0092]
[0093] 在表2中,各个预设原子块中未标明的操作为冗余操作。从表2可W看出,点 P〇(i,Yi,Zi)与点Q的点加操作可W通过执行11次预设原子块来求得。
[0094] 由此可见,在本实施例所提供的方法中,在进行标量乘操作的过程中,无论是进行 点加操作还是进行倍点操作,其过程均是按照寄存器下标矩阵循环执行预设原子块中的相 应操作。该样不仅使得密钥相关操作过程能够有效抵抗功耗攻击,还缩短了传统原子块方 法中的原子块长度并减少了原子块的循环次数。
[0095] 本实施例所提供的预设原子块为模乘-加法-减法(MUkAro-SUB)结构,由于SM2 是基于定制的楠圆曲线进行的,因此利用该预设原子块能够简化倍点和点加中间的计算流 程。同时,利用该预设原子块还能够实现中间过程的顺序变换即分组,此外,还能够添加伪 操作,从而进一步调高密码的抗功耗攻击性。
[0096] 本实施例中,在进行标量乘操作的过程中,当进行标量乘操作的点P为非固定点 时,根据如下表达式计算当前循环的变量P和当前循环的变量a:
[0097]
[0099]此时,寄存器下标矩阵采用了维度为24X9的矩阵。具体地,该寄存器下标 矩阵为:
[0100] (7)
[0101]当点P为非固定点时,进行倍点操作时需要执行8次原子块操作,进行点加时需要 执行16次原子块操作。由于16和8均为8的倍数,因此在本发明的一个实施例中,还可W 采用在循环内部嵌套一个周期为8的for循环的方式来进行标量乘操作。此时,将for循 环作为新的原子块r',通过变量P和a来控制i的变化。当bi为0时执行一次r' ;当bi 为1时执行=次r'。目P,倍点执行一次r',点加执行两次r'。该样,便在与上述方法具 有相同安全性的基础上进一步减少了计算变量P、a和i的次数,也就进一步提高了公钥密 码的相关操作(例如数字签名的生成、数字签名的验证等)的效率。
[0102] 具体地,如图4所示,本实施例中,当进行倍点或点加操作的点P为非固定点时,在 进行倍点和/或点加操作的过程中,首先在步骤S401中根据前一循环的变量a(变量a的 初始值为1)和变量P,计算当前循环的变量P,并在步骤S402中根据变量bi和当前循环的 变量P,计算当前循环的变量a。
[0103] 本实施例中,根据如下表达式计算当前循环的变量k和当前循环的变量a;
[0104]
[0105]
[0106] 随后,在步骤S403中,根据当前循环的变量P和寄存器下标矩阵,执行预设原子块 中的操作。此时,预设原子块表示为:
[0107]
(10)
[010引在步骤S404中,将变量j的取值加1,即j^j+1。随后在步骤S405中判断此时 变量j的取值是否在第一预设范围内。本实施例中,判断变量j的取值是否在第一预设范 围内也就是判断jG[0, 7]是否成立。如果变量j的取值是在第一预设范围内,则返回步 骤S403进行新下一循环;否则在步骤S406中根据当前循环的变量i和变量a计算下一循 环的变量i。
[0109] 本实施例中,根据如下表达式来计算下一循环的变量i;
[0110] i^i-a (11)
[011。 随后在步骤S507中判断下一循环的变量i是否大于或等于0,如果是,则进入下一 循环重复W上过程;否则便可W根据步骤S403中得到的对应寄存器的结果确定出相应的 标量乘结果。
[0112] 从上述描述中可W看出,本发明所提供的密钥抗功耗攻击方法将原子算法概念与 SM2的特殊性相结合,优化了点加操作W及倍点操作等标量乘操作的流程,通过引入相应变 量来控制标量乘的内部循环,把标量乘转换为模乘-加-减为一组的原子块循环。
[0113] 相比已有的原子算法,本发明所提供的方法使得每个原子块操作节省了一次求反 过程,并将寄存器下标矩阵由26X10阶优化为19X9或24X9阶。该样也就大大节省了标 量乘所需要的运算量,不仅保证了密钥的安全性,还提高了SM2算法的运算速度。
[0114] 在现有的SM2签名方法中,生成数字签名的过程中需要根据如下表达式计算计算 S;
[01 巧]S= [ (1+cIa)-1 ?化-r?cIa)]modn (12)
[om] 其中,dA表示用户A的私钥,r表示已知变量,k表示随机数,n表示基点的阶。[0117]从表达式(12)可W看出,在现有的SM2签名算法中,生成数字签名(r,s)中的S 时,需要执行模乘r?dA。而大数模乘将设及大量的中间数据,攻击者也就能够根据已知变 量r反推出与未知变量dA相关的中间数据,然后通过分析功耗与中间数据之间的相关性便 可W确定出私钥dA,此即为差分功耗攻击DPA。
[0118] 该种方法攻击的实质是对乘法器进行攻击,为预防该种攻击,有人提出了一种对 已知变量r进行掩膜的防护措施。具体地,该方法在生成数字签名(r,s)中的S时,先取随 机数rand,随后计算随机数rand在模n下的逆rand'。再计算变量ti=r'randmodn,然 后再根据变量ti计算得到变量12=t1? (1amodn,最后计算t= ?rand'modn=r? (1a mod打 〇
[011引由于rand是随机数,每次掩膜都随机,因此相较于原有的计算方式(即t=r modn),原本确定的变量r被成功掩盖。该样也就使得攻击者无法建立适当的功耗模型来 模拟巧片内的能量消耗,从而抵抗攻击。但该种方法需要额外生成随机数rand,且增加一次 求逆和两次模乘,该在操作时间与资源消耗上需要付出很大代价。
[0120] 该对现有技术中存在的上述问题,本实施例所提供的密钥抗功耗攻击的方法对生 成数字签名(r,s)的过程进行了改进。具体地,如图5所示,本实施例中,在生成数字签名 时,首先在步骤S501中将签名消息M与第一杂凑值Za拼接,形成消息瓦,即有:
[0121]
(13)
[0122] 在步骤S502中,结合密码杂凑函数馬生成变量e,即有;
[0123]
(14)
[0124] 本实施例中,在步骤S502中,还将表达式(14)得到的变量e的数据类型转换为整 型。
[012引在步骤S503中,利用随机数发生器生成随机数k,其中XG[l,n-l]。随后根据随 机数k来确定随机楠圆曲线上基点G的k倍点。本实施例中,利用预设原子块来计算基点 G的k倍点。当然,在本发明的其他实施例中,还可W利用其他合理方式来计算基点G的k 倍点(例如采用现有的倍点计算方法等),本发明不限于此。
[0126] 在步骤S503中,计算得到基点G的k倍点后,还将得到k倍点的数据类型转换为 整型。得到基点G的k倍点后,在步骤S504中,根据变量e和基点G的k倍点,生成数字签 名中的r。
[0127] 具体地,本实施例中,根据如下表达式来生成数字签名中的变量r:
[012引r= (e+Xi)modn (巧)
[0129]其中,Xi表示基点基点G的k倍点的横坐标。
[0130] 本实施例中,生成数字签名中的r后,还在步骤S505中判断r是否等于
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1