我最近遇到了一种情况,我绝对需要使用该方法OpenSSL::PKey::RSA#params
。但是,该文档说以下内容:
这种方法不安全,私人信息可能泄露!!!
...
不要使用:-))(由你决定)
这是什么意思?私钥通常如何在 RSA 密钥的实例中得到保护,这与任何常规对象有何不同?
我可以通过执行以下操作来防止信息泄漏,其中该方法仅在 lambda 中访问:
private_key = OpenSSL::PKey::RSA.generate(2048)
save_private = lambda do
key = OpenSSL::Digest::SHA512.new.digest("password")
aes = OpenSSL::Cipher.new("AES-256-CFB")
iv = OpenSSL::Random.random_bytes(aes.iv_len)
aes.encrypt
aes.key, aes.iv = key, iv
aes.update(private_key.params.to_s) + aes.final
end
private_enc, save_private = save_private.call, nil
另外,如果这个安全问题与在内存中等待 GC 的变量有关,那么强制垃圾收集是否可以让事情更安全?
GC.start
提前感谢任何可以解决这个问题的人。