OpenSSL密码库算法笔记——第4.1.4章 模指数函数介绍

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-22 18:13   11   0

和第三章介绍的模乘法一样,根据使用的模运算的不同,模指数在具体实现时也分成利用经典模运算实现的模指数运算、利用Barrett模运算实现的模指数运算、利用Montgomery模运算实现的模指数运算。

首先看看利用经典模运算实现的模指数运算。

───────────────────────────────────────

int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m)

功能: 大数的模指数运算(利用经典模运算实现)

输入: a【基数】,p【指数】,m【模数】

输出: r ← a^p modm

返回: 1【正常】 or 0【出错】 or -1【p为CONSTTIME属性】

出处: bn_exp.c

───────────────────────────────────────

再来看看利用Barrett约化实现的模指数运算。

───────────────────────────────────────

int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,const BIGNUM *m)

功能: 大数的模指数运算(利用Barrett约化实现)

输入: a【基数】,p【指数】,m【模数】

输出: r ← a^p modm

返回: 1【正常】,0【出错】

出处: bn_exp.c

───────────────────────────────────────

接着来看看利用Montgomery约化实现的模指数运算。注意此时需要模数为奇数,否则不满足Montgomery约化的基本条件gcd(m,R)=1。

───────────────────────────────────────

int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,const BIGNUM *m, BN_MONT_CTX *in_mont)

功能: 大数的模指数运算(利用Montgomery约化实现)

输入: a【基数】,p【指数】,m【模数】,in_mont【Montgomery模数】

输出: r ← a^p modm

返回: 1【正常】,0【出错】

出处: bn_exp.c

───────────────────────────────────────

当基数a退化成一个字的时候,利用Montgomery约化实现的模指数运算变成:

───────────────────────────────────────

int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p,const BIGNUM *m, BN_MONT_CTX *in_mont)

功能: 字的模指数运算(利用Montgomery约化实现)

输入: a【字】,p【指数】,m【模数】,in_mont【Montgomery模数】

输出: r= a^p modm

返回: 1【正常】 or 0【出错】 or -1【p为CONSTTIME属性】

出处: bn_exp.c

───────────────────────────────────────

在做模指数运算时使用Barrett约化和Montgomery约化比使用经典模运算好,进一步,使用Montgomery约化的模指数运算应该是最优的[7],但是必需满足条件gcd(m,R)=1。

下面将要介绍的这个模指数运算综合运用了上面提到的BN_mod_exp_recp(利用Barrett约化实现)和BN_mod_exp_mont(利用Montgomery约化实现)。因为使用Montgomery约化的模指数运算是最优的,所以当模数m为奇数时,调用Montgomery约化实现的模指数运算BN_mod_exp_mont。当m为偶数的时候,不满足Montgomery约化的基本条件gcd(m,R)=1,无法使用Montgomery约化,所以改为调用利用Barrett约化实现的模指BN_mod_exp_recp。

───────────────────────────────────────

int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m)

功能: 大数的模指数运算

输入: a【基数】,p【指数】,m【模数】

输出: r ← a^p modm

返回: 1【正常】 or 0【出错】

出处: bn_exp.c

备注: 当m为偶数时,利用Barrett约化,当m为奇数时,利用Montgomery约化实现。

───────────────────────────────────────

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP