我想创建自己的RSA密钥对(实际上我想用自己的私钥创建对密钥),但我意识到我应该使用RSA Class为我生成的密钥导致公共(e)和私人(d)密钥在数学上是相关的。
我一直在研究如何找到这样做的方法,最后发现可以获得私钥的公钥。
所以我找到了解决方案! 计算我自己的私钥的公钥。
这不是传统的工作,所以我认为在任何编程语言中都没有这个功能,我应该根据RSA算法创建自己的函数,根据给定的D计算E. < / p>
知道怎么做吗?
(我更喜欢C#!但我实际上想要一个解决方案(事件是一个数学公式!),语言并不重要。)
答案 0 :(得分:3)
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(eulers phi函数)...这个值是一个秘密......每个拥有这个值的人都可以计算反向密钥......在RSA phi(n)的情况下是( p-1)*(Q-1)
P和Q是RSA中使用的两个大素数... N = P * Q
现在你可以看到,要计算给定键的另一个键,你需要知道phi(n)...唯一已知的获得phi(N)的方法是eulers phi函数,为此,你将需要N的因子...因为N是两个大素数的乘积,你需要那两个素数......所以要么你有一个包含P和Q的键(实际上其中一个就足够了,因为你可以将N分开得到另一个......)或者你必须自己分解N ......
只包含两个大素因子的大数的因子分解是一项需要时间的任务......这就是RSA的安全性......谁能做到这一点,可以破坏RSA密钥
所以要回到你的具体问题:
如果你想通过D或D来计算E到E并不重要...数学问题是相同的...你可以解决这个 IF,并且只有你有公共模数N的至少一个因子