模数相关攻击
1 |
|
暴力分解 N
攻击条件
在 N 的比特位数小于 512 的时候,可以采用大整数分解的策略获取 p 和 q。
p & q 不当分解
|p-q| 很大
当 p-q 很大时,一定存在某一个参数较小,这里我们假设为 p,那么我们可以通过穷举的方法对模数进行试除,从而分解模数,得到保密参数与明文信息。基本来说,不怎么可行。
|p-q| 较小
顺序检查 √n 的每一个整数 x,直到找到一个 x 使得 x2−n 是平方数,记为 y2那么 x2−n=y2
,进而根据平方差公式即可分解 N
p + 1 光滑
1 | python -m primefac -vs -m=p+1 n |
p - 1 光滑
1 | python -m primefac -vs n |
模不互素
攻击原理
当存在两个公钥的 N 不互素时,我们显然可以直接对这两个数求最大公因数,然后直接获得 p,q,进而获得相应的私钥。
判断
1 | import gmpy2 |
共模攻击
攻击条件
当两个用户使用相同的模数 N、不同的私钥时,加密同一明文消息时即存在共模攻击。
1 | import gmpy2 |
公钥指数相关攻击
小公钥指数攻击
攻击条件
e 特别小,比如 e 为 3。
1 | #/usr/bin/python |
RSA 衍生算法——Rabin 算法
攻击条件
Rabin 算法的特征在于 e=2。
1 | #!/usr/bin/python |
私钥 d 相关攻击
d 泄露攻击
工具
利用以下工具可以直接进行计算
Wiener’s Attack
在 d 比较小时,攻击者可以使用 Wiener’s Attack 来获得私钥。
识别:
非常简单,e看起来很大就行了。
工具
计算 d
1 | import gmpy2 |
解密
1 | import gmpy2 |
生成私钥
1 | from Crypto.PublicKey import RSA |
公约数解密
解密
1 | from Crypto.PublicKey import RSA |