2013-02-10 83 views
1

我最近遇到这种情况,我需要使用方法OpenSSL::PKey::RSA#params时,我需要绝对。但是,该文档说明如下:使用“不安全的”OpenSSL方法时的私钥安全性

此方法是INSECURE,私人信息可能泄漏!

...

不要使用:-))(这是给你)

这是什么意思?私钥在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 

在此先感谢任何人可以清除此问题。

回答

0

它似乎泄露了私钥的信息。关键组件需要可用于执行任何签名操作或解密,因此通常情况下,密钥信息以明文方式存储在内存中。显然,如果你找回它,你必须确保你保持安全。我认为这是警告进入的地方。

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

+0

我的回答里有什么缺失,louism? – 2013-02-21 01:48:36