RSA:使用扩展欧几里得算法的私钥计算

Posted

技术标签:

【中文标题】RSA:使用扩展欧几里得算法的私钥计算【英文标题】:RSA: Private key calculation with Extended Euclidean Algorithm 【发布时间】:2011-05-24 06:50:36 【问题描述】:

我是一名高中生,正在写一篇关于 RSA 的论文,我正在用一些非常小的素数做一个例子。我了解系统的工作原理,但我无法终生使用扩展欧几里得算法计算私钥。

这是我到目前为止所做的:

我选择了质数 p=37 和 q=89 计算出 N=3293 我计算出 (p-1)(q-1)=3168 我选择了一个数字 e,以便 e 和 3168 互质。我正在用标准的欧几里得算法检查这个,效果很好。我的 e=25

现在我只需要计算私钥 d,它应该满足 ed=1 (mod 3168)

使用扩展欧几里得算法找到 d 使得 de+tN=1 我得到 -887•25+7•3168=1。我把 7 扔掉,得到 d=-887。然而,试图解密消息,这是行不通的。

我从我的书中知道 d 应该是 2281,它有效,但我不知道他们是如何得出这个数字的。

有人可以帮忙吗?在过去的 4 个小时里,我一直在尝试解决这个问题,并且到处寻找答案。我正在手动执行扩展欧几里得算法,但由于结果有效,我的计算应该是正确的。

提前致谢,

疯狂

【问题讨论】:

正如 Ninefingers 所说,只需使用正余数即可。等效地,要将某事物的负幂 x 首先计算其逆幂,然后将其提升为 (-x) 幂(-x 是正数,因为 x 是负数)。 我很困惑你如何得到“de+tN=1”-887•25+7•3168=1。我理解 e = 25 但 d、t 和 N 没有意义。 d、t 和 N 分别代表什么?为什么你可以扔掉 7?凯西 【参考方案1】:

你离得太近了,你会踢自己。

3168-887=2281。

具体来说,如果你有一个 mod x,那么 A 必须满足0<=a<x。如果不是,请根据需要多次添加或减去 x,直到您在此范围内。这称为模运算。

您可能想阅读线性全余和数论。这些主题是英国学位级别的数学(我猜你会称之为大学),所以如果看起来有点奇怪,请不要担心。线性同余只是说-887 mod 31682281 mod 3168 实际上是同一件事,因为它们属于同一类,该类在所需范围内结果为2281 mod 31682281+3168 mod 3168 也属于该类。

玩得开心!

附: PARI/GP 是实用数理论家用于计算的实用程序数。可能值得一看。

【讨论】:

以上是关于RSA:使用扩展欧几里得算法的私钥计算的主要内容,如果未能解决你的问题,请参考以下文章

RSA算法中利用欧几里得算法求d详细过程

RSA加密与实践

利用扩展的欧几里得算法求逆元

扩展欧几里得算法求逆元算法结果是负数

加密算法学习

HDU RSA 扩展欧几里得