【问题标题】:Why do my RSA values for p, q, e = 3 result in unsuccessful decryption?为什么我的 p、q、e = 3 的 RSA 值会导致解密失败?
【发布时间】:2022-01-05 12:50:01
【问题描述】:

我实际上是在尝试解决密码设置 5 挑战 39。我正在尝试为一些较大的素数 p 和 q,e = 3 实施 RSA。我对此感到困惑几个小时.

为了生成素数,我使用 API 来获取每个素数。我一直生成 p 直到 gcd(p - 1, e) == 1,然后重复 q 直到 gcd(q - 1, e) == 1。我已经测试了 gcd((p - 1) * (q - 1), e) == 1。例如,我最终得到 p == 16226322033026808497 和 q == 14712923008023747557。

然后我进行简单的 RSA 数学运算来计算其他项,加密消息 42(无填充),解密该密码,并将生成的明文与原始消息进行比较。我已经生成了很多很多 ps 和 qs,但它永远不会匹配。

有人能解释一下为什么这不起作用,请帮我生成一些好的参数吗?

Python:

p = 16226322033026808497
q = 14712923008023747557
e = 3
print(f'1 == gcd(p - 1, e) == {gcd(p - 1, e)}')
print(f'1 == gcd(p - 1, e) == {gcd(q - 1, e)}')

phi = (p - 1) * (q - 1)
print(f'phi == {phi}')
print(f'1 == gcd(phi, e) == {gcd(phi, e)}')
n = p * q
print(f'n == {n}')
d = invmod(e, phi)
print(f'd == {d}')
print(f'1 == (d * e) % phi == {(d * e) % phi}')

m = 42
c = pow(m, e, n);
print(f'c == m**e % n == {c}')
p = pow(c, d, n);
print(f'p == c**d % n == {p}')

输出:

1 == gcd(p - 1, e) == 1
1 == gcd(p - 1, e) == 1
phi == 238736626775322802092761613952260035776
1 == gcd(phi, e) == 1
n == 238736626775322802123700858993310591829
d == 159157751183548534728507742634840023851
1 == (d * e) % phi == 1
c == m**e % n == 74088
p == c**d % n == 145835535613124975159078105657928869819

【问题讨论】:

  • 选择足够小的pq 以手动完成它,然后将您的结果与程序输出的结果进行比较。这应该可以帮助您缩小问题所在。
  • 我用 p = 11, q = 23, e = 3 测试过。没问题。我在某处发现 p = 3372213049, q = 3372213067, e = 6557。没问题,但我想要 e = 3。另外,我正在上面的代码中运行我所知道的所有检查(对于互质) - 我错过了什么?
  • 好吧,如果你选择pq 作为素数会有所帮助:你的p == 1969260091 * 8239806467 和你的q == 1756690123 * 8375366159
  • 素数测试你是怎么做的?!
  • 我用过sympy.primefactors

标签: python rsa


【解决方案1】:

我用来生成素数的 API 实际上是在提供复合,这会阻止有意义的解密。使用更可靠的来源生成,例如,我发现 p == 18015945217661527751,q == 11788823512629961979,它们实际上是素数。我现在可以成功解密回原始消息。

我发现https://asecuritysite.com/encryption/random3 给出了一些合理的质数。

【讨论】:

  • ...API...什么API?
  • 我点击了支持bigprimes.org/RSA-challenge的端点,但我在选择它时犯了一个错误。它是一个给出随机“RSA 挑战”(即组合)的端点,而不是一个给出随机素数的端点。
猜你喜欢
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
相关资源
最近更新 更多