Page 155 - 《软件学报》2025年第10期
P. 155

4552                                                      软件学报  2025  年第  36  卷第  10  期



                 算法  10. simple-JRF.

                 输入: 一对整数    (k,l) 满足  l = k +1;
                            :
                                     ,
                 输出:  JRF (k,l) (k n ,...,k 0 ) (l n ,...,l 0 ).
                 1.  k = (k n−1 ,...,k 0 ) 2 ;
                 2.  l i = k i −1 (0 ⩽ i ⩽ n−1);
                       ,
                 3.  k n = 0 l n = 1;
                               ,
                 4. return  (k n ,...,k 0 ) (l n ,...,l 0 ).
                                                            (      )
                                         :
                    假设   k = 53, 有   JRF (53,54) 53 = (0110101) 和  54 = 1001010 , 其中  1 = −1. 因此, 基于算法  10, 可以很容易地
                 得到  k 和  k +1 的  JRF  表示, 这将为构造出一种一致的点加-倍点标量乘算法提供很大的便利.
                    随机掩码是保证标量乘法不受           DPA  影响的有效方法      [21]  , 考虑用  P+R 代替了计算中的  P, 保证在计算过程中
                              P, 考虑如下转换:
                 随机遮蔽了基点

                                                 [k]P = [k](P+R)−[k +1]R+R                            (6)
                    构造标量乘算法如算法         11.
                 算法  11. 基于  JRF  的抗  DPA  标量乘算法.

                 输入: 标量  k, 椭圆曲线上一基点      P;
                 输出:  [k]P.
                                         ,
                                :
                 1. 计算  JRF (k,k +1) (k n ,...,k 0 ) (l n ,...,l 0 ); /* 算法  10 */
                 2.  R ← RandomPoint();
                       ,
                                                   ,
                 3.  T = O T (1) = −R T (2) = P+R T (−1) = R T (−2) = −P−R;
                                          ,
                                ,
                 4. for  i = n down to 0 do
                 5.   T = [2]T ;
                            ,
                 6.   c ← 2k i +l i T = T +T (c);
                 7. end for
                 8. return  T +T (−1).
                    仍旧以   k = 53 为例, 算法  11  的计算过程如下:

                                   i   6    5      4      3        2       1        0
                                  c    1    2      2      −1       2       −1       2
                                 T (c)  −R  P+R  P+R      R      P+R       R      P+R
                                  R   −R  P−R [3]P−R [6]P−R [13]P−R     [26]P−R  [53]P−R

                    最终返回    R+T (−1) = [53]P−R+R = [53]P, 与预期结果一致.
                  3.2   JRF  标量乘算法分析
                    (1) 安全性分析
                    算法  11  中, 由于  k 和  k +1 满足一奇一偶的条件, 通过    simple-JRF  算法构造了它们的联合正则表示, 由于         k i  和
                                 ±1 而另一方等于                     ,                 [k]P 的过程中的每次循环都必
                 l i  满足其中一方等于                 0, 因此  c = 2k i +l i , 0 T (c) , O, 这样在得到
                 然会执行一次倍点运算和点加运算, 能够抵御               SPA  攻击; 由于引入了随机掩码       R, 预计算点在每次执行期间都会
                 发生变化, 因此能在一定程度上抵御           DPA  及其变种   RPA  和  ZPA.
                    (2) 计算开销与存储开销分析
                    算法  11  基于  JRF, 只需预计算  4  个点便实现了抗    DPA  攻击的安全标量乘算法, 但是由于          JRF  的特性影响, 每
                 次循环都需要一次点加运算和倍点运算, 计算开销为                 nD+nA, 因此, 更适合密码卡这种存储资源受限的应用场景.
   150   151   152   153   154   155   156   157   158   159   160