javaでJavaでは、メモリダンプから値を保護するために、すべてのメソッド内でbyte []配列をクリアする方法はありますか?
私は以下のコードを実行すると、バイト配列の値がダイジェストメソッドにコピーされ、値を他のメソッドにコピーするため、pwdの値がすべてメモリ上に存在します。
import java.security.MessageDigest
byte[] pwd = "some_pwd".getBytes();
MessageDigest md = MessageDigest.getInstance("SHA");
for (int i = 0; i < 100; i++) {
byte[] hash = md.digest(pwd);
}
メモリダンプソフトウェアには、私の顧客が気に入らないパスワードの値が表示されます。
バイト[]がメソッドごとに値によってコピーされていることを確認しました。
重要なバイト配列の値を保護する方法はありますか?
いいえ。あなたのコードは、プログラムのRAMで発生する必要があるため、パスワード値を処理します(ハッシュするだけでも)。あなたの唯一の選択肢は、パスワードを可能な限り短い生活として保持する(範囲を制限する)ことです。 –
あなたが参照として配列を渡すことができたとしても、この配列を使用している間にメモリをダンプすれば、その値を見ることができます(頻繁ではありませんが、少なくとも1回)。 – JohnnyAW