1

私は最近、絶対にメソッドを使用する必要がある状況に遭遇しましたOpenSSL::PKey::RSA#params。ただし、ドキュメントには次のように書かれています。

この方法は安全ではなく、個人情報が漏洩する可能性があります!!!

..。

使用しないでください:-))(それはあなた次第です)

これは何を意味するのでしょうか?秘密鍵は通常、RSA鍵のインスタンス内でどのように保護されますか?また、これは通常のオブジェクトとどのように異なりますか?

メソッドがラムダ内でのみアクセスされる次のようなことを行うことで、情報の漏洩を防ぐことができますか?

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 に答える