给定以下 RSA key ,如何确定 p 和 q 的值?

Public Key: (10142789312725007, 5)
Private Key: (10142789312725007, 8114231289041741)

最佳答案

你的老师给了你:



意思是

n = 10142789312725007
e = 5

其中 n 是模数, e 是公共(public)指数。

此外,你被赋予



意思是
 d = 8114231289041741

其中 d 是应该保密的解密指数。

您可以通过知道如何将“n”分解为“p”和“q”素因子来“破坏”RSA:
n = p * q

最简单的方法可能是检查从 n 的平方根以下开始的所有奇数:
Floor[Sqrt[10142789312725007]] = 100711415

您将在 4 次尝试中获得第一个因素:
10142789312725007 mod 100711415 = 100711367
10142789312725007 mod 100711413 = 100711373
10142789312725007 mod 100711411 = 100711387
10142789312725007 mod 100711409 = 0 <-- Winner since it evenly divides n

所以我们有
 p = 100711409

现在,
 q = n / p
   = 10142789312725007 / 100711409
   = 100711423

为什么这很重要?这是因为 d 是一个特殊的数字,使得
d = e^-1 mod phi(n)
  = e^-1 mod (p-1)*(q-1)

我们可以验证这一点
d * e = 40571156445208705 = 1 mod 10142789111302176

这很重要,因为如果您有一条明文消息 m 那么密文是
c = m^e mod n

然后你解密它
m = c^d = (m^e)^d = (m^(e*d)) = (m^(e*e^-1)) = m^1 (mod n)

例如,我可以使用您老师的公钥“加密”消息 123456789:
m = 123456789

这会给我以下密文:
c = m^e mod n
  = 123456789^5 mod 10142789312725007
  = 7487844069764171

(请注意,“e”在实践中应该大得多,因为对于较小的“m”值,您甚至不会超过 n)

无论如何,现在我们有“c”并且可以用“d”反转它
m = c^d mod n
  = 7487844069764171^8114231289041741 mod 10142789312725007
  = 123456789

显然,您不能直接计算“7487844069764171^8114231289041741”,因为它有 128,808,202,574,088,302 位数,因此您必须使用 modular exponentiation 技巧。

在“真实世界”中, n 显然要大得多。如果您想查看 HTTPS 如何在幕后使用 RSA 的真实示例,其中包含 617 位 n e 0x2518161521 的 0x2518161521 的 0x2518162521 的 0x2518162521 博文 0x2518162521 0x2318162521"

关于math - 破解短 RSA key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4078902/

10-13 07:34