【问题标题】:How to generate RSA public key from private key?如何从私钥生成 RSA 公钥?
【发布时间】:2019-08-15 21:21:34
【问题描述】:

我正在阅读关于 SO 的问题,发现我们可以在 python 中使用 openssl 从私钥生成公钥。现在我想知道这是如何工作的(数学部分)以及如何在不使用openssl 或任何其他库的情况下在 python 或 C 中实现该方法?

【问题讨论】:

  • 我认为 PKE 的全部意义在于实际上不可能从另一个密钥中派生出一个密钥,从而使安全的非对称加密成为可能。两者都是具有巨大指数的模算术方程的(相等)部分。
  • this

标签: encryption rsa public-key-encryption public-key pyopenssl


【解决方案1】:

如果私钥以 CRT 格式(中国剩余定理)存储,则不涉及数学;格式包括公共指数。这就是 OpenSSL 工具从私钥“创建”公钥的方式。

如果私有不是以 CRT 格式存储的,那么在给定私有指数的情况下计算公共指数通常是不可行的。但是,您可以猜测常见的公共指数并轻松验证您的猜测。

从数学上讲,为了使用另一个指数快速计算一个指数,您需要知道 totient,这是一个根据模数因子计算得出的数字。当然,RSA 的安全性取决于分解模数的不可行性。这种关系是对称的;您是否知道公共指数并尝试计算私人指数并不重要,反之亦然。

【讨论】: