rsa_attack
分解n
1.当n比较小的情况下,使用sagemath的factor或者http://www.factordb.com/index.php
2.当生成的p,q接近的时候,使用费马分解或者yafu分解
理论证明:
$$
因为|p-q|小,则|p-q|^2小
$$
$$
那么\frac{|p+q|^2}{4}=\frac{|p-q|^2}{4}+n略大于n
$$
$$
对于\frac{|p+q|^2}{4}-n=\frac{|p+q|^2}{4}-p*q=\frac{|p-q|^2}{4}就小
$$
$$
\frac{|p+q|}{2}也略大于\sqrt{n}那么从\sqrt{n}开始寻找到一个x,
$$
$$
满足x^2-n=y^2为一个完全平方数,其中x=\frac{|p+q|}{2},y=\frac{|p-q|}{2},这样就分解出p,q
$$
1 | def fermat(n): |
3.出现多个pi得到n的情况下,注意是否有重复的pi,不可单纯使用(pi-1)的手法获得phi,注意使用欧拉公式来计算phi
需要得到标准分解式子,
$$
n=\prod_{i=1}^{m}{p_i}^{k_i}
$$
然后
$$
phi=\prod_{i=1}^{m}{p_i}^{k_i-1}({p_i}-1)
$$
特殊情况下的e,p,q
第一大种情况:e特殊
1.如果e过于小
$$
c\equiv m^e \pmod p
$$
$$
m^e = c+k\times N
$$
$$
m = \sqrt[e]{c+k\times n}
不难直接爆破k获得m
$$
2.如果e刚好等于2时
e=2会得到一种基于RSA的衍生算法,Rabin算法,根据上面的公式不难想出
$$
m_p \equiv \sqrt{c} \bmod p
$$
$$
m_q \equiv \sqrt{c} \bmod q
$$
根据扩展欧几里得公式可以求出
$$
y_p \cdot p + y_q \cdot q = 1 中的y_p和y_q
$$
根据孙子定理解出4个明文
$$
a = (y_p \cdot p \cdot m_q + y_q \cdot q \cdot m_p)\bmod n
$$
$$
b = n - a
$$
$$
c = (y_p \cdot p \cdot m_q - y_q \cdot q \cdot m_p) \bmod n\
$$
$$
d = n - c
$$
ps:其中一般来说
$$
p \equiv q \equiv 3 \pmod 4
$$
则费马小定理计算的知识
$$
m_p \equiv c^\frac{(p+1)}{4} \bmod p\
$$
$$
m_q \equiv c^\frac{(q+1)}{4} \bmod q
$$
3.多个k进行多轮的加密,并且已知e,d,phi
$$
设c \equiv m^{k1k2k3…}\pmod n
$$
$$
设m^{x} \equiv c \pmod n
$$
$$
存在ed - 1=k*phi
$$
$$
y \equiv x^{-1} \pmod {k*phi}
$$
$$
xy \equiv 1\pmod {phi}
$$
$$
c^{y} \equiv m^{xy} \equiv m \pmod n
$$
4.根据3的问题,如果已知d,如何对p,q进行恢复
https://www.di-mgt.com.au/rsa_factorize_n.html
1 | def gcd(a, b): |
第二大种情况:p,q特殊
1.p与q的生成具有一定的关系,那么
法一:可以根据n=p*q关系求出一个近似p的值,去寻找符合条件的p或者q值
法二:可以使用高位爆破的方法对p进行爆破,通过检测生成的n值进行寻找
2.p-1或者p+1是光滑的
1 | from Crypto.Util.number import getPrime |
所生成的素数是根据前10000个素数的相乘+1来生成的,那么根据p-1光滑理论
参考:https://blog.csdn.net/qq_42667481/article/details/106729900
p+1光滑
参考:https://blog.csdn.net/m0_62506844/article/details/125774485