欧拉定理: 设 m 是大于 1 的整数,如果 a 是满足 (a, m)=1 的整数,则 a (m) ≡1 (mod m)。
首先选取两个大素数p和q,计算n=pq 随机选取加密密钥e,使得e与(p-1)(q-1)互素 用扩展欧几里得除法计算解密密钥d = e-1mod(p-1)(q-1) 最终得到加密密钥(e,n)和解密密钥( d, n )
加密过程:C=pow(M,e) mod n 解密过程:M=pow(C,d) mod n
正确性验证 (欧拉定理,n的欧拉函数值为(p-1)(q-1))
已知n,e的情况下,如果能够求出p,q,那么d很容易就可以求出
对于RSA加密算法,公钥(N, e)为公钥,可以任意公开,破解RSA最直接(亦或是暴力)的方法就是分解整数N,然后计算欧拉函数φ(n)=(p-1) * (q-1),再通过d * e ≡ 1 mod φ(N),即可计算出 d,然后就可以使用私钥(N, d)通过m = pow(c,d,N)解密明文。
保障RSA的安全性 1.定期更换密钥 2.不同的用户不可以使用相同的模数N 3.p与q的差值要大,最好是差几个比特 4.p-1与q-1都应该有大的素因子,一般建议选择的两个大素数p、q使得p=2p+1和q=2q+1也是素数 5.e的选择不要太小 6.d的选择也是不可以太小,最好满足d>=n的4分之1
适用于:使用相同的模数 N 、不同的私钥,加密同一明文消息
基本原理 假如采用两个或者两个以上的公钥(N,e)来加密同一条信息,可以得到下面的结论:
c1 = pow(m, e1, N) c2 = pow(m, e2, N)
分别拿对应的私钥来加密,可以得到相同的明文m
m = pow(c1, d1, N) m = pow(c2, d2, N)
假设攻击者已知n,e1,e2,c1,c2,即可可以得到明文m,因为e1和e2互质,所以使用欧几里得算法(用于计算两个整数a,b的最大公约数)可以找到能够满足以下条件的x,y:
pow(x,e1)+pow(y,e2)=1
假设x为负数,需再使用欧几里得算法来计算
pow(c1,-1)
则可以得到
pow(pow(c1,-1),-x) * pow(c2,y) = p mod(n)
如果p<n,则p可以被计算出来。
如果RSA系统的公钥e选取较小的值,可以使得加密和验证签名的速度有所提高,但是如果e的选取太小,就容易受到攻击。
当e=3,并且明文过小时,导致明文的三次方仍然小于n,通过直接对密文三次开方,即可得到明文。
有一种特殊的情况是:pow(m, 3) > n,但是不是足够,假设存在这样的k,有下列的公式成立:
c = pow(m, 3) + k * n
爆破k,当且仅当c - (k * n)可以开三次方,c - (k * n)开三次方结果就是明文m。
感谢这篇文章给予的指导,后续我会将其中的题目刷一遍,再重新整理一篇博客: https://blog.csdn.net/huanghelouzi/article/details/82943615
