基础算法优化——Fast Modular Multiplication

1. 引言

Yuval Domb 2022年论文《Fast Modular Multiplication》

模乘可以说是任何密码系统中计算量最大的算术原语。本文提出了一种高效、硬件友好的算法,据作者所知,该算法优于迄今为止的算法。

标准的modulo-prime multiplication problem in F s \mathbb{F}_s Fs表示为:
r = a ⋅ b m o d    s \begin{equation} r=a\cdot b \mod s \end{equation} r=abmods
其中 a , b , s ∈ F s a,b,s\in\mathbb{F}_s a,b,sFs s s s为素数,并利用标准 Z \mathbb{Z} Z-algebra。
等价为:
a ⋅ b = l ⋅ s + r \begin{equation} a\cdot b = l\cdot s +r \end{equation} ab=ls+r
其中, l ∈ Z l\in \mathbb{Z} lZ,使得 0 ≤ r < s 0\leq r < s 0r<s

本文主要为(1)中计算提供了一种高效、硬件友好的快速计算方法。

将所有变量以 d d d-进制来表示,其中 F s \mathbb{F}_s Fs内的每个元素都以 n n n个digits来表示,有:
n = ⌈ log ⁡ d s ⌉ \begin{equation} n=\left \lceil \log _ds\right \rceil \end{equation} n=logds

接下来,简单地令 d = 2 d=2 d=2,所有元素以二进制来表示。

尽管本文重点关注modulo-prime multiplication,但可将其推广到任意 a m o d    s a\mod s amods运算,其中 a < s 2 aa<s2 s s s可为素数或非素数的任意值。

2. 本文主要贡献

本文主要展现了,如何将:

  • Barrett Reduction算法(具体见Barrett 1987年论文《Implementing the rivest shamir and adleman public key encryption algorithm on a standard digital signal processor》)
  • 与 好的参数选择
  • 以及 简单的bounding技术

结合,用于求取quotient l l l的近似值,近视精度为一个小的constant error,该constant error与 n n n无关(无论 n n n值大小)。

令人惊讶的是,最终的reduction算法与Montgomery的Modular-Multiplication算法(见Montgomery 1985年论文《 Modular multiplication without trial division》)类似,但是本文最终的reduction算法不需要coordinate translation。

本文的bounding技术可用于进一步降低特定感兴趣场景的计算复杂度(知识需要增加constant error),本文不展开。

3. Reduction Scheme

3.1 假设 l l l 为近似已知

假设 l l l 为近似已知,将其近似值表示为 l ^ \hat{l} l^,使得:
l − λ ≤ l ^ ≤ l \begin{equation} l-\lambda \leq \hat{l} \leq l \end{equation} lλl^l
其中 λ = O ( 1 ) \lambda=O(1) λ=O(1)为一个已知的constant。

λ = 0 \lambda=0 λ=0,则显然有:
a b [ 2 n − 1 : 0 ] − l ^ s [ 2 n − 1 : 0 ] = r [ n − 1 : 0 ] \begin{equation} ab[2n-1:0] - \hat{l}s[2n-1:0]=r[n-1:0] \end{equation} ab[2n1:0]l^s[2n1:0]=r[n1:0]
其中[]中括号内的值表示了bit locations和sizes。

注意,当 λ = 0 \lambda=0 λ=0时,可推测余数 r r r最大长度为 n n n bits,使得等式(5)中右侧值的剩余最高有效位(ms (most-significant) bits)必须为 0 0 0

通过简单的bit操作,可以long addition表示为:
基础算法优化——Fast Modular Multiplication_第1张图片
其中,上横杠表示的是bit-inversion运算符,横岗上的 1 1 1表示为初始carry bit。
不过,对上面的long addition表示仔细观察可知,仅需要 a b [ n − 1 : 0 ] ab[n-1:0] ab[n1:0] l ^ s [ n − 1 : 0 ] \hat{l}s[n-1:0] l^s[n1:0] 来完成该计算,从而可节约近一半的计算量。最终的adder为a fixed width adder——即, n + n → n n+n\rightarrow n n+nn。这意味着可忽略 ms bits(最高有效位)的任何溢出。可将其等价为a fixed-width subtractor——即, n − n → n n-n\rightarrow n nnn,可将其结果看成是unsigned integer。

将生成以上乘积的multiplier表示为 n × n → n lsb n\times n\rightarrow n_{\text{lsb}} n×nnlsb,其中 n lsb n_{\text{lsb}} nlsb是指该full product的 n n n个least-significant bits。 a ⋅ b a\cdot b ab l ^ ⋅ s \hat{l}\cdot s l^s都可通过 n × n → n lsb n\times n\rightarrow n_{\text{lsb}} n×nnlsb来生成。
此外,若 s s s为constant, l ^ ⋅ s \hat{l}\cdot s l^s可通过一个constant n × n → n lsb n\times n\rightarrow n_{\text{lsb}} n×nnlsb multiplier来生成。

λ ≠ 0 \lambda\neq 0 λ=0时:
a b − l ^ s = r + λ s \begin{equation} ab-\hat{l}s = r+\lambda s\end{equation} abl^s=r+λs
此时,用于表示等式(5)中右侧值所需的number of bits为:
⌈ log ⁡ 2 ( r + λ s ) ⌉ ≤ n + ⌈ log ⁡ 2 r + λ s s ⌉ ≤ n + ⌈ log ⁡ 2 ( 1 + λ ) ⌉ \begin{equation} \left \lceil \log_2(r+\lambda s) \right \rceil \leq n+\left \lceil \log_2\frac{r+\lambda s}{s} \right \rceil \leq n+\left \lceil \log_2(1+\lambda) \right \rceil \end{equation} log2(r+λs)n+log2sr+λsn+log2(1+λ)
因此,若 λ = 1 \lambda=1 λ=1,则仅需要额外再增加 1 1 1个bit来表示。

3.2 使用Barrett Reduction算法求 l l l的近似值

采用Barrett的modular reduction算法对 l l l求近似值为:
l = ⌊ a b s ⌋ = lim ⁡ k → ∞ a b ⋅ m ( k ) 2 k + n \begin{equation} l=\left \lfloor \frac{ab}{s} \right \rfloor = \lim_{k\rightarrow \infty } \frac{ab\cdot m(k)}{2^{k+n}}\end{equation} l=sab=klim2k+nabm(k)
其中:
m ( k ) = ⌊ 2 k + n s ⌋ < 2 k + 1 \begin{equation} m(k)=\left \lfloor \frac{2^{k+n}}{s} \right \rfloor <2^{k+1} \end{equation} m(k)=s2k+n<2k+1
为a function of the k k k,最多有 k + 1 k+1 k+1 bits,为公式(8)的lower-bound approximator。对于有限的 k k k值,该approximation error为:
e ( k ) ≡ 1 s − m ( k ) 2 k + n < 2 − ( k + n ) \begin{equation} e(k)\equiv \frac{1}{s}-\frac{m(k)}{2^{k+n}} < 2^{-(k+n)}\end{equation} e(k)s12k+nm(k)<2(k+n)
其中,可检查二进制表示的左右项的最大差异来派生出该upper-bound。从而有approximation error on l ( k ) l(k) l(k)为:
e ( l , k ) ≡ a b s − a b ⋅ m ( k ) 2 k + n < 2 2 n ⋅ 2 − ( k + n ) = 2 n − k \begin{equation} e(l,k)\equiv \frac{ab}{s}-\frac{ab\cdot m(k)}{2^{k+n}} < 2^{2n}\cdot 2^{-(k+n)}=2^{n-k}\end{equation} e(l,k)sab2k+nabm(k)<22n2(k+n)=2nk
k ≥ n k\geq n kn,则该approximation error最多为 1 1 1

3.3 参数选择 以及 error bounding

选择 k = n k=n k=n(即 m ( n ) < 2 n + 1 m(n)<2^{n+1} m(n)<2n+1),则对 l l l的近似值为:
l ^ 0 = ⌊ a b m 2 2 n ⌋ \begin{equation} \hat{l}_0=\left \lfloor \frac{abm}{2^{2n}}\right \rfloor \end{equation} l^0=22nabm
e ( l ^ 0 ) < 1 \begin{equation} e(\hat{l}_0)<1 \end{equation} e(l^0)<1
其中multiplication为 n × n × ( n + 1 ) → ( n + 1 ) msb n\times n\times (n+1)\rightarrow (n+1)_{\text{msb}} n×n×(n+1)(n+1)msb,且approximation error遵循(11)。

分两个阶段来实现以上multiplication:

  • 1)首先,假设有 a b [ 2 n − 1 : 0 ] ab[2n-1:0] ab[2n1:0],按如下方式计算multiplication:
    a b m 2 2 n = a b [ 2 n − 1 : n ] ⋅ m 2 n + a b [ n − 1 : 0 ] ⋅ m 2 2 n \begin{equation} \frac{abm}{2^{2n}}=\frac{ab[2n-1:n]\cdot m}{2^{n}}+\frac{ab[n-1:0]\cdot m}{2^{2n}}\end{equation} 22nabm=2nab[2n1:n]m+22nab[n1:0]m
    < a b [ 2 n − 1 : n ] ⋅ m 2 n + 2 \begin{equation} < \frac{ab[2n-1:n]\cdot m}{2^{n}} + 2 \end{equation} <2nab[2n1:n]m+2
    其中最右侧项trivially upper-bounded by 2 2 2
  • 2)从而对 l l l的近似变为:
    l ^ 1 = ⌊ ⌊ a b 2 n ⌋ ⋅ m 2 n ⌋ \begin{equation} \hat{l}_1=\left \lfloor \left \lfloor \frac{ab}{2^n} \right\rfloor \cdot \frac{m}{2^n} \right \rfloor \end{equation} l^1=2nab2nm
    e ( l ^ 1 ) < 3 \begin{equation} e(\hat{l}_1)<3 \end{equation} e(l^1)<3
    其中,最里侧的multiplication为 n × n → n msb n\times n \rightarrow n_{\text{msb}} n×nnmsb,最外侧的constant multiplication为 n × ( n + 1 ) → ( n + 1 ) msb n\times (n+1)\rightarrow (n+1)_{\text{msb}} n×(n+1)(n+1)msb,approximation error由(13)和(15)中的最右侧项 之和 upper-bounded。

注意,由于 m ( n ) m(n) m(n) is typically very close to 2 n 2^n 2n,且 n n n通常很大,无需额外增加bits来表示(17)中的constant error,即 n + 1 n+1 n+1 bits就足够了。
尽管如此,必须为每个特定setup检查并排除溢出的边界情况。

3.4 总体算法

以下为hardware-optimized modular multiplier结构图,假定了 s s s m m m为已知的constants,使用 l ^ 1 \hat{l}_1 l^1来表示 l l l的近似值。
基础算法优化——Fast Modular Multiplication_第2张图片
注意,最左侧的multiplication module独立于reduction logic,使得该circuit的remainder可generalized beyond multiplication reduction。

3.5 举例

3.5.1 以 n = 16 n=16 n=16举例

基础算法优化——Fast Modular Multiplication_第3张图片
基础算法优化——Fast Modular Multiplication_第4张图片

3.5.2 以 n = 32 n=32 n=32举例

基础算法优化——Fast Modular Multiplication_第5张图片

3.5.3 例外情况

s = 65717 , a = 65535 , b = 65631 s=65717, a=65535, b=65631 s=65717,a=65535,b=65631时,真实 l l l值应为 ⌊ a b s ⌋ = 65449 \left \lfloor \frac{ab}{s} \right \rfloor=65449 sab=65449。而根据本文算法获得近似值 l ^ 1 = 65546 \hat{l}_1=65546 l^1=65546,此时,error e ( l ^ 1 ) e(\hat{l}_1) e(l^1)的值为 3 3 3
不过,对于prime s s s,这样的例外情况并不多,对于大多数的primes,最大可能error将不会超过 2 2 2

你可能感兴趣的:(基础理论,基础理论)