【问题标题】:Security of private key when using "insecure" OpenSSL methods使用“不安全”的 OpenSSL 方法时私钥的安全性
【发布时间】:2013-02-10 15:59:08
【问题描述】:

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

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

【问题讨论】:

    标签: ruby cryptography openssl rsa


    【解决方案1】:

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

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

    【讨论】:

    • 我的回答有什么遗漏吗,louism?
    猜你喜欢
    • 2023-01-10
    • 2015-12-07
    • 2013-05-01
    • 2014-06-25
    • 1970-01-01
    • 2014-03-25
    • 2013-11-20
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多