1

我最近遇到了一种情况,我绝对需要使用该方法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

提前感谢任何可以解决这个问题的人。

4

1 回答 1

0

它似乎泄露了私钥的信息。密钥组件需要可用于执行任何签名操作或解密,因此密钥信息通常以明文形式保存在内存中。显然,如果您检索它,您必须确保它的安全。我想这就是警告的来源。

你可以做各种各样的事情,比如加密私钥参数,但是你必须存储解密密钥。基本上,如果没有外部系统(或保存密码的人),这最终将无法解决。

于 2013-02-10T23:40:13.890 回答