Montgomery reduction——多精度模乘法运算算法

1. modular reduction模简化定义

modular reduction模简化的定义为:
若z为任意整数,则 z mod m 的结果在区间[0, m-1],相当于z除以m的余数,该运算过程称为z对模m的模简化。

2. 模运算

有限域Zm内的加减乘除运算,其中的m为多精度正整数,m称为模。

将正整数m,非负整数x,y (x<m y<m)以b进制格式表示:
m=(mnmn-1…m1m0)b
x=(xnxn-1…x1x0)b
y=(ynyn-1…y1y0)b

模运算:

  • 模加法:x + y mod m
  • 模减法:x - y mod m
  • 模乘法:x * y mod m
  • 模取反:x-1 mod m

2.1 模加法和模减法

对于常规的多精度运算来说,模加法和模减法为最简单的运算。

举例:
当0<x<m, 0<y<m时,则有:
1)x+y < 2m;
2) 若x >= y,则0 =< x-y < m;
3) 若x <y,则有0 =< x+m-y < m.

因此对于模加法和模减法,可分别采用参考资料1中的$14.7算法(当x+y>=m时,需额外增加一步-m的操作)和$14.9算法(当x >= y)。
在这里插入图片描述在这里插入图片描述

2.2 乘法运算

以b进制表示:
x=(xnxn-1…x1x0)b 【n+1位】
y=(ytyt-1…y1y0)b 【t+1位】
则 x*y 的乘积结果以b进制表示,最多有(n+t+2)位。

小学笔算级别求乘积的算法如下:
在这里插入图片描述
举例:
在这里插入图片描述

2.3 除法运算

除法运算为基础多精度加减乘除运算中最复杂且最耗时的运算。
以下算法为计算x除以y的商q和余数r,即:
x=y*q+r, 0=<r<y
在这里插入图片描述

2.4 模乘法

模乘法既需要2.2中的乘法运算,也需要第一节中提到的模简化运算。

2.4.1 模乘法classical算法

传统直观的求解模乘法x*y mod m的算法可分解为:
1)用2.2乘法运算求得xy;
2)用2.3除法运算球的x
y除以m的余数r;
3)返回r值。
在这里插入图片描述
该算法简单直接,但效率不高。

2.4.2 模乘法Montgomery reduction算法
  • Montgomery reduction定义: 模m为正整数,R,T为整数,且R>m,gcd(m,R) = 1, 0 =< T < mR,则 TR-1 mod m 称为相对于R的模m的T Montgomery reduction运算。

通过选择合适的R值,Montgomery reduction用于模乘法运算效率将更高。
对于0 =< T < mR,T可取值T=aR,其中0 =< a < m。

对于 0 =< x,y < m,假设
X = xR mod m
Y = yR mod m
则XY的Montgomery reduction为 XYR-1 mod m = xyR mod m。

对于任意的1 =< x < m,若需求 x5 mod m 的值,可转换为:
1)求X = xR mod m;
2)求X2的Montgomery reduction A = X2R-1 mod m;
3)求A2 的Montgomery reduction B = A2R-1 mod m = X4 R-3 mod m;
4)求BX的Montgomery reduction C = BXR-1 mod m = X4R-3XR-1 mod m = X5R-4 mod m = x5R mod m;
5) C*(R-1 mod m) mod m = x5 mod m.

通过以上五步可看出,通过Montgomery reduction进行模运算比2.4.1的classical算法效率更高。

实际操作时,一般地,若模m值以b进制表示长度为n,则通常地,R的取值为bn,由此 R > m条件肯定满足。但是gcd(R,m)=1 条件成立的前提需为gcd(b,m)=1。对于素数有限域内的运算,m为素数,所以gcd(b,m)=1 亦成立。

Montgomery的一些特征:

  • Fact(Montgomery reduction):若m,R为整数,且gcd(m,R)=1。设定 m’ = -m-1 mod R,T为整数且 0 =< T < mR。若U = Tm’ mod R,则 (T+Um)/R 为整数,且 (T+Um)/R=TR-1 mod m.

以上Fact的证明如下:
∵ T+Um = T mod m
∴ (T+Um)R-1 = TR-1 mod m
∵ m’ = -m-1 mod R
∴ mm’ = -1 + nR 其中n为整数
∵ U = Tm’ mod R
∴ U = Tm’ + kR 其中k为整数
∴ (T+Um)/R = (T+(Tm’+kR)m)/R = (T+Tmm’+mkR)/R = (T+T(-1+nR)+mkR)/R = nT+km
∴ (T+Um)/R为整数。

具体的算法细节为:
在这里插入图片描述

参考资料:
[1] The Montgomery reduction here is based on Algorithm 14.32 in Handbook of Applied Cryptography chap14 http://cacr.uwaterloo.ca/hac/about/chap14.pdf.

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
蒙哥马利约减算法Montgomery Reduction)是一种在大数运算中广泛使用的高效算法,特别是在进行数计算时。这个算法主要应用于对大整数进行快速的除法和乘法运算,特别是当数非常大时,传统的算术方法效率低下。 算法的核心思想是利用数论中的性质,将两个大数的乘法转换为较小数的加法和位移操作,从而大大减少了所需的位运算次数。具体步骤如下: 1. **转换**(Modular Transformation):将一个数 `a` 转换到 `n` 的 Montgomery 域,这通常涉及将 `a` 和 `n` 的商乘以 `n` 的平方 `n^2` 加上 `n`(即 `a * n^2 + n`)。 2. **快速乘法**(Fast Multiplication):在 Montgomery 域内,两个数 `a` 和 `b` 的乘积可以通过分治法(如Karatsuba算法)高效地计算,避免了直接对大数的逐位相乘。 3. **还原**(Reconstruction):计算结果在 Montgomery 域内的乘积后,需要将其还原回原来的 `n`。这通常是通过对结果减去 `n` 的适当倍数来完成的。 4. **取**(Modulo Operation):最后,得到的结果可能大于 `n`,需要对结果取,以确保其在 `[0, n)` 范围内。 举例来说,假设我们要计算 `(123456789 * 987654321) % 1000000007`,使用蒙哥马利约减算法,首先将每个数转换到 `1000000007` 的 Montgomery 域,然后执行快速乘法,最后再还原并取,整个过程大大减少了运算的复杂度。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值