我正在学习OpenSSL
ruby模块。
下面显示的是一个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>
对象既是公共的又是私有的?答案 0 :(得分:2)
私钥的数据结构通常也包含公共指数。它们首先在相同的密钥对生成中生成。
很容易将它们存储在一起,因为公钥是模数+公共指数(通常是值0x10001,费马的第四个素数)。模数当然也是私钥的一部分,因此不需要重复。
公钥也可用于防范某些侧通道攻击,尽管这在软件中并不是一个大问题。
如果私钥也可以用作公钥,并且公共指数与私钥一起存储,则取决于软件。但它很常见,例如PKCS#11中的私钥对象(用于软件,智能卡和HSM)也包含公共指数。另一方面,Java有单独的PrivateKey
和PublicKey
类,其中PrivateKey
不包含公共指数(或者它不会通过公共API公开它)。
最后,如果没有咨询原来的OpenSSL人员(Young先生和Hudson先生,我想),我们无法回答这个问题,但是有充分的理由存储公共指数,而且公钥是公开的,它不会也不疼。