基础算法优化——Fast Modular Multiplication

Posted mutourend

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础算法优化——Fast Modular Multiplication相关的知识,希望对你有一定的参考价值。

1. 引言

Yuval Domb 2022年论文《Fast Modular Multiplication

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

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

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

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

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

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

2. 本文主要贡献

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

结合,用于求取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 ^ \\hatl l^,使得:
l − λ ≤ l ^ ≤ l \\beginequation l-\\lambda \\leq \\hatl \\leq l \\endequation 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 ] \\beginequation ab[2n-1:0] - \\hatls[2n-1:0]=r[n-1:0] \\endequation 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表示为:

其中,上横杠表示的是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 ] \\hatls[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_\\textlsb n×nnlsb,其中 n lsb n_\\textlsb nlsb是指该full product的 n n n个least-significant bits。 a ⋅ b a\\cdot b ab l ^ ⋅ s \\hatl\\cdot s l^s都可通过 n × n → n lsb n\\times n\\rightarrow n_\\textlsb n×nnlsb来生成。
此外,若 s s s为constant, l ^ ⋅ s \\hatl\\cdot s l^s可通过一个constant n × n → n lsb n\\times n\\rightarrow n_\\textlsb n×nnlsb multiplier来生成。

λ ≠ 0 \\lambda\\neq 0 λ=0时:
a b − l ^ s = r + λ s \\beginequation ab-\\hatls = r+\\lambda s\\endequation abl^s=r+λs
此时,用于表示等式(5)中右侧值所需的number of bits为:
⌈ log ⁡ 2 ( r + λ s ) ⌉ ≤ n + ⌈ log ⁡ 2 r + λ s s ⌉ ≤ n + ⌈ log ⁡ 2 ( 1 + λ ) ⌉ \\beginequation \\left \\lceil \\log_2(r+\\lambda s) \\right \\rceil \\leq n+\\left \\lceil \\log_2\\fracr+\\lambda ss \\right \\rceil \\leq n+\\left \\lceil \\log_2(1+\\lambda) \\right \\rceil \\endequation 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 → ∞

以上是关于基础算法优化——Fast Modular Multiplication的主要内容,如果未能解决你的问题,请参考以下文章

Fast InvSqrt()(平方根倒数速算法)

Fast Paxos的工业实现-ZAB(上)

HashMap底层运行原理/底层数据结构/扩容机制/并发修改异常/fast-fail机制/优化使用

SIFT,SURF,ORB,FAST,BRISK 特征提取算法比较

干货丨从Paxos到Fast Paxos达Zookeeper分析

适用于现代浏览器的小型、快速、模块化DOM和事件库。