给定私钥,是否可以派生其公钥?

时间:2009-03-30 08:54:11

标签: .net encryption cryptography encryption-asymmetric

通过阅读各种材料我理解的很少,公钥 - 私钥对是非对称加密的基础,也是选择2个素数(大致是你的私钥)并乘以它们(大致是你的公钥)的东西),如果您知道私钥,我似乎可以生成公钥。这是正确的还是我误会了什么?

[编辑]

让我更加困惑的是,无法使用私钥(使用.NET类RSACryptoServiceProvider)将RSA密钥序列化为XML。不确定这种限制是否有意!

10 个答案:

答案 0 :(得分:45)

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

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

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

术语误导的是:“私钥”指的是2个不同的概念,无论您是在谈论理论,还是在谈论实际实施:

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

答案 1 :(得分:32)

这取决于加密系统。

RSA 中,我们(引用维基百科):

  

公钥由模数n和公共(或加密)指数e组成。该   私钥由模数n和私有(或解密)指数d组成   必须保守秘密。

现在,如果我们有n和d(私钥),我们只缺少公钥的e。但是e通常相当小(少于三位数),甚至是固定的(常见值为65537)。在这些情况下,获取公钥是微不足道的。

对于 Elliptic Curve Diffie-Hellman ,私钥是d,公钥dG(G也是公共的),所以它也很简单。

答案 2 :(得分:9)

这取决于算法,以及“私钥”的含义。

RSA私钥通常存储在“中国剩余定理”表格中。例如,PKCS#1中定义并由许多其他加密标准重用的RSAPrivateKey结构采用这种形式。此表单包含通常表示为pq的两个密码,从中计算出总数。使用totient和private exponent,可以快速计算公共指数。

在任何情况下,大多数RSA密钥对使用65537作为公共指数,并且模数总是作为私钥的一部分携带。

答案 3 :(得分:3)

在任何公钥加密系统中,公钥在数学上与私钥相关。这很简单。

公钥是在生成时从私钥派生的,并且在将来的任何一点都可以使用私钥,可以轻松地重新派生公钥。

走另一条路是不可行的。给定公钥,导出私钥并不容易。这就是我们可以安全地与其他人共享公钥的原因。如果你有足够的时间/ CPU周期,你可以强制它,但可能更容易等待对密钥的数学攻击。

答案 4 :(得分:2)

对于OpenSSH和ssh-keygen的特定情况,是的,您可以

  

ssh-keygen -y

     

此选项将读取私有OpenSSH格式文件并将公钥打印到stdout。


通常,它取决于算法以及您为私钥标记的内容。但是,任何合理的实现都将包括秘密文件中的完整信息(公钥和私钥)。

答案 5 :(得分:2)

对私钥的含义存在误解。私钥只是(d,n)对,除此之外,从它生成公钥是不可行的,除非你可以假设公共指数是65537,几乎所有rsa密钥就是这种情况。 / p>

如果出于任何原因,公共指数是一个较大的数字,则无法从私人指定中创建公钥。

也就是说,该值存储为"私钥" pem文件不仅仅是私钥,还包含主要因素(以及其他内容),因此很容易从中生成公钥。

答案 6 :(得分:1)

是的,访问私钥可以生成公钥

答案 7 :(得分:1)

是的,可以使用私钥获取公钥。可以使用 openssl 来完成。请参考以下命令使用私钥获取公钥。

openssl rsa -in privatekey.pem -pubout

请参考此截图:Fetch public key using private key

答案 8 :(得分:0)

公钥是模数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不够好,给定私钥,公钥模数的计算是“无聊的”乘法,公共指数是规范的或使用扩展的欧几里德算法计算。 给定公钥,私钥的计算需要找到d(RSA问题)或p,q(因子分解,参见数字字段筛选以获得最佳算法)。在合理的条件下,这些问题被证明是相同的[打破RSA通常相当于保理,D. Aggarwal和U. Maurer,2008]

答案 9 :(得分:-2)

理论上可行,但对于大键,计算上不可行。