OpenSSL密码库算法笔记——第2.4章 三种模运算的比较

现在来比较一下上面介绍的三中模运算——经典模运算、Barrett约化和Montgomery约化。

因为在绝大多数情况下被模数x的字长l为模数m的字长k的2倍,所以以下按照这种常见情况来进行比较。下面提到的乘法次数是指需要做多少次字与字的乘法,类似地,除法次数就是指需要做多少次两个字除以一个字的除法。表中给出的乘除法数没有包括预运算和事后处理运算。

 

 

经典模运算

Barrett约化

Montgomery约化

乘法次数

k(k+2.5)

k(k+4)

k(k+1)

扫描二维码关注公众号,回复: 5303945 查看本文章

除法次数

k

0

0

使用限制

 

 

预运算

标准化

 

 

事后处理

去标准化

去掉R

表2.1      三种模运算的比较(l=2k)

 

从上表可以看出,在不考虑预运算和事后处理的情况下,Barrett约化和Montgomery约化更好一些。如果把预运算和事后处理也一起考虑进去的话,那就得分具体环境了。比如在做模指数运算时,需要多次模运算,所以此时使用Barrett约化和Montgomery约化比使用经典模运算更好一些,进一步,使用Montgomery约化的模指数运算应该是最优的,不过,Montgomery约化必需满足基本条件gcd(R,m)=1。但是若只需要做一次模运算的话,那么经典模运算应该是最佳的选择,因为其预运算和事后处理简单快捷(只是做简单的左移和右移)。

猜你喜欢

转载自blog.csdn.net/samsho2/article/details/86642683