【问题标题】:Why is an OpenSSL::PKey::RSA key both private and public?为什么 OpenSSL::PKey::RSA 密钥既是私有的又是公有的?
【发布时间】:2017-03-27 23:12:24
【问题描述】:

我正在学习OpenSSL ruby​​ 模块。

下面显示的是一个 pry session,我使用RSA 非对称公钥算法生成一个密钥。我还调用了#private?#public? 实例方法:

[1] pry(main)> require 'openssl'
=> true
[2] pry(main)> alices_key = OpenSSL::PKey::RSA.new 2048
=> #<OpenSSL::PKey::RSA:0x007fc0751cb028>
[3] pry(main)> alices_key.public?
=> true
[4] pry(main)> alices_key.private?
=> true
  • 为什么#&lt;OpenSSL::PKey::RSA:0x007fc0751cb028&gt; 对象既是公共的又是私有的?

【问题讨论】:

    标签: ruby openssl cryptography rsa


    【解决方案1】:

    通常私钥的数据结构也包含公共指数。它们首先在同一密钥 pair 生成中生成。

    很容易将它们存储在一起,因为公钥是模数 + 公共指数(通常是值 0x10001,费马的第四个素数)。模数当然也是私钥的一部分,所以不需要复制。

    公钥也可用于防止某些侧信道攻击,尽管这在软件中并不是什么大问题。


    私钥是否也可以用作公钥以及公钥是否与私钥一起存储取决于软件。但它很常见,例如PKCS#11 中的私钥对象(用于软件、智能卡和 HSM)也包含公共指数。另一方面,Java 有单独的 PrivateKeyPublicKey 类,其中 PrivateKey 不包含公共指数(或者它不通过公共 API 公开它)。

    最后,如果不咨询最初的 OpenSSL 人员(我想是 Young 先生和 Hudson 先生),我们就无法回答这个问题,但存储公共指数也是有充分理由的,而且由于公钥是公开的,因此它不会也不疼。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 2010-09-21
      • 2017-11-09
      • 2020-02-28
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多