这是我在学校做的作业。我无法生成私钥。我的主要问题是理解我的方程之间的关系。要设置所有内容,我们有:
p = 61
q = 53
n = p * q (which equals 3233)
从这里我们得到 n ( phi(n)
) 的总和等于 3120,现在我们可以选择素数 e;其中 1 < e < 3120
e = 17
好吧,很简单。
对于我的任务,我们已经意识到d = 2753
,但是我仍然需要能够任意生成这个值。
现在这是我遇到麻烦的地方。我一直在阅读维基百科以了解某些地方没有联系。我知道我需要找到我们的私人指数的模乘逆。e (mod phi(n))
d
阅读维基百科告诉我们找到使用扩展欧几里得算法所需的 mmi 。我在python中实现了如下算法:
def egcd(a, b):
x, lastX = 0, 1
y, lastY = 1, 0
while (b != 0):
q = a // b
a, b = b, a % b
x, lastX = lastX - q * x, x
y, lastY = lastY - q * y, y
return (lastX, lastY)
这就是我迷路的地方。据我现在的理解,等式ax + bx = gcd(a, b) = 1
是相同的e*x + phi(n)*y = gcd(e, phi(n)) = 1
。所以我们打电话egcd(e, phi(n))
,现在我得到[-367, 2]
了我的 x 和 y。
从这里我真的不知道去哪里。我读过这个类似的问题,我看到发生了一些替换,但我不明白这些数字与我得到的答案或我开始使用的值有什么关系。有人可以务实地向我解释我需要从这里做什么吗?(当我务实地说,我的意思是没有实际代码。伪代码很好,但如果我得到实际代码,我将无法在没有抄袭作业的情况下学习,这是一个很大的禁忌)。
与往常一样,我们真诚地感谢任何帮助。感谢大家!
(是的,我看过这些:RSA: Private key calculation with Extended Euclidean Algorithm and In RSA encryption, how do I find d, given p, q, e and c?)