2013-02-10 75 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