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

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



                 3. for  i = c−1 down to 0 do
                 4.   Q = [2]Q;
                 5.  if  k w [i] , 0 then
                 6.    Q = Q+ P [i]; /*其中  P [i] = [k w [i]]P+R  为预计算的点*/
                                                    ′
                                        ′
                              ′
                 7.  end if
                 8. end for
                 9. return  Q−R.
                  1.2   联合正则形式算法
                                                   l
                                                k
                    设   (k n−1 ,...,k 0 ) 和  (l n−1 ,...,l 0 ) 分别为   和   的有符号二进制表示, 满足  k +l ≡ 1(mod2), 并且如果对于任意的  i,
                 k i  和   l i  均满足   (k i ,l i ) = (0,±1) 或  (k i ,l i ) = (±1,0), 则  (k n−1 ,...,k 0 ) 和  (l n−1 ,...,l 0 ) 称为联合正则形式  (JRF) [17] . JRF  的生成
                 算法如算法    5.
                 算法  5. JRF  生成算法  [17] .

                 输入: 一对整数    (k,l) 满足  k +l ≡ 1(mod2);
                            :
                 输出:  JRF (k,l) (k n−1 ,...,k 0 ) (l n−1 ,...,l 0 ).
                                      ,
                       ,
                            ,
                 1.  i ← 0 s ← k t ← l;
                 2. while  s > 0 or  k > 0 do
                              ,
                 3.   k i = s mod 2 l i = t mod 2;
                 4.  if  (k i ,l i ) = (0,0) then
                                                            ,
                                             ,
                            ,
                 5.    k i ← k i−1 k i−1 ← −k i−1 l i ← l i−1 l i−1 ← −l i−1 s ← s/2 t ← t/2;
                                                      ,
                                      ,
                 6.  else if  (k i ,l i ) = (1,1) then
                                         ,
                               ,
                                                  ,
                                                           ,
                                                                         ,
                 7.     k i ← 1−k i−1 k i−1 ← −k i−1 l i ← 1−l i−1 l i−1 ← −l i−1 s ← (s−2k i +1)/2 t ← (t −2l i +1)/2;
                 8.  else
                                ,
                 9.    s ← (s−k i )/2 t ← (t −l i )/2;
                 10.  end if
                 11.   i ← i+1;
                 12. end while
                 13.  n ← i;
                 14. return  (k n−1 ,...,k 0 ) (l n−1 ,...,l 0 ).
                                  ,
                    基于  JRF  生成算法的多标量乘算法如算法          6.
                 算法  6. JRF  多标量乘算法  [17] .
                                             :
                                     ,
                                                       ,
                 输入: 椭圆曲线上两点      P,Q JRF (k,l) (k n−1 , ...,k 0 ) (l n−1 , ...,l 0 );
                 输出:  [k]P+[l]Q.
                 1.  R ← O;
                 2. for  i = n−1 down to 0 do
                 3.   R = [2]R;
                 4.  if  k i , 0 then
                      R = R+[k i ]P;
                 5.
   144   145   146   147   148   149   150   151   152   153   154