计算RSA中的d值

问题描述 投票:1回答:1

我看到了几个关于这个的问题,但大多数都是以无益的方式回答,或者根本没有得到正确的答案。 我有这些变量:

  • p = 31
  • q = 23
  • e - 公钥指数= 223
  • 非 - (p-1)*(q-1)= 660

现在我需要计算d变量(我知道它等于367)。问题是我不知道怎么做。我在互联网上找到了这个等式,但它不起作用(或者我不能使用它):

e⋅d=1modϕ(n)

当我看到这个等式时,我认为它意味着:

d=(1modϕ(n))/e

但显然它不是因为367(1modφ(n))/ e = 1%660/223 = 1/223!= 367 也许我不明白,我做错了 - 这就是我问的原因。

我做了一些更多的研究,我找到了第二个等式:

d=1/e mod ϕ(n)
or
d=e^-1 mod ϕ(n)

但最终它给出了相同的结果:1 / emodφ(n)= 1/223%660 = 1/223!= 367

然后我看到有人说要解决这个等式你需要extended Euclidean algorithm如果有人知道如何用它来解决这个问题,那么如果你帮助我,我会非常感激。

rsa private-key public-key
1个回答
0
投票

如果你想计算类似a / b mod p的东西,你不能把它除去并从中得到除法余数。相反,你必须找到这样的b-1,即b-1 = 1 / b mod p(b-1是b mod p的模乘法逆)。如果p是素数,你可以使用Fermat's little theorem。它表明对于任何素数p,ap = a mod p <=> a(p-2)= 1 / a mod p。因此,你必须计算像* b(p - 2)mod p这样的东西,而不是a / b mod p。 b(p-2)可以使用exponentiation by squaring在O(log(p))中计算。如果p不是素数,则当且仅当GCD(b,p)= 1时,存在模乘法逆。这里,我们可以使用extended euclidean algorithm在对数时间内求解方程bx + py = 1。当我们有bx + py = 1时,我们可以把它取为mod p,我们有bx = 1 mod p <=> x = 1 / b mod p,所以x是我们的b-1。如果GCD(b,p)≠1,则不存在b-1 mod p。

使用费马定理或欧几里得算法在相同的时间复杂度下给出了相同的结果,但是当我们想要计算不是素数的模数时,也可以使用欧几里得算法(但它必须与数字相互作用想要除以)。

© www.soinside.com 2019 - 2024. All rights reserved.