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, 因此, 更适合密码卡这种存储资源受限的应用场景.

