基础算法优化——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=a⋅bmods
其中
a
,
b
,
s
∈
F
s
a,b,s\\in\\mathbbF_s
a,b,s∈Fs,
s
s
s为素数,并利用标准
Z
\\mathbbZ
Z-algebra。
等价为:
a
⋅
b
=
l
⋅
s
+
r
\\beginequation a\\cdot b = l\\cdot s +r \\endequation
a⋅b=l⋅s+r
其中,
l
∈
Z
l\\in \\mathbbZ
l∈Z,使得
0
≤
r
<
s
0\\leq r < s
0≤r<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. 本文主要贡献
本文主要展现了,如何将:
- 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
^
\\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[2n−1:0]−l^s[2n−1:0]=r[n−1: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[n−1:0] 和
l
^
s
[
n
−
1
:
0
]
\\hatls[n-1:0]
l^s[n−1:0] 来完成该计算,从而可节约近一半的计算量。最终的adder为a fixed width adder——即,
n
+
n
→
n
n+n\\rightarrow n
n+n→n。这意味着可忽略 ms bits(最高有效位)的任何溢出。可将其等价为a fixed-width subtractor——即,
n
−
n
→
n
n-n\\rightarrow n
n−n→n,可将其结果看成是unsigned integer。
将生成以上乘积的multiplier表示为
n
×
n
→
n
lsb
n\\times n\\rightarrow n_\\textlsb
n×n→nlsb,其中
n
lsb
n_\\textlsb
nlsb是指该full product的
n
n
n个least-significant bits。
a
⋅
b
a\\cdot b
a⋅b和
l
^
⋅
s
\\hatl\\cdot s
l^⋅s都可通过
n
×
n
→
n
lsb
n\\times n\\rightarrow n_\\textlsb
n×n→nlsb来生成。
此外,若
s
s
s为constant,
l
^
⋅
s
\\hatl\\cdot s
l^⋅s可通过一个constant
n
×
n
→
n
lsb
n\\times n\\rightarrow n_\\textlsb
n×n→nlsb multiplier来生成。
当
λ
≠
0
\\lambda\\neq 0
λ=0时:
a
b
−
l
^
s
=
r
+
λ
s
\\beginequation ab-\\hatls = r+\\lambda s\\endequation
ab−l^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+λs⌉≤n+⌈log2(1+λ)⌉
因此,若
λ
=
1
\\lambda=1
λ=1,则仅需要额外再增加
1
1
1个bit来表示。
3.2 使用Barrett Reduction算法求 l l l的近似值
采用Barrett的modular reduction算法对
l
l
l求近似值为: 以上是关于基础算法优化——Fast Modular Multiplication的主要内容,如果未能解决你的问题,请参考以下文章 HashMap底层运行原理/底层数据结构/扩容机制/并发修改异常/fast-fail机制/优化使用 SIFT,SURF,ORB,FAST,BRISK 特征提取算法比较
l
=
⌊
a
b
s
⌋
=
lim
k
→
∞