幂模运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2. 大数幂模与乘模运算•Montgomery 幂模算法

在实现了vlong 类型后,大数的存储和四则运算的功能都完成了。考虑到RSA 算法需要进行幂模运算,需要准备实现这些运算的方法。所以写一个vlong 的友元,完成幂模运算功能。幂模运算是RSA 算法中比重最大的计算,最直接地决定了RSA 算法的性能,针对快速幂模运算这一课题,西方现代数学家提出了很多的解决方案。经查阅相关数学著作,发现通常都是依据乘模的性质

n n b n a n b a mod ))mod ()mod ((mod )(⨯=⨯,先将幂模运算化简为乘模运算。

通常的分解习惯是指数不断的对半分,如果指数是奇数,就先减去一变成偶数,然后再对半分,例如求D=n C E mod ,E=15,可分解为如下6个乘模运算。

n C n C C C m od m od 21=⨯= n C n C C C m od m od 312=⨯= n

C n C C C mod mod 6223=⨯= n

C n C C C mod mod 734=⨯= n

C n C C C mod mod 14445=⨯= n

C n C C C mod mod 1556=⨯=

归纳分析以上方法,对于任意指数E ,可采用如图2-4的算法流程计算 。

图2-4 幂模运算分解为乘模运算的一种流程

按照上述流程,列举两个简单的幂模运算实例来形象的说明这种方法。

①求17

mod

215的值

开始 D = 1 P = 2 mod 17 = 2 E = 15

E奇数 D = DP mod n = 2 P = PP mod n = 4 E = (E-1)/2 =7

E奇数 D = DP mod n = 8 P = PP mod n = 16 E = (E-1)/2 =3

E奇数 D = DP mod n = 9 P = PP mod n = 1 E = (E-1)/2 =1

E奇数 D = DP mod n = 9 P = PP mod n = 1 E = (E-1)/2 =0

最终D = 9 即为所求。

②求13

mod

28的值

开始 D = 1 P = 2 mod 17 = 2 E = 8 E偶数 D = 1 P = PP mod n = 4 E = E/2 =4

E偶数 D = 1 P = PP mod n = 3 E = E/2 =2

E偶数 D = 1 P = PP mod n = 9 E = E/2 =1

E奇数 D = DP mod n = 9 P = 不需要计算 E = (E-1)/2 =0

最终D = 9 即为所求。

观察上述算法,发现E根据奇偶除以二或减一除以二实际就是二进制的移位操作,所以要知道需要如何乘模变量,并不需要反复对 E 进行除以二或减一除以二的操作,只需要验证E 的二进制各位是0 还是1 就可以了。同样是计算 ,下面给出从右到左扫描二进制位进行的幂模算法描述,设中间变D E mod

C

n

量D,P,E的二进制各位下标从左到右为u,u-1,u-2, 0

Powmod(C,E,n)

{

D=1;

P=C mod n;

for i=0 to u do

{

if(Ei=1)D=D*P(mod n);

P=P*P(mod n);

}

return D;

}

有些文献将上述算法称为平方乘积二进制快速算法,例如参考文献中的《基于RSA算法的一种新的加密核设计》,其实这种算法本质上和图2-4的流程完全一致,只是把根据指数奇偶分开的减一和除以二合并成对指数二进制各位的判断而已。在本软件的代码中采用直接扫描vlong二进制各位的办法。

相关文档
最新文档