从我通过阅读各种材料了解到的任何一点点来看,公私钥对是非对称加密的基础,也是选择 2 个素数(大致是您的私钥)并将它们相乘(大致是您的公钥)的基础。在我看来,如果您知道私钥,则可以生成公钥。这是正确的还是我弄错了什么?
让我更困惑的是,仅使用私钥(使用 .NET 类 RSACryptoServiceProvider)无法将 RSA 密钥序列化为 XML 。不确定此限制是否是故意的!
从我通过阅读各种材料了解到的任何一点点来看,公私钥对是非对称加密的基础,也是选择 2 个素数(大致是您的私钥)并将它们相乘(大致是您的公钥)的基础。在我看来,如果您知道私钥,则可以生成公钥。这是正确的还是我弄错了什么?
让我更困惑的是,仅使用私钥(使用 .NET 类 RSACryptoServiceProvider)无法将 RSA 密钥序列化为 XML 。不确定此限制是否是故意的!
在大多数非对称密码系统实现中,唯一可以确保的事实是您无法从公钥中找到私钥。反过来,在大多数情况下,从私钥中找到公钥是微不足道的。
例如,在 RSA 中,您可以使用以下方法从私钥创建公钥:
openssl rsa -in private.pem -pubout -out public.pem
具有误导性的是术语:“私钥”是指两个不同的概念,无论您是在谈论理论,还是在谈论实际实施:
0x10001
默认情况下在 openssl 中,尽管可以更改,但强烈建议仅使用非常具体的值) . 因此,从私钥推导出公钥(e, n)是微不足道的,原因不止一个。这取决于加密系统。
在RSA中,我们有(引用维基百科):
公钥由模数 n 和公开(或加密)指数 e 组成。私钥由模数 n 和必须保密的私钥(或解密)指数 d 组成。
现在,如果我们有 n 和 d(私钥),我们只缺少 e 作为公钥。但 e 通常相当小(小于三位数),甚至是固定的(常见值为 65537)。在这些情况下,获取公钥是微不足道的。
对于Elliptic Curve Diffie-Hellman,私钥是 d,公钥是 dG(G 也是公开的),所以它也很简单。
这取决于算法,以及“私钥”的含义。
RSA 私钥通常以“中国剩余定理”的形式存储。例如,RSAPrivateKey
在 PKCS #1 中定义并被许多其他加密标准重新使用的结构采用这种形式。这种形式包括两个通常用p
和表示的秘密数字q
,从中可以计算出总金额。使用 totient 和私有指数,可以快速计算公共指数。
在任何情况下,大多数 RSA 密钥对都使用 65537 作为公共指数,并且模数始终作为私钥的一部分携带。
在任何公钥密码系统中,公钥在数学上都与私钥相关。这很简单。
公钥是在生成时从私钥派生的,并且在将来的任何时候使用私钥都可以轻松地重新派生公钥。
走另一条路是不可行的。给定一个公钥,导出私钥并不容易。这就是为什么我们可以安全地与其他人共享公钥。如果你有足够的时间/CPU 周期,你可以暴力破解它,但等待对密钥的数学攻击可能更容易。
对私钥是什么存在误解。私钥只是 (d,n) 对,仅考虑到这一点,从它生成公钥是不可行的,除非您可以假设公钥是 65537,几乎所有 rsa 密钥都是这种情况。
如果出于任何原因,公共指数是一个更大的数字,则您无法从私有指数创建公共密钥。
也就是说,存储为 pem 文件的“私钥”的值不仅是私钥,还包含主要因素(除其他外),因此很容易从中生成公钥。
对于 OpenSSH 和ssh-keygen的特定情况,是的,您可以:
ssh-keygen -y
此选项将读取私有 OpenSSH 格式文件并将公钥打印到标准输出。
通常,这取决于算法和您标记私钥的内容。但是,任何明智的实现都会在秘密文件中包含完整的信息(公钥和私钥)。
是的,可以使用私钥获取公钥。可以使用openssl来完成。请参考以下命令以使用私钥获取公钥。
openssl rsa -in privatekey.pem -pubout
Please refer this screenshot : Fetch public key using private key
是的,通过访问私钥,可以生成公钥
公钥是模数 N(和公共指数 e,通常为 65537),私钥由两个素数 p、q(和私人指数 d,有时还有 CRT 部分 d_p、d_q 用于加速)给出,基本上你有 N=pq 和 e d=1 mod ((p-1) (q-1)),您还可以使用给定私钥的 CRT 计算 d_p 和 d_q,公钥模数的计算是“无聊”乘法,公共指数在规范中或使用扩展计算如果标准 e 不够好,则使用 euclid 算法。给定公钥,私钥的计算需要找到 d(RSA 问题)或 p,q(因式分解,请参阅数字字段筛以获得最佳算法)。这些问题在合理的条件下被证明是等价的 [Breaking RSA Generically is Equivalent to Factoring, D. Aggarwal and U. Maurer, 2008]
这在理论上是可能的,但对于大密钥在计算上是不可行的。