【发布时间】:2013-09-27 05:23:17
【问题描述】:
这是我在学校做的一项作业。我无法生成私钥。我的主要问题是理解我的方程之间的关系。要设置所有内容,我们有:
p = 61
q = 53
n = p * q (which equals 3233)
从这里我们有n的总和(phi(n))等于3120,现在我们可以选择素数e;其中 1
e = 17
好吧,很简单。
对于我的任务,我们已经知道d = 2753,但是我仍然需要能够任意生成这个值。
现在我遇到了麻烦。我一直在阅读维基百科以了解某些地方没有联系。我知道我需要找到e (mod phi(n)) 中的modular multiplicative inverse,这将是我们的私有指数d。
阅读维基百科告诉我们找到我们需要使用Extended Euclidian Algorithm的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)),现在我的x 和y 得到[-367, 2]。
从这里我真的不知道该去哪里。我已经阅读了this similar question 并且我看到发生了一些替换,但我不明白这些数字与我得到的答案或我开始使用的值有什么关系。有人可以务实地向我解释我需要从这里做什么吗? (当我务实地说,我的意思是没有实际代码。伪代码很好,但如果我得到实际代码,我将无法在没有抄袭作业的情况下学习,这是一个很大的禁忌)。
与往常一样,我们真诚地感谢您的任何帮助。谢谢大家!
(是的,我见过这些:RSA: Private key calculation with Extended Euclidean Algorithm 和 In RSA encryption, how do I find d, given p, q, e and c?)
【问题讨论】:
-
-367 和 2753 是同一个数字(mod 3120)。
-
天哪。你一定是在开玩笑吧。几个小时以来,我一直在玩弄几十种不同的组合,但没有成功。我不知道我没有想到那个,谢谢一百万!
-
要记住的一点是,在大多数编程语言中,
%不是取模函数,而是 remainder 函数。差别不大,但如果你最终得到一个负整数而不是正整数,那会很有趣。 -
哦,真的吗?这绝对有帮助。在尝试其他几个示例时,我得到了一些不一致的结果,我不知道为什么(我仍在查看我的代码,看看我是否在某个地方搞砸了,这很有可能。)。对于这些意图和目的,有没有比使用 % 运算符更正确的方法来在 python3 中找到数字的 mod?
标签: python algorithm encryption rsa modular-arithmetic