热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

和第三章介绍的模乘法一样,根据使用的模运算的不同,模指数在具体实现时也分成利用经典模运算实现的模指数运算、利用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约化实现。

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


推荐阅读
  • 深入解析C语言中的关键字及其分类
    本文将全面介绍C语言中的关键字,并按照功能将其分为数据类型关键字、控制结构关键字、存储类别关键字和其他关键字四大类,旨在帮助读者更好地理解和运用这些基本元素。C语言中共有32个关键字。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • D17:C#设计模式之十六观察者模式(Observer Pattern)【行为型】
    一、引言今天是2017年11月份的最后一天,也就是2017年11月30日,利用今天再写一个模式,争取下个月(也就是12月份& ... [详细]
  • 贡献转移在计算每个元素的作用的时候,我们可以通过反向枚举作用效果,添加到作用元素的身上,这种方法叫做贡献转移。更正式的说, ... [详细]
  • 探讨了一个包含纯虚函数的C++代码片段,分析了其中的语法错误及逻辑问题,并提出了修正方案。 ... [详细]
  • 本文介绍了如何利用OpenCV库进行图像的边缘检测,并通过Canny算法提取图像中的边缘。随后,文章详细说明了如何识别图像中的特定形状(如矩形),并应用四点变换技术对目标区域进行透视校正。 ... [详细]
  • 本文将详细探讨 Python 编程语言中 sys.argv 的使用方法及其重要性。通过实际案例,我们将了解如何在命令行环境中传递参数给 Python 脚本,并分析这些参数是如何被处理和使用的。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍了如何在Spring框架中设置事件发布器、定义事件监听器及响应事件的具体步骤。通过实现ApplicationEventPublisherAware接口来创建事件发布器,利用ApplicationEvent类定义自定义事件,并通过ApplicationListener接口来处理这些事件。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 一、Advice执行顺序二、Advice在同一个Aspect中三、Advice在不同的Aspect中一、Advice执行顺序如果多个Advice和同一个JointPoint连接& ... [详细]
  • 知识图谱与图神经网络在金融科技中的应用探讨
    本文详细介绍了融慧金科AI Lab负责人张凯博士在2020爱分析·中国人工智能高峰论坛上的演讲,探讨了知识图谱与图神经网络模型如何在金融科技领域发挥重要作用。 ... [详细]
author-avatar
xzcxzfvxvc
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有