RSA中的中国剩余定理(CRT)和多素数(multi-prime)
RSA的中国剩余定理(CRT)和多素数(multi-prime)
写了个代码,方便计算大数运算:
git@github.com:mrpre/bn_tool.git
本片中的运算都可以使用这个工具进行计算。
传统方式计算RSA公钥私钥
RSA公钥私钥生成
两个大素数p,q,计算n = p*q
计算phi(n),因为p,q是素数,所以phi(n) = (p-1)*(q-1)
随机取与phi(n)互素的数e,计算其对于phi(n)的逆元。既,求d,使得d满足
d*e = 1 mod (phi(n))
。
(n,e)为公钥,(n,d)为私钥
使用公钥加密和使用私钥解密流程(传统方式):
计算
使用公钥加密:
若要加密明文m1,则需要计算c = m1^e mod n
,c为密文。
使用私钥解密:
若要解密密文c,则需要计算 m2 = c ^d mod n
,m2为明文,既,m2=m1
简介中国剩余定理:
p和q是互相独立的大素数,n为p*q,对于任意(m1, m2), (0<=m1< p, 0<=m2< p)
必然存在一个唯一的m ,0<=m< n
使得
m1 = m mod p
m2 = m mod q
所以换句话说,给定一个(m1,m2),其满足上述等式的m必定唯一存在。
所以解密rsa的流程c^d mod n
,可以分解为 m1=c^d mod p
以及m2=c^d mod q
方程组,然后再计算m( m的计算方法见后面 )。
但是等式c^d mod p 或者 c^d mod q
,模数虽然从n降为p或q了,但是这个指数d还是较大,运算还是比较消耗性能。我们需要降低指数。
仔细看等式c^d mod p
令 d = k(p-1) + r则c^d mod p
=c^(k(p-1) + r) mod p
=c^r * c^(k(p-1)) mod p
因为 c^(p-1) mod p = 1 (欧拉定理)
=c^r mod p
r是c除p-1的余数,即 r = d mod (p-1)
所以 c^d mod p
可以降阶为 c^(d mod p-1) mod p
同理,c^d mod q可以降阶为
c^(d mod q-1) mod q
其中 dp = d mod p-1
和 dq = d mod q-1
可以提前计算。
但是计算dp和dq可以更简单,就是分别计算e对p-1和q-1的逆。
这个(证明比较复杂,要是不懂的话,直接使用d mod p-1
和d mod q-1
就行了)
使用公钥加密和使用私钥解密流程(中国剩余定理):
准备
首先,我们需要在在生成私钥公钥时,多生成几个数:
我们的d是e对phi(n)的逆元,我们现在需要另外2个逆元(分别是对(p-1)和(q-1)的),既
1:计算dp,使得dp*e = 1 mod(p-1)
2:计算dq,使得dq*e = 1 mod(q-1)
此外需要第三个元素,既q对p的逆元
3:计算qInv,使得qInv * q = 1 mod p
1 2 3 都作为私钥的一部分。
计算
使用公钥加密:
若要加密明文m,则需要计算c = m^e mod n
,c为密文。
使用私钥解密:
1:m1=c^dp mod p
2:m2=c^dq mod q
3:h= (qInv*((m1 - m2)mod p)) mod p
4:m = m2 + h*q
m就是明文。
举例子:
p=137
q=131
n = 137*131=17947
计算phi(n) = 136*130=17680
取e=3,计算e对于phi(n)的逆 ,d = 11787
可以使用我的工具执行如下命令
./a.out mod_inv "03" "2E0B"
我这里使用了欧几里得算法求逆元,大家感兴趣可以细究
3*d = 1 mod 17680
3*d - 17680*x = 1
-17680 = -5893*3 - 1
解1 d=-5893, x=-1
解2 d=11787, x=2
若要加密明文 513
使用公钥加密和使用私钥解密流程(传统方式):
密文为 513 ^ 3 mod 17947 = 8363
(可以使用命令 ./a.out mod_exp "0201" "03" "461B"
)
若要解密密文8363,则需要计算8363^11787 mod 17947 = 513
,解密成功。
(可以使用命令 ./a.out mod_exp "20AB" "2E0B" "461B"
)
使用公钥加密和使用私钥解密流程(中国剩余定理):
预先计算
dp = 91
dq = 87
qInv = 114
则解密c=8363,执行如下计算即可:
m1 = c^dp mod p = 102
m2 = c^dq mod q = 120
h = (qInv*((m1 - m2)modp))mod p = (114*(-18 mod 137)) mod 137 = 114*119 mod 137 = 3
m = m2 + h*q = 120 + 3*131 = 513
多素数
为了强调多素数这个特性,我们把上面举例的RSA证书称之为单素数证书(实际上没有这个称呼)。
公钥生成
p=137
q=131
r=127
计算n=p*q*r=2279269
计算phi(n)=136*130*126=2227680
取e=19,计算e对phi(n)的逆元。既,求d,使得d满足d*19= 1 mod phi(n)
d=351739
(可以使用命令 ./a.out mod_inv "13" "21FDE0"
)
公钥(2279269, 19)
私钥(2279269, 351739)
使用公钥加密和使用私钥解密(传统方式):
若要加密513,
513^19 mod 2279269 = 768924
(可以使用命令 ./a.out mod_exp "0201" "13" "22C765"
)
若要解密 768924,
768924^351739 mod 2279269 = 513
(可以使用命令 ./a.out mod_exp "0BBB9C" "055DFB" "22C765"
)
这样的计算和单素数证书一样。但是比较愚蠢,有多素数可以用,为什么不用呢?
使用公钥加密和使用私钥解密(多素数下中国剩余定理):
预先计算:
dp = 19^-1 mod 137-1 = 43
dq = 19^-1 mod 131-1 = 89
dr = 19^-1 mod 127-1 = 73
若要解密密文 768924,则先计算
1:m1=768924^43 mod 137 = 102
2:m2=768924^89 mod 131 = 120
3:m3=768924^73 mod 127 = 5
等式1与等式2连列方程组计算:
qInv = 114(预先算好)
h = (qInv*((m1 - m2)mod p)) mod p = (114*(-18 mod 137) mod 137 ) mod 137= 3
m12 = m2 + h*q = 120 + 3*131 = 513
1与2的通用解为
513+k1*(131*137)
等式1和2合并后, 算上等式3,则问题转化为:
m1=513 p=17947
m2=5 q=127
计算q对p的逆 qInv = 10316
h = (10316*((513 - 5)mod 17947)) mod 17947= 4
m = 5 + 4*127 = 513
多素数证书的好处
为了达到相同长度的n,n可以被分解为多个小的素数;小的素数越多,p,q,r,….rn就的值就越小。使用中国剩余定理就越快速。
多素数证书
私钥是多素数的证书,就是多素数证书。。。。。
RSA中的中国剩余定理(CRT)和多素数(multi-prime)相关推荐
- 中国剩余定理(CRT)及其扩展(EXCRT)详解
博客园食用效果更佳 目录 问题背景 扩展欧几里得算法 有啥用呢: 裴蜀等式: 裴蜀等式求解过程: 同余方程求解过程: C R T \mathrm{CRT} CRT 问题的解决方法 构造出解 逆元求法 ...
- 中国剩余定理 - CRT and Garner’s Algorithm
中国剩余定理 #include <iostream> #include <chrono> #include <random>#include <NTL/ZZ. ...
- 中国剩余定理(CRT)和扩展中国剩余定理(EXCRT)
Tip:建议读者不要太着急后翻,按照顺序阅读有助于理解 中国剩余定理(CRT) 问题引出 "有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二.问物几何?"即,一个整数除以三余 ...
- 初等数论四大定理(威尔逊定理,欧拉定理,费马小定理,中国剩余定理)
初等数论四大定理 1. 威尔逊定理 (1) 结论 当且仅当ppp为素数时,(p−1)!≡−1(modp)(p-1)!\equiv -1(\mod p)(p−1)!≡−1(modp). (2) 证明 充 ...
- [数论]-----中国剩余定理(扩展中国剩余定理)
中国剩余定理 中国剩余定理(CRT)用于求形如: { x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) ⋯ ⋯ x ≡ a k ( m o d m k ) \be ...
- RSA中 底数m和模数 n 不互素是仍然成立
前言:仅个人小记. 注意到 RSA 中并不要求消息 m 要和模数 n 互素,而 RSA 所依赖的"费马定理,欧拉定理",仿佛都要要求 m 须和模数 n 互素.这里给出针对 RSA ...
- 中国剩余定理/扩展中剩余定理
中国剩余定理 在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?"这个问题 ...
- 数论-中国剩余定理(crt) 与拓展中国剩余定理(excrt)
中国剩余定理(crt) [用途] 求方程组中最小的非负整数解X X ≡ { a 1 ( m o d m 1 ) a 2 ( m o d m 2 ) . . . a n ( m o d m n ) X\ ...
- [基础数论]CRT中国剩余定理(模数互质与不互质)
文章目录 参考 模数互质 分析 例题 模数不互质 分析 例题 后记 参考 中国剩余定理(Chinese remainder theorem,简称CRT)即孙子定理,最早可见于中国南北朝时期(公元5世纪 ...
最新文章
- oracle表空间更改用户,ORACLE创建表空间、创建用户、更改用户默认表空间以及授权、查看权限...
- context.xml mysql_在tomcat下context.xml中配置各种数据库连接池(示例代码)
- springMVC和Shiro框架整合使用简单示例 【转】
- 用python实现视频换脸_超简单使用Python换脸实例
- 用delphi操作mapinfo
- 记录 Linux crontab 的使用
- Chart/Report资源目录
- DHTML【3】--HTML
- jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现
- 调整数组顺序使奇数位于偶数前面(剑指offer)
- 理解GetHashCode()的缺陷
- 基于神经网络的PID控制,pid神经网络什么原理
- 文件比较软件修改比较文件时间戳方法
- Eclipse中的工作空间(Workspace)
- 关于站内信的开发思路
- [ArrayList删除元素] 你需要了解的ArrayList如何安全的删除重复元素/ list去重
- python学习No7
- python实现整数从低位到高位输出与从高位到低位输出
- 1~100以内的所有素数
- PCL:点云平移、旋转
热门文章
- 四川师范大学自然地理(1-地球)90分以上版本
- linux看门狗使用
- 浏览器导出ssl证书导入jdk
- “adb”不是内部或外部命令,也不是可运行的程序或批处理文件
- Android超方便 集成 Zxing实现扫一扫,闪光灯,生成二维码图片,解析二维码(条码)等功能
- 通过新浪天气api查询天气
- 微信视频号打造带货闭环:主播叫苦连天
- AS(android studio) 添加第三方库时报,Error: Failed to resolve: com.github Affected Modules 解决办法
- asp.net1028-餐厅自助点餐系统#毕业设计
- 原生js实现轮盘抽奖,控制中奖概率(完整示例)