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

文档序号:9202519阅读:来源:国知局
操作的流程图;
[00巧]图3是根据本发明一个实施例的标量乘操作的流程图;
[0056] 图4是根据本发明一个实施例的标量乘操作的流程图;
[0057] 图5是根据本发明一个实施例的生成数字签名(r,S)的流程图。
【具体实施方式】
[0058]W下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用 技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据W实施。需要说明 的是,只要不构成冲突,本发明中的各个实施例W及各实施例中的各个特征可W相互结合, 所形成的技术方案均在本发明的保护范围之内。
[005引同时,在W下说明中,出于解释的目的而阐述了许多具体细节,W提供对本发明实 施例的彻底理解。然而,对本领域的技术人员来说显而易见的是,本发明可W不用该里的具 体细节或者所描述的特定方式来实施。
[0060] 另外,在附图的流程图示出的步骤可W在诸如一组计算机可执行指令的计算机系 统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可不同于此处 的顺序执行所示出或描述的步骤。
[0061] 公钥密码算法(例如SM2算法)中通常包括数字签名生成、数字签名验证、公钥加 密、公钥解密W及密钥交换操作等过程,而上述操作过程中通常会出现标量乘操作,标量乘 由多次倍点和点加操作组成。
[0062] 侧信道原子算法的原理是将密码算法操作的中间流程(例如点加操作和倍点操 作)表示为原子结构,使得算法执行过程中循环处理相同的指令原子块,反应于功耗曲线 上便呈现相同变化规律,从而成功抵抗SPA。从原子算法被首次提出W来,不同结构的原子 算法被相继提出。然而,现有的原子结构均较长,需添加大量冗余操作。
[0063] 针对现有技术中存在的上述问题,本实施例提供了一种新的密钥抗功耗攻击的方 法,在该方法中,利用预设原子块来进行标量乘操作,其中,预设原子块包括模乘操作、加法 操作和减法操作。优选地,本实施例所提供的各个预设原子块中均包含一次模乘操作、一次 加法操作和/或一次减法操作。
[0064] 如图2所示,传统标量乘运算过程中根据bi的不同化i表示整数b所对应的二进 审IJ数的第i位的值)来执行不同的指令。对于整数b所对应的二进制数,判断当前位bi是 否为0前,首先执行2倍点操作(即执行P。^ 2P。,也就是将2?。赋值给P。),随后判断当前 位bi是否为0。
[0065] 如果当前位bi为0,则直接将整数b所对应的二进制数右移一位(即执行 i^i-1),并继续执行下一循环。如果当前位61不为0(即当前位b1为1),则执行点加操 作后将整数b所对应的二进制数右移一位(即执行i^i-1),随后继续执行下一循环。
[0066] 由此可W看出,传统标量乘方法根据判断bi决定是否执行点加操作,而倍点与点 加消耗的功耗不同,攻击者就可W利用该一特性来对密钥进行简单功耗攻击SPA,通过观察 功耗判断倍点点加顺序,从而推测出用户的私钥。
[0067] 原子算法则将倍点与点加均表示为相同形式的原子块,使得算法执行过程中循环 处理相同的指令原子块,反应于功耗曲线上便呈现相同变化规律,从而成功抵抗SPA。
[0068] 目前已有多种不同结构的原子算法被相继提出,经统计发现其原子结构均较长, 需添加大量冗余运算。本实施例所提供的密钥抗功耗攻击的方法采用统一优化的预设原子 块来进行倍点操作和点加操作。
[0069] 本实施例中,引入变量a来控制原子块执行过程中变量i的变化。由于点加与倍点 操作所执行的预设原子块次数不同,并且执行点加操作还是执行倍点操作是由bi决定的。 因此,本实施例中,利用bi确定变量a。具体地,当变量a等于1时,i右移一位,并跳入下 一次倍点;如果变量a不等于1 (即a等于0)时,仍在点加操作或倍点操作内部执行相应原 子块操作而不跳出。本实施例中,引入变量P来控制选取的寄存器下标矩阵的;;,/)中的行数。 其中,表示寄存器下标矩阵中第P行第q列的元素。
[0070] 具体地,本实施例中,预设原子块r可W表示为:
[0071]
[0072] 其中,u;:4表示表示寄存器下标矩阵中第P行第q列的元素,R表示寄存器。表达 式(1)中,吃;气,;,?马表示将寄存器的值乘W寄存器R,,;,的值后赋给寄存器。
[0073] 图3示出了本实施例中进行标量乘操作的流程图。
[0074] 如图3所示,本实施例中,在进行标量乘操作时,在步骤S301中根据前一循环的变 量a和变量P,计算当前循环的变量P。并在步骤S302中根据根据变量bi和当前循环的变 量P,计算当前循环的变量a。
[0075] 具体地,本实施例中,在进行标量乘操作的过程中,当进行标量乘操作的点P为固 定点时,根据如下表达式计算当前循环的变量P和当前循环的变量a:
[0076]
[007引其中,bi表示整数b所对应的二进制数的第i位的值。
[0079] 本实施例中,变量a的取值为0或1,-1(3表示变量a的值取反。即,当变量a取值 为1时,-la的取值为0 ;当变量a取值为0时,的取值为1。f^ ?(/;> +1)表不将前一 循环的变量a取反后与前一循环的变量P加1后的值进行乘积后赋值给当前循环的变量P。
[0080] 本实施例中,当进行标量乘操作的点P为固定点时,寄存器下标矩阵批;'m)采用了 维度为19X9的矩阵。具体地,该寄存器下标矩阵(<g)可W表示为: o o 1 n 1 A n i\
[0081]
(4)
[0082] 在步骤S303中,根据步骤S301得到的当前循环的变量p和寄存器下表矩阵来执 行预设原子块中的相关操作。在步骤S304中,根据当前循环的变量i和变量a计算下一循 环的变量i。在得到下一循环的变量i后,会在步骤S305中判断所得到的下一循环的变量 i是否大于或等于0。如果步骤S304所得到的变量i大于或等于0,则进入下一循环(即将 下一循环作为当前循环)并返回步骤S301 ;否则跳出循环,并将步骤S304所得到的数据作 为标量乘操作的结果数据。
[0083] 本实施例中,当计算固定点P的b倍点时,将i的初始值设置为m-2 (m表示b转换 为二进制时所包含的位数),将a的初始值设置为1。为了更加清楚的阐述本实施例所提供 的密钥抗功耗攻击方法的原理W及优点,W下W计算固定点P的2倍点为例来进行描述。
[0084] 当计算固定点P的2倍点(即b为2)时,i的初始值为0,将a的初始值设置为 1。该样,按照上述寄存器下标矩阵,计算固定点P的2倍点的过程可W采用表1表示 如下:
[0085] 表 1
[0086]
[0087]
[0088] 在表1中,各个预设原子块中未标明的操作为冗余操作。从表1可W看出, P狂1,Yi,Zi)的2倍点P'狂2,Y2,Z2)可W通过执行8次预设原子块来求得。
[0089] 当进行固定点P狂。Yi,Zi)与点Q狂2,Y2,Z2)的点加操作时,i的初始值为0,将a的 初始值设置为1。该样,按照上述寄存器下标矩阵(<,,,),计算固定点P的2倍点的过程可W 采用表2表示如下:
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1