.net - 给定一个私钥,是否可以推导出它的公钥?

标签 .net encryption cryptography encryption-asymmetric

从我通过阅读各种 Material 了解到的一点点来看,公钥-私钥对是非对称加密的基础,也是选择 2 个素数(大致是您的私钥)并将它们相乘(大致是您的公钥)的基础)。在我看来,如果您知道私钥,就可以生成公钥。这是正确的还是我弄错了什么?

让我更困惑的是,不可能仅使用私钥(使用 .NET 类 RSACryptoServiceProvider)将 RSA key 序列化为 XML。不确定这个限制是有意还是无意!

最佳答案

在大多数非对称加密系统实现中,唯一可以保证的事实是您无法从公钥中找到私钥。相反,在大多数情况下,从私钥找到公钥是微不足道的。

例如,在 RSA 中,您可以使用私钥创建公钥:

openssl rsa -in private.pem -pubout -out public.pem

令人误解的是术语:“私钥”指的是两个不同的概念,无论您是在谈论理论,还是在谈论实际实现:

  • 理论私钥是一对(d, n),它与(e, n)具有完美的对称(数学)关系。如果您比较这些,则无法从其中一个计算出另一个。
  • 实用私钥(例如在 openssl 实现中)是指包含(d, n)的文件,但也包含几个用于解码速度目的的重要中间值。除此之外,理论上“未知”的公钥e部分通常按照约定固定为通用值(在openssl中默认为0x10001,尽管它可以更改,强烈建议仅坚持 very specific values )。因此,从私钥推导公钥(e, n)是微不足道的,原因不止一个。

关于.net - 给定一个私钥,是否可以推导出它的公钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/696472/

相关文章:

.net - Google Cloud 和 Google.Cloud.Functions.Framework

c# - 如何在 C# 中使用 Selenium WebDriver 下载图像

java - 直接编码/解码不会产生原始数据

c# - 如何用私钥加密字符串并用公钥解密?

ios - ECDSA secp256k1 key 对在 Swift 上签名

.net - 如何在c# RSA中使用私钥加密并使用公钥解密

javascript - scrypt.js 失败,N 大于 2^14

c# - 使用 .NET 在 Windows XP 中刻录 DVD 所需的基本 COM 组件是什么?

c# - 如何更改被 mock 的对象?

ruby - 如何管理在硬盘驱动器上存储加密用户凭据的 Ruby 应用程序中的加密 key ?