蒙哥马利约减

蒙哥马利解决的问题

求:
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 xR=x<<32
R R R就是如上的一个数,它上面的除模乘运算都非常简单。

目标求 t ≡ x R − 1 m o d    N t\equiv xR^{-1} \mod N txR1modN,N为一个质数

R R − 1 + N N ′ = 1 ; (要求 R 和 N ′ 满足该关系) RR^{-1}+NN'=1;(要求R和N'满足该关系) RR1+NN=1;(要求RN满足该关系)
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(xNmodR)Nx(xNN)modRx+(x(RR1))modR0modR(重要特性)
由于上面的式子满足恰好能整除,所以可以直接使用除法而不用乘逆,并且,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(xNmodR)N)/R(x(xNmodR)N)R1modNxR1modN

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 345712929682216=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(yR(yR)NmodRN)/RmodNy(y3310y331012929%2163457)/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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值