如何计算 RSA 私钥 (D) 的公钥 (E)? [复制]
Posted
技术标签:
【中文标题】如何计算 RSA 私钥 (D) 的公钥 (E)? [复制]【英文标题】:How to calculate the public key (E) of an RSA private key (D)? [duplicate] 【发布时间】:2014-01-24 10:45:26 【问题描述】:出于某种原因,我想创建自己的 RSA 密钥对(实际上我想用自己的私钥创建对密钥),但我意识到我应该使用 RSA 类为我生成的密钥,因为它会公开 (e) 和私人 (d) 密钥在数学上相互关联。
我一直在研究寻找一种方法来做到这一点,最后发现可以获取私钥的公钥。
所以我找到了解决方案! 计算我自己的私钥的公钥。
这不是一项传统的工作,所以我认为在任何编程语言中都没有用于此目的的函数,我应该基于 RSA 算法创建自己的函数,根据给定的 D 计算 E。
知道怎么做吗?
(我更喜欢 C#!但我实际上想要一个解决方案(事件是一个数学公式!),语言无关紧要。)
【问题讨论】:
***.com/questions/5244129/… 似乎是相关的,但实际上这篇文章没有我的问题的答案 是的,这是可能的(正如链接问题所暗示的那样)。但是这个问题是题外话,除非你正在努力用一种特定的语言来实现它? 我没有指定语言,因为这并不重要,我想要解决方案。所以我没有限制任何人用特定的编程语言回答我的问题。 我把帖子说清楚了! 【参考方案1】:rsa 密钥对由公钥(指数 e 和模数 N)和私钥(指数 d 和模数 N)组成
在这个简单的版本中,如果您想从公共或其他人那里计算私钥是相同的......几乎不可能
...然而...
如果出于性能原因,您碰巧有一个包含更多值的私钥(例如 d、dQ、dP、P、Q、N),那么您将拥有计算公共指数所需的一切:
将 phi_n 计算为 (P-1)*(Q-1)
运行扩展欧几里得算法来计算 d mod phi_n 的乘法逆...这是您的公共指数...因为 N 已知 (P*Q) 您拥有公钥
编辑(更准确地说):
指数 e 和 d 之间没有数学上的区别...一个是另一个的乘法逆 ...
以最简单的方式查看 RSA,密钥对的一个密钥只不过是一个指数和一个公共模数......事实上,当您创建密钥对并计算值 e 和 d 时,您可能将它们相互交换,一切仍然有效
要计算乘法模逆,您需要模...现在出现问题的部分:有两个
一个模数是 N ...这是两个密钥的公共模数 ...这个值不是秘密,因为它是公钥的一部分
第二个模数是 N 的 phi(欧拉 phi 函数)......这个值是一个秘密......每个拥有这个值的人都可以计算逆密钥......在 RSA phi(n) 的情况下是 ( P-1)*(Q-1)
P 和 Q 是 RSA 中使用的两个大素数 ... N = P * Q
现在您可以看到,要计算给定密钥的另一个密钥,您需要知道 phi(n) ...获得 phi(N) 的唯一已知方法是欧拉 phi 函数,为此,您将需要 N 的因子...因为 N 是两个大素数的乘积,所以您需要这两个素数...所以要么你有一个包含 P 和 Q 的密钥(实际上其中一个就足够了,因为你可以划分 N得到另一个......)或者你将不得不自己分解N......
仅由两个大素因数组成的大数因式分解是一项需要时间的任务……这就是 RSA 的安全性……谁能做到这一点,就可以破解 RSA 密钥
所以回到你的具体问题:
不管你是想通过 D 计算 E 还是通过 E 计算 D ...数学问题是相同的 ...你可以解决这个 如果,并且仅当你有公模N的至少一个因子
【讨论】:
实际上我希望能够使用我的自定义私钥创建一个 RSA 密钥对。我搜索了一下,发现我们可以通过D计算E,但我们不能通过E得到D。现在我有D,我想得到它。 非常感谢您的完整回答。以上是关于如何计算 RSA 私钥 (D) 的公钥 (E)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章