椭圆曲线点乘算法详解
1. 点乘基础
在椭圆曲线运算中,点乘是一个核心操作。有一种点乘方法会预先计算 $v(2^w - 1)$ 个点 $P[v’][u]$,其中 $v’ \in [0, v - 1]$ 且 $u \in [1, 2^w - 1]$。基于此方法的点乘算法,预计大约需要 $e - 1 \approx \frac{t}{wv} - 1$ 次点加倍和 $\frac{(\frac{t}{w} - 1)2^{w - 1}}{2^w}$ 次点加法。
1.1 多点乘法
为了加速 $kP + lQ$ 的计算,有一种方法是同时多点乘法(算法 3.48),也被称为 Shamir 技巧。若 $k$ 和 $l$ 是 $t$ 位的数,它们的二进制表示会被写成一个 $2×t$ 的矩阵,即指数数组。给定宽度 $w$,会计算 $0 \leq i, j < 2^w$ 时的 $iP + jQ$ 值。在 $\lceil t/w \rceil$ 步的每一步中,累加器会进行 $w$ 次加倍操作,并根据指数数组上一个 $2×w$ 窗口的内容从 $iP + jQ$ 值表中选取一个值进行加法操作。
算法 3.48:同时多点乘法
- 输入 :窗口宽度 $w$,$k = (k_{t - 1}, \ldots, k_0) 2$,$l = (l {t - 1}, \ldots, l_0)_2$,$P, Q \in E(F_q)$。
- 输出 :$kP + lQ$。
1. 计算所有 $i, j \in [0, 2^w - 1]$ 时的