蒙哥马利解决的问题
求:
x
m
o
d
q
x \mod q
xmodq
模运算在硬件中非常的慢,运比乘法慢的多,要进行优化,因此要想办法用乘
法及其它简单运算来替代模运算。
取
R
=
2
n
R=2^{n}
R=2n,则在R上的模运算和除运算都非常简单,假设n=32;
x
R
=
x
>
>
32
\frac{x}{R} = x>>32
Rx=x>>32
x
m
o
d
R
=
x
&
(
(
1
<
<
32
)
−
1
)
m
o
d
R
x\mod R= x\&((1<<32)-1) \mod R
xmodR=x&((1<<32)−1)modR
x
∗
R
=
x
<
<
32
x*R=x<<32
x∗R=x<<32
R
R
R就是如上的一个数,它上面的除模乘运算都非常简单。
目标求 t ≡ x R − 1 m o d N t\equiv xR^{-1} \mod N t≡xR−1modN,N为一个质数
R
R
−
1
+
N
N
′
=
1
;
(要求
R
和
N
′
满足该关系)
RR^{-1}+NN'=1;(要求R和N'满足该关系)
RR−1+NN′=1;(要求R和N′满足该关系)
x
−
(
x
∗
N
′
m
o
d
R
)
∗
N
≡
x
−
(
x
N
N
′
)
m
o
d
R
≡
x
+
(
x
(
R
R
′
−
1
)
)
m
o
d
R
≡
0
m
o
d
R
(
重要特性
)
\begin{aligned} x-(x*N' \mod R)*N &\equiv x-(xNN') \mod R\\ &\equiv x+(x(RR'-1)) \mod R\\ &\equiv 0 \mod R(重要特性) \end{aligned}
x−(x∗N′modR)∗N≡x−(xNN′)modR≡x+(x(RR′−1))modR≡0modR(重要特性)
由于上面的式子满足恰好能整除,所以可以直接使用除法而不用乘逆,并且,R特殊可用移位替代。
所有
(
x
−
(
x
∗
N
′
m
o
d
R
)
∗
N
)
/
R
≡
(
x
−
(
x
∗
N
′
m
o
d
R
)
∗
N
)
∗
R
−
1
m
o
d
N
≡
x
∗
R
−
1
m
o
d
N
\begin{aligned} (x-(x*N' \mod R)*N)/R&\equiv (x-(x*N' \mod R)*N)*R^{-1}\mod N\\ &\equiv x*R^{-1} \mod N \end{aligned}
(x−(x∗N′modR)∗N)/R≡(x−(x∗N′modR)∗N)∗R−1modN≡x∗R−1modN
Modular Multiplication Without Trial Division
例
N
=
3457
,
R
=
2
16
N=3457,R=2^{16}
N=3457,R=216
3457
∗
12929
−
682
∗
2
16
=
1
,
3310
=
2
16
m
o
d
3457
3457*12929-682*2^{16}=1,3310=2^{16}\mod3457
3457∗12929−682∗216=1,3310=216mod3457
对于一个模3457的数
y
y
y,有
y
≡
(
y
∗
R
−
(
y
∗
R
)
∗
N
′
m
o
d
R
∗
N
)
/
R
m
o
d
N
y
≡
(
y
∗
3310
−
y
∗
3310
∗
12929
%
2
16
∗
3457
)
/
2
16
y \equiv (y*R-(y*R)*N'\mod R*N)/R \mod N\\ y\equiv (y*3310 -y*3310*12929\%2^{16}*3457)/2^{16}
y≡(y∗R−(y∗R)∗N′modR∗N)/RmodNy≡(y∗3310−y∗3310∗12929%216∗3457)/216
int16_t montgomery_reduce(int32_t a)
{
int32_t t;
int16_t u;
u = a * QINV;
t = (int32_t)u * CTRU_Q;
t = a - t;
t >>= 16;
return t;
}