码迷,mamicode.com
首页 > 编程语言 > 详细

公钥密码RSA算法记录

时间:2018-12-07 17:18:00      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:github   cts   介绍   for   mod   算法   关于   code   成熟   

介绍: RSA算法是1978年由 R.Rivest、A.Shamir、L.Adleman提出的一种用数论构造的、也是迄今为止理论上最为成熟、完善的公钥密码体,该体制已得到广泛的应用。

算法描述:

1. 密钥的产生

(1) 选两个保密的两个大素数 p 和 q 。
(2) 计算 n=p*q,φ(n) = (p-1)*(q-1),其中,φ(n)是n的欧拉函数值 (即满足和n互素的在[1,n)区间的数的个数,定理[ φ(m*n) = φ(m)*φ(n),仅当m,n互素时]);
(3) 选一个整数 e ,满足 1 < e < φ(n),且  gcd(φ(n),e) = 1;
(4) 计算 d,满足 d*e ≡ 1 mod φ(n),即 d 是 e 在摸φ(n) 下的乘法逆元,因e与φ(n)互素,由模运算可知,他的乘法逆元一定存在[贝祖等式:s*a + t*b = (a,b),此时(e,φ(n))=1,因此必然存在逆元];
(5) 以 {e,n} 为公钥,以 {d,n} 为私钥。

2.加密

?? 加密时首先将明文比特串分组,使得每个分组对应的十进制数小于n,即分组长度小于log2(n)(目的应该在于解密时答案的唯一性,即模余值)。然后对每个明文分组m,做加密运算,即
?? ?? ?? c ≡ m^e mod(n)

4. 解密

??对密文分组的解密运算为
?? ?? ?? m ≡ c^d mod(n)

其中的原理易于理解,利用欧拉定理 $a^{φ(m)} ≡ 1 (mod m)$ 以及 $d*e ≡ 1 mod φ(n)$可以得出结论。

攻击:
??对 n 进行暴力分解出 p 和 q,从而轻易的到密钥 e;本地的工具有windows上的RSATool2v17,可分解256 比特的n,yafu CTF比赛中遇到难以分解的 n 可以试一下,rsa-wiener-attack 用于当e过大或过小时;而目前1024~2048 比特之间的RSA是安全的;
??共模攻击、两大数 n1 和 n2 用相同大素数公约数和低指数攻击;
??重复加密攻击:若 m^{e^{t+1}} ≡ c(mod n),即 (m^{e^t})^e ≡ c(modn),则有 m^{e^t} ≡ m(mod n) ,即 c^{e^{t-1}} ≡ m(mod n) ;这种攻击只有在t较小的时候才是可行的,和pq的取值有关。具体如下:
???? c^e≡(m^e)^e≡m^{e^2}(mod n)
???? c^{e^2}≡(m^e)^{e^2}≡m^{e^3}(mod n)
????...
???? c^{e^{t-1}}≡(m^e)^{e^{t-1}}≡m^{e^t}(mod n)
???? c^{e^t}≡(m^e)^{e^t}≡m^{e^{t+1}}(mod n)
重复对以e密文c进行加密,并且与 c 进行比对,若一致,得到t值,则攻击成功。



之前看过的一篇关于ctf中对于rsa破解的技巧分享,感觉很受用 【技术分享】CTF中RSA的常见攻击方法

公钥密码RSA算法记录

标签:github   cts   介绍   for   mod   算法   关于   code   成熟   

原文地址:https://www.cnblogs.com/zUotTe0/p/10083825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!