如何从私钥生成 RSA public 密钥?

How to generate RSA public key from private key?

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

如果私钥是用CRT格式存储的(中国剩余定理),则不涉及数学;该格式包括 public 指数。这就是 OpenSSL 如何使用 "create" 来自私钥的 public 密钥。

如果私有未以 CRT 格式存储,则通常无法在给定私有指数的情况下计算 public 指数。但是,您可以猜测常见的 public 指数并轻松验证您的猜测。

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