此篇主要介绍模乘的基本性质,mentgomery里面的reduction,以及应用reduction的模乘的算法原理。主要讲算法原理,不涉及硬件具体怎么实现。
对这方面研究不是很深入,有看到文章有问题的,请多指教呀。

1. 模乘基本运算法则

(a + b) % p = (a % p + b % p) % p (1)

(a – b) % p = (a % p – b % p) % p (2)

(a * b) % p = (a % p * b % p) % p (3)

(a^b) % p = ((a % p)^b) % p (4)

结合律:

((a+b) % p + c) % p = (a + (b+c) % p) % p (5)

((ab) % p * c)% p = (a * (bc) % p) % p (6)

交换律:

(a + b) % p = (b+a) % p (7)

(a * b) % p = (b * a) % p (8)

分配律:

((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (9)

重要定理:

若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);(10)

若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);(11)

若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a – c) ≡ (b – d) (%p),

(a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p); (12)

备注

a≡b (% p) 的意思是 a% p = b % p

2. 逆元 inverse

对于正整数a,b,c,存在
a * b % c = 1.
则称b为a的模c的逆元

比如说:
5 % 3 = 2;
5 * 2 % 3 = 1;
则称2是5的逆元。
可以看到有性质如下:
1). 如果存在逆元,那么个数就无限
2). 当a和c不互素,即gcd(a,c)>1, 那么就不存在逆元。比如2 % 4 = 2;就找不到逆元。

备注

gcd()是求最大公约数的。
互素的意思是两个数的最大公约数是1。 比如5和6就是互素。 6和8就不互素。

3. mentgomery reducton 约分

这个reduction是用来干甚的呢。如下:

若N,R为正整数,且gcd(N,R)=1, R>N。
设定:R‘是R的模N逆元, (-N‘)是N的模R逆元。
给定整数t,0<=t<NR
mentgomery reduction计算目标就是:t⋅R‘ (mod N)
### 备注
这个R怎么取呢,一般根据进制,比如说求“98%34”,即N=34。
然后你想要按10进制来算,那就是R就等于10^2=100,比N大的整数。
如果你想按2进制来算mod,那R就等于2^6=64。
以下的R都这么取。
为什么呢,因为如果你算除法的话,2进制就是移位,10进制就是挪小数点。所以一般口算用10进制的,计算机处理用2进制的。

那接下来有2个问题,一个是reduction具体怎么算出来(就是不需要除法或者求模运算的计算步骤),另一个是这个有什么应用。先搞第一个把。

3.1 reduction具体怎么算出来(就是不需要除法或者求模运算的计算步骤)

这里采用偷看参考答案证明法,就是根据结果来找算法原理。这里只说明算法原理,不设计具体硬件实现。

参考答案:先定义:若N,R为正整数,且gcd(N,R)=1, R>N。设定:R‘是R的模N逆元, (-N‘)是N的模R逆元。给定整数t,0<=t<NR1. 定义 m =  t * N‘ mod R;2. 定义 s = (t + N*m)/R  其中n为正整数3. if s>N  return (s-N) else return s结果 return的s就是等于  t⋅R‘ (mod N)算法原理:需要证明两个结论1) s是整数; 2) s ≡ t⋅R‘ (mod N)1) s是整数因为: N*N‘ modR = -1;所以: N*N‘ = -1 + kR : k为整数因为: m =  t * N‘ mod R;所以: m + aR = t * N' : a为整数因此: s = ( t + N*m) /  R= (t + N * (t * N' - aR)) / R= (t + t * N*N' - NRa) / R= (t -t + kRt - NRa) / R= kt - Na其中 k,t,N,a都是整数,所以,s是整数。得证2) s ≡ t⋅R‘ (mod N)因为: s = (t + N*m)/R  其中n为正整数所以: sR = t + N*m所以: sR mod N = t所以: sR*R‘ mod N = t * R’ mod N所以: s mod N = t * R’ mod N 得证。备注:这个s大小是一定小于R的,前提有R>N,因此不一定小于N。所以输出的时候要比较一下s跟N,s大于N的话输出s-N,否则直接输出s。

3.2 应用

先定义:若N,R为正整数,且gcd(N,R)=1, R>N。
设定:R‘是R的模N逆元, (-N‘)是N的模R逆元。
1) 可以求某个数的模,比如说求 “T%N”
先搞到 t = T * R
然后将t作为参数进行reduction就可以得到“T%N”
2)用来计算模乘,第4点介绍

4. 模乘

先定义:若N,R为正整数,且gcd(N,R)=1, R>N。
设定:R‘是R的模N逆元, (-N‘)是N的模R逆元。
对于整数a,b;模乘就是M:“a*b mod N”

我再定义前面第三点中实现的reduction的函数,方面后面描述

function mont_reduct(input t, input R, input N, ***output*** t⋅R‘ (mod N));
输入: 整数t,0<=t<NR
输入: R  看定义
输入: N 看定义
输出: t⋅R‘ (mod N) 是montgomery reduction。
功能:计算montgomery reduction。

4.1 大致算法原理

先预计算:A = a * R mod NB = b * R mod N
A B 怎么搞到的呢,厉害了,用mont_reduct函数mont_reduct( a * R * R, R, N, A);  // A = a * R * R * R‘ mod N = a * R mod Nmont_reduct( b * R * R, R, N, B);  // B = b * R * R * R‘ mod N = b * R mod N再得到A*B的约分:M_tmp = A * B * R‘ mod N = a * b * R mod N
M_tmp具体怎么得到呢,再用mont_reduct函数mont_reduct( A * B, R, N, M_tmp);  //M_tmp = A * B * R‘ mod N = a * b * R mod N最终得到我们想要的模乘的结果M:M = a * b mod N
怎么通过M_tmp来得到M呢,再用mont_reduct函数mont_reduct( M_tmp, R, N, M);  //M = M_tmp * R‘ mod N = a * b * R *R‘ mod N (R * R‘ mod N = 1)最终我们得到了模乘的结果M,计算通过3次mont_reduct,函数的具体实现可以参考3.1来实现。基本不涉及到复杂的除法和求余的运算。这就是
mentgomery很大的贡献了。

4.2 搞个例子

定义:若N,R为正整数,且gcd(N,R)=1, R>N。设定:R‘是R的模N逆元, (-N‘)是N的模R逆元。将N =  47,根据第三点的备注,以10进制,得到R = 100那么R‘ =  8。(怎么得到R‘,根据第二点的逆元)对于整数34,32;模乘就是M:“34*32 mod 47”(计算器得到7)先算 A = a * R mod N = 34 * 100 % 47 = 16B =  b * R mod N = 32 * 100 % 47 = 4 再来 M_tmp = A * B * R' mod N = 16 * 4 * 8 mod 47 = 42最后 M = M_tmp * R' mod N = 42 * 8 mod 47 = 7最后结果34*32 mod 47 = 7

模乘与Montgomery 模乘相关推荐

  1. 电感计算软件_一文让你了解到共模电感和差模电感的差异

    常见的接地符号有哪些? 五张图看懂EMI电磁干扰的传播过程 (点击上方红字,即可获取) 共模电感和差模电感 电源滤波器的设计通常可从共模和差模两方面来考虑.共模滤波器最重要的部分就是共模扼流圈,与差模 ...

  2. 模p加法和模p乘法学习

    加密算法中常用到模p加法和模p乘法:下面来学习一下: 模p加法:(a + b) % p ,其结果是a+b算术和除以p的余数,也就是说,(a+b) = kp +r,则(a + b) % p = r. 模 ...

  3. 共模电感适用的频率_分析共模电感和差模电感寄生电容抵消的方法

    这篇文章比较复杂,有的地方我也没有理解或理解不准确,==,如有兴趣,欢迎留言交流! 文章分析了共模电感和差模电感寄生电容抵消的方法,从而改善其高频性能. 首先考虑寄生电容时差模电感的等效电路模型 将上 ...

  4. 共模干扰和差模干扰(图解)---摘自: 硬件十万个为什么

    目录 共模干扰与差模干扰 抑制方法 共模干扰与差模干扰 共模干扰(Common-mode):两导线上的干扰电流振幅相等,而方向相同者 称为共模干扰. 共模干扰:http://www.sohu.com/ ...

  5. 差分放大电路差模共模公式_差分放大电路对差模信号和共模信号有什么影响?...

    现在在应用中使用的放大电路一般都是由各级级联组成的,直接级联的放大电路各级的直流通路相互关联,因而当前级的静态工作点由于某种原因而稍有偏移时,这种缓慢的微小变化就会逐级影响,致使放大器的输出端产生较大 ...

  6. 基于EMC的共模干扰与差模干扰以及抑制方法(转载)

    翻到这个解释,挺好的,感谢博客http://m.elecfans.com/article/611832.html 什么是共模与差模 电器设备的电源线,电话等的通信线, 与其它设备或外围设备相互交换的通 ...

  7. 共模干扰以及共模干扰消除方法

    共模干扰是什么?     共模   共模对于我们来说,似乎有些陌生,但它却存在于我们的生活之中,对此我们需要对它进一步地了解,以便更好地利用它为人类创造价值.因此,今天我就为大家讲述共模干扰消除方法的 ...

  8. EMC-电磁兼容-共模干扰与差模干扰

    共模干扰与差模干扰 共模干扰(Common-mode):两导线上的干扰电流振幅相等,而方向相同者称为共模干扰. 差模干扰(Differential-mode):两导线上的干扰电流,振幅相等,方向相反称 ...

  9. EMC共模干扰与差模干扰是什么?怎么解决?

    一, 什么是共模与差模 电器设备的电源线,电话等的通信线,与其它设备或外围设备相互交换的通讯线路,至少有两根导线,这两根导线作为往返线路输送电力或信号,在这两根导线之外通常还有第三导体,这就是&quo ...

  10. 【图解】共模干扰,差模干扰

    参考文章:http://www.sohu.com/a/114902096_463982 共模干扰与差模干扰 共模干扰(Common-mode):两导线上的干扰电流振幅相等,而方向相同者 称为共模干扰. ...

最新文章

  1. JS window.open()属性
  2. Canal Adapter二次开发,实现MySQL实时同步到Redis
  3. HTTP协议容易犯的误区
  4. poj 1067 取石子游戏(博弈+威佐夫博奕(Wythoff Game))
  5. IIS7日志文件位置
  6. 1008. 数组元素循环右移问题 (20)-PAT乙级真题
  7. kafka的消费顺序_Kafka原理和实践云平台技术栈13
  8. php文件代码格式化,php代码格式化工具(phpCodeBeautifier)
  9. c语言 从文件中读取车牌,输入一个车牌号写入文件,找出所有后四位是一个完全平方数的车牌号并输出
  10. win7配置TomCat环境
  11. js + css 做出网易云音乐的轮播图
  12. css文件插入背景音乐,在HTML中添加背景音乐
  13. 身份证提取生日和性别
  14. 【区块链开发指南】区块链基础之区块和交易
  15. 经典 Fuzzer 工具 AFL 模糊测试指南
  16. FPGA 之 SOPC 系列(四)NIOS II 外围设备--标准系统搭建
  17. 你看那个老爷爷拿着那么沉的袋子
  18. Android 源码编译及真机刷机实录
  19. MySQL · 捉虫动态 · UK 包含 NULL 值备库延迟分析
  20. c#中如何使用数学函数库计算ln、log等对数函数

热门文章

  1. C# GDI winfrom 图像转换椭圆形
  2. GPU编程与CG语言之阳春白雪下里巴人.pdf 分享
  3. JavaScript入门培训材料(Copy至此以作备份)
  4. gmx grompp
  5. java 禁用cookie的解决办法
  6. Kafka集群的安装和使用
  7. CDN加速是什么?具体有什么用?
  8. DAY20:尚学堂高琪JAVA(156~164)其他流及 IO的设计模式
  9. IDEA代码文件导航-Navigate使用技巧
  10. 胃溃疡能通过食疗自愈吗?