热门标签 | 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约化实现。

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


推荐阅读
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • 深入浅出:Google工程师的算法学习指南
    通过Google工程师的专业视角,带你系统掌握算法的核心概念与实践技巧。 ... [详细]
  • 本文深入探讨了 Python 列表切片的基本概念和实际应用,通过具体示例展示了不同切片方式的使用方法及其背后的逻辑。 ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • MATLAB中的类别数组:存储和操作有限类别的数据
    类别数组(categorical array)是MATLAB中用于存储有限类别数据的一种特殊数组类型。它不仅提供对非数值数据的高效存储和操作,还保留了原有类别的名称,使数据处理更加直观便捷。此外,类别数组可以与表格(table)数据类型结合使用,以实现更复杂的数据分析。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 探索1000以内的完美数:因数和等于自身
    本文探讨了如何在1000以内找到所有完美数,即一个数的因数(不包括自身)之和等于该数本身。例如,6是一个完美数,因为1 + 2 + 3 = 6。通过编程实现这一过程,可以更好地理解完美数的特性。 ... [详细]
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社区 版权所有