计算RSA中的d值

时间:2018-03-01 20:08:48

标签: rsa private-key public-key

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

  • p = 31
  • q = 23
  • e - 公钥指数= 223
  • phi - (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如果有人知道怎么用它来解决这个问题,那么如果你帮助我,我会非常感激。

1 个答案:

答案 0 :(得分:0)

如果你想计算类似a / b mod p的东西,你就不能将它除去并从中得到除法余数。相反,你必须找到这样的b -1 b -1 = 1 / b mod p(b -1 是模乘的逆of b mod p)。如果p是素数,则可以使用Fermat's little theorem。它表明,对于任何素数p, p = a mod p< => a (p - 2) = 1 / a mod p。因此,您必须计算类似* b (p - 2) mod p的内容,而不是a / b mod p。 b (p - 2)可以用O(log(p))计算  使用exponentiation by squaring。如果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不存在。

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