蒙哥马利模乘

Montgomery乘法的数学表达式是A * B * R ^ (-1)mod M。A、B是同位长大数,R是2的M(位长)的次方,R ^ (-1)是指R相对于M的模逆,即R ^ (-1)满足以下条件的数:R * R ^ (-1) mod M = 1;这个条件成立的充要条件是R与M互素,这一点只需要M为奇数即可。

使用蒙哥马利乘法可以做大量的并行运算,而A * B mod M则必须先将A * B 计算出来再计算除法。所以当使用硬件实现蒙哥马利乘法会有很高的效率。

如何使用A * B * R ^ (-1) mod M代替 A * B mod M?
通常将x映射成X=x * R mod M,X称为x的蒙哥马利表示,可以发现,输入两个蒙哥马利表示的乘数,使用蒙哥马利乘法运算,可以得到原乘数使用普通模乘得到的数的蒙哥马利表示。

所以要计算模乘运算,可以先将乘数化成蒙哥马利表示,然后使用蒙哥马利乘法,最后将结果脱掉蒙哥马利表示,即得到普通模乘的结果;这个过程虽然复杂一些,但是对于计算大量模乘的运算而言,只是多了初始的入和出Montgomery表示的过程,但是中间每次计算Montgomery乘法,却比计算普通模乘剩下大量的时间。

要将x写成Montgomery表示,可以计算x与R ^ 2的Montgomery乘法,要脱掉Montgomery乘法,可以计算x与1的Montgomery乘法,由于R ^ 2是常数,可以提前计算。

上面加粗这一部分是实现如何将一个数转换成Montgomery表示和解除Montgomery表示。

在这里插入图片描述

热门文章

暂无图片
编程学习 ·

Linux 文件系统解析(三)cache

Linux文件系统中使用了大量cache,用于提升IO性能,本篇来梳理一下这些与文件系统相关的cache,它们在内存中是如何组织管理的,它们是如何加速文件系统操作的。Dentry Cachedentry用于描述系统目录树中的一个节点,磁盘文件系统中通常没有相关结构,dentry只存在于内存之中,它…
暂无图片
编程学习 ·

JS 中的展开运算符你了解多少 ?

什么是展开运算符 (...)?展开运算符 :允许一个表达式在某处展开。展开运算符在多个参数(用于函数调用)或多个元素(用于数组字面量)或者多个变量(用于解构赋值)等地方可以使 用,作用就是 展开数组或字符串为一个新数组。注意 : 展开运算符不能用在对象当中,因为目前…
暂无图片
编程学习 ·

超星尔雅《中庸》精读

超星学习通app《中庸》精读 答案 孟琢“四书”的形成(一)1【单选题】著作( )是一部论述了人生修养境界的道德哲学专著。 答案:《中庸》A、《周易》B、《史记》C、《诗经》D、《中庸》2【单选题】中国古代思想家( )是儒家学派的创始人,被后世尊称为万世师表。 答案:孔子A、孔…
暂无图片
编程学习 ·

XTransfer欧美本地账户可以收哪些地区的币种?

很多人注册了XTransfer账户之后,开通了XTransfer欧美本地账户。本地收款账户有两个,一个是美元的开户行是纽约的Community Federal Savings Bank(CFSB),一个是欧元的开户行是英国的 Currency Cloud。欧美本地收款账户可以用于接收欧洲、美国的本地汇款,买家通过本地清算网…
暂无图片
编程学习 ·

挂牌一年,关于 5G 的 9 个变化

简介:2019 年 6 月 6 日的一张新闻图片瞬间刷遍全网,意味着中国正式进入 5G 时代,2019 年也被业界称为 5G 商用元年。转眼间一年过去,这个不断被提及的 5G 新星发展到了什么程度呢,让我们再来回顾和展望一下。3GPP 标准进展移动通讯网络作为全球的基础设施,标准化是基础,…
暂无图片
编程学习 ·

Bazel responsitory_rule 创建一个 rule

bazel respository_rule 主要功能是创建一个workspace 空间。对于package 内部的BUILD.tpl文件target 可以使用 responsity_ctx.file("//package") 创建 BUILD文件,或者repository_ctx.template(“BUILD”, build_tpl, {})对BUILD文件进行修改,然后通过@< name&…
暂无图片
编程学习 ·

Python中%r和%s的相同点和不同点

1、在处理布尔型或者数字型时,二者是没有区别的 (1)数字型 I am %r years old%22#%r ‘I am 22 years old’ I am %s years old%22#%s‘I am 22 years old’ This building is %r m tall%22.35#%r‘This building is 22.35 m tall’ This building is %s m tall%22.35#%s‘Thi…
暂无图片
编程学习 ·

c#UDP协议通讯

在写具体的用c#实现UDP通讯的方式之前,我们要先搞清楚相关的概念,那就是什么是UDP协议。UDP和TCP一样,是同属于TCP/IP协议簇的传输层协议:这里一定要注意TCP/IP是指一堆协议的集合,而这些集合之中又属TCP协议和IP协议比较重要,所以就将此协议集合以TCP/IP的方式进行命名。…
暂无图片
编程学习 ·

智慧RFID工地人员定位-工地人员定位系统-新导智能

随着RFID技能的逐渐老练,RFID工地人员定位系统系在施工项目中越来越多地被运用到实践当中。尤其是在工地分布范围广,现场环境恶劣的项目施行现场,为了对施工现场进行安全规范办理,在施工项目应用根据RFID工地人员定位体系,能够实时监测各个施工现场的人员状况,统一办理,…
暂无图片
编程学习 ·

mmdetection训练出现:IndexError: list index out of range 错误

mmdetection训练出现:IndexError: list index out of range 错误文章目录:1 问题分析1.1 尝试解决错误:第一次1.2 尝试解决错误:第二次2 我的问题解决方式我的环境:Ubuntu18.04 TorchVision: 0.6.0 OpenCV: 4.2.0 MMCV: 0.5.5 MMDetection: 2.0.0+d9c8f14 MMDetection Com…
暂无图片
编程学习 ·

git使用(二)部署本地项目到github

部署本地项目到github 初始化 打开Git Bash。 cd到项目文件夹。(直接把文件夹拖入到bash内即可) 执行初始化代码 git init项目文件夹会产生一个.git的文件夹 跟github仓库进行连接 格式:git remote add origin url地址(https或ssh)例如:git remote add origin git@github…
暂无图片
编程学习 ·

Java中Date类型数据格式转换

查询数据库datetime类型数据,返回的结果是Mon Jun 22 19:37:29 CST 2020 先转换成yyyy-MM-dd类型的格式。 /** * 获取现在时间 * * @return 返回短时间字符串格式yyyy-MM-dd */ public static String getStringDateShort() { Date currentTime = new Date(); SimpleDateF…
暂无图片
编程学习 ·

第一次用IDEA创建maven工程时间

第一次在idea中创建maven工程花费20+min 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与…
暂无图片
编程学习 ·

Tensorflow实现卷积神经网络

Tensorflow实现卷积神经网络Tensorflow实现卷积神经网络卷积层池化层归一化层实现简单的卷积神经网络 Tensorflow实现卷积神经网络 卷积层 卷积核,步福,填充,多通道卷积,激活函数,卷积函数。 主要函数使用: 1.conv2d函数 tf.nn.conv2d(input, filter, strides, padding, …
暂无图片
编程学习 ·

oracle创建修改等

–创建表空间 create tablespace newryb datafile D:\oracle\product\10.2.0\data\newryb.ora size 1024m;–创建用户 create user 登录帐号 identified by 登录密码 default tablespace 表空间名 temporary tablespace temp;–赋权 grant dba to 登录帐号;–修改oracle用户密码…
暂无图片
编程学习 ·

MySQL创建新连接时,不能成功连接的问题

创建新连接后,用户名和密码都是对的,地址和端口也都是本地但还是会出现错误。比如:1、2003错误:2003 cannot connect to mysql一般是没有启动MySQL服务,在服务中找到MySQL80,启动之。2、1045错误:ERROR 1045 (28000): Access denied for user root@localhost (using pas…
暂无图片
编程学习 ·

前端未来技术走向(TS, SSR, serverless, flutter,多端统一开发)

TS TS为什么会出现? 1.js是一门弱类型而且还是动态类型的语言,语言本身的类型系统是非常薄弱的,当js去开发大型的前端项目,开发成本和维护成本都会非常的高2.而ts是一门基于js基础之上的编程语言,它在javascript原有的基础之上多了一些扩展特性,主要就是一套更强大的类型…
暂无图片
编程学习 ·

Object类的方法

Object 类是类层次结构的根,在 Java 语言中,所有的类从根本上而言都继承自这个类。而且,Object 类是 Java 语言中唯一没有父类的类,而其他所有的类,包括标准容器类,例如数组,都继承了 Object 类。方法名 返回类型 方法描述clone() Object 创建并返回此对象的一个副本equ…
暂无图片
编程学习 ·

Vue循环渲染&key的原理

v-for用于循环的数组里面的值可以是对象,也可以是普通元素<ul id="example-1"><!-- 循环结构-遍历数组 item 是我们自己定义的一个名字 代表数组里面的每一项 items对应的是 data中的数组--><li v-for="item in items">{{ item.mess…
暂无图片
编程学习 ·

Spring Web 拦截异常, 封装返回结果并记录入参

异常拦截类@ControllerAdvice("com.yn.netcafe")@ResponseBodypublic class GlobalExceptionHandler {// 拦截 ServiceException 异常,并封装返回结果@ExceptionHandler(ServiceException.class)public BaseResponse serviceExceptionHandler(HttpServletResponse r…