公钥密码RSA算法记录
Posted zuotte0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了公钥密码RSA算法记录相关的知识,希望对你有一定的参考价值。
介绍: 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较小的时候才是可行的,和p
和q
的取值有关。具体如下:
???? 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算法记录的主要内容,如果未能解决你的问题,请参考以下文章