2017-03-27 42 views
0

我在学习OpenSSL ruby​​模块。为什么OpenSSL :: PKey :: RSA密钥都是私有的和公共的?

下面显示的是pry会话,我使用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 
  • 为什么#<OpenSSL::PKey::RSA:0x007fc0751cb028>对象的公共和私人?

回答

2

通常私钥的数据结构还包含公开指数。它们生成在同一个钥匙世代。

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

公共密钥也可以用来防止一些旁路通道攻击,尽管这在软件中并不是什么大问题。


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

最后,我们不能在没有咨询原始OpenSSL家伙(Young先生和Hudson先生,我想)的情况下回答这个问题,但是存储公开指数也有很好的理由,并且由于公钥是公开的也没有伤害。

相关问题