大数分解 (Big Integer Factorization)
当N的两个素因子p, q相差较近或满足特定条件时,可尝试使用算法(如Fermat分解、Pollard's p-1)进行分解。
低加密指数攻击 (Small e Attack)
当加密指数e很小,导致 \(m^e < N\) 时,可以直接对密文c开e次方根得到明文m。需要用到 gmpy2.iroot
等高精度求根算法。
共模攻击 (Common Modulus Attack)
使用相同的模数N、不同的公钥指数 \(e_1, e_2\) 加密同一明文m。利用扩展欧几里得算法求解。前提:\(\gcd(e_1, e_2) = 1\)。
私钥泄露攻击 (d Leakage Attack)
当私钥d已知时,可以直接通过公式 \(m = c^d \bmod N\) 解密。
维纳攻击 (Wiener's Attack)
当私钥d过小(满足 \(d < \frac{1}{3}N^{\frac{1}{4}}\))时,可通过对 \(\frac{e}{N}\) 进行连分数展开来求解d。
已知p, q求解 (Known p, q)
当p和q已知时,RSA问题退化为基础的加解密流程。此模块用于根据p, q, e, c计算d和m。
e 与 φ(n) 不互素解密 (Non-coprime e Decryption)
当 \(e\) 与 \(\varphi(n)\) 不互素时,解密可能有多个结果。输入 n, e, c, p, q。
N 计算工具
输入素数 p 和 q,计算 N = p \times q。
RSA公钥/私钥解析
RSA公私钥生成
RSA私钥格式转换
e为2ⁿ次方解密
当公钥指数e为2的幂次方时,可通过连续平方根计算恢复明文。需要安装sympy库。
Rabin算法解密
已知p、q、e=2和密文c,使用Rabin算法求解明文。
RSA公私钥对验证
RSA加密/解密(公钥加密,私钥解密)
素数判断 (Prime Number Check)
使用Miller-Rabin素性测试算法判断一个大整数是否为素数。该算法是概率性的,但对于足够多的测试轮数,错误概率极低。
轮数越多,结果越可靠,但计算时间也越长