最近遇到了一个 RSA 的问题,涉及一个小小的 trick ,记录一下。
题目条件如下:
1 | e=65537 |
发现给了两个 n,一个密文,那就是根据两个 n 来计算私钥。
首先尝试分解两个 n,n1 无果,n2 分出一部分素因数:
显然 n2 不是两个素因数相乘,可以猜测 n1 是加密所用的 n。仔细观察 n1 和 n2 的高位都相同,相近,猜测n2可能是依据 n1 的 p 和 q 生成:
n1 = p * q
n2 = (p + x) * (q + y)
这样的话,可以推导:
1 | p * q = n1 |
该方程有素数解即可,可爆破 x 和 y,写出脚本:
1 | import gmpy2 |
解出明文。
参考:
https://err0rzz.github.io/2017/11/14/CTF%E4%B8%ADRSA%E5%A5%97%E8%B7%AF/