为什么 OpenSSL::PKey::RSA 密钥既是私钥又是 public?
Why is an OpenSSL::PKey::RSA key both private and public?
我正在学习 OpenSSL
ruby 模块。
下面显示的是一个窥探会话,我在其中使用 RSA 非对称 public 密钥算法生成密钥。我还调用了 #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
- 为什么
#<OpenSSL::PKey::RSA:0x007fc0751cb028>
对象既是 public 又是私有的?
通常私钥的数据结构也包含public指数。它们首先在相同的密钥 pair 生成中生成。
很容易将它们存储在一起,因为 public 键是模数 + public 指数(通常是值 0x10001,费马的第四个素数)。模数当然也是私钥的一部分,所以不需要重复。
public 密钥也可用于防止某些边信道攻击,尽管这在软件中不是什么大问题。
私钥是否也可以用作public密钥,以及public指数是否与私钥一起存储,这取决于软件。但它很常见,例如PKCS#11(用于软件、智能卡和 HSM)中的私钥对象也包含 public 指数。另一方面,Java 有单独的 PrivateKey
和 PublicKey
类,其中 PrivateKey
不包含 public 指数(或者它不包含无论如何不要通过 public API 暴露它。
最后,如果不咨询最初的 OpenSSL 人员(我想是 Young 先生和 Hudson 先生),我们无法回答这个问题,但是存储 public 指数也是有充分理由的,并且作为public 关键是 public 它也没有坏处。
我正在学习 OpenSSL
ruby 模块。
下面显示的是一个窥探会话,我在其中使用 RSA 非对称 public 密钥算法生成密钥。我还调用了 #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
- 为什么
#<OpenSSL::PKey::RSA:0x007fc0751cb028>
对象既是 public 又是私有的?
通常私钥的数据结构也包含public指数。它们首先在相同的密钥 pair 生成中生成。
很容易将它们存储在一起,因为 public 键是模数 + public 指数(通常是值 0x10001,费马的第四个素数)。模数当然也是私钥的一部分,所以不需要重复。
public 密钥也可用于防止某些边信道攻击,尽管这在软件中不是什么大问题。
私钥是否也可以用作public密钥,以及public指数是否与私钥一起存储,这取决于软件。但它很常见,例如PKCS#11(用于软件、智能卡和 HSM)中的私钥对象也包含 public 指数。另一方面,Java 有单独的 PrivateKey
和 PublicKey
类,其中 PrivateKey
不包含 public 指数(或者它不包含无论如何不要通过 public API 暴露它。
最后,如果不咨询最初的 OpenSSL 人员(我想是 Young 先生和 Hudson 先生),我们无法回答这个问题,但是存储 public 指数也是有充分理由的,并且作为public 关键是 public 它也没有坏处。