蒙哥马利算法

蒙哥马利算法

概述

蒙哥马利算法包括模乘、约减和模幂。其主要思路是:通过选择合适的参数\(R\),将数转化为蒙哥马利形式,在该形式下除法可以用移位代替,从而简化了计算。进行模乘时,需要先将数转化为蒙哥马利形式,计算完毕后再转换回原形式,因此单次乘法开销较普通模乘大,但乘法数量多时,由于只需要在开始和结束时转换,因此效率很高。

算法

转换为蒙哥马利形式

\(a\)\(b\)为乘数,\(N\)为模数。首先需要寻找一个参数\(R\),满足以下两个条件:①\(R>N\);②\(gcd(R,N)=1\),即\(R\)\(N\)互质。将一个数转化为其蒙哥马利形式,只需乘以\(R\)再取模\(N\),如\(a\)\(b\)的蒙哥马利形式为:\(aR\bmod N\)\(bR\bmod N\),记作\(\overline a\)\(\overline b\)

对于程序设计来说\(R\)通常选择为2的次幂,这样除以\(R\)可以用移位来简化计算。另外以上转换并不会损失任何信息,因为\(R\)\(N\)互质,转换前后的两个群是同构的。

\(N=17\)\(R=100\)为例:

原形式 转换 蒙哥马利形式
\(3\) \(3\times 100\bmod17=11\) \(11\)
\(7\) \(7\times 100\bmod17=3\) \(3\)
\(15\) \(15\times 100\bmod17=4\) \(4\)

蒙哥马利形式下的计算

蒙哥马利形式下加减法的结果是原形式下结果的蒙哥马利形式,因为: \[ \begin{align} \overline a+\overline b\equiv aR\bmod N+bR\bmod N\equiv (a+b)R\bmod N\equiv \overline{a+b}\pmod N\\ \overline a-\overline b\equiv aR\bmod N-bR\bmod N\equiv (a-b)R\bmod N\equiv \overline{a-b}\pmod N \end{align} \] 但乘法不一样,\(ab\)的蒙哥马利形式为\(\overline{ab}=abR\bmod N\),而将蒙哥马利形式下的\(a\)\(b\)相乘结果如下: \[ \overline a\times\overline b\equiv(aR\bmod N)(bR\bmod N)\equiv(abR)R\bmod N\ne\overline{ab}\pmod N \]

不难发现上式结果多了一个\(R\),因此要得到\(\overline{ab}\)还得再除以\(R\),即乘以\(R\)的逆元\(R^{-1}\),由于\(R\)\(N\)互质,逆元一定存在。

仍以\(N=17\)\(R=100\)为例,设\(a=7\)\(b=15\):因为\(100\times8\bmod17=1\),所以\(R\)的逆元\(R^{-1}=8\)。原形式的乘法\(ab\bmod N=7\times15\bmod17=3\),蒙哥马利形式的乘法\(\overline{ab}=\overline a\overline bR^{-1}\bmod N=3\times4\times8\bmod17=11\),恰好对应\(3\)的蒙哥马利形式。

REDC算法

上节中计算蒙哥马利乘法需要乘以\(R^{-1}\)再约减,虽然这样计算没有问题,但约减的计算量很大,因此有了这节的蒙哥马利约减算法,简称REDC。直接看算法:

输入\(R\)\(N\)\(N'\)(满足\(N'N\equiv-1\pmod R\)),要约减的数\(T\)\(T\in[0,RN-1]\))。

输出\(TR^{-1}\bmod N\)

m = (T mod R)N' mod R
t = (T + mN) / R
if t >= N
	return t - N
else
    return t

第一行计算参数\(m\),这样可以保证第二行的\(T+mN\)可以被\(R\)整除,因为有: \[ \begin{align} T+mN&\equiv T+((T\bmod R)N'\bmod R)N\\ &\equiv T+TN'N\\ &\equiv T-T=0\pmod R \end{align} \] 再来看\(t\)的值: \[ t\equiv(T+mN)R^{-1}\equiv TR^{-1}+mNR^{-1}\equiv TR^{-1}\pmod N \] 因此\(t\)与最终要求的\(TR^{-1}\)在模\(N\)下是同余的。由于\(m\in[0,R-1]\),有\(T+mN\in[0,RN-1+N(R-1)]<2RN\),所以\(t\in[0,2N-1]\),只需至多一次减法即可将\(t\)约减至\([0,N-1]\),对应算法中的if-else判断逻辑。

程序


蒙哥马利算法
https://shuusui.site/blog/2024/06/24/algebra-montgomery/
作者
Shuusui
发布于
2024年6月24日
更新于
2024年6月24日
许可协议