web-dev-qa-db-ja.com

パスワードをJavaのメモリ(RAM)に保存する最良の方法は何ですか?

Javaアプリケーションにログインフォームがあるとします。変数にusenameとpasswordを割り当てる必要があります。ハッシュまたはHMACパスワードをハッシュ化して、認証ステップのためだけに保持する瞬間(キャッシュなし)ですが、それでもなおRawパスワードに変数を割り当てる必要があります。

Q1)生のパスワード(文字列、文字配列など)を格納するために使用する必要がある変数の種類は何ですか?

Q2)使用後、Rawパスワードの変数をどのように処理する必要がありますか(つまり、関数がスコープ外になった後、ガベージコレクターがそれをダンプできるようにします)?

Q3)他に何かありますか?

これはJava関連の質問です。セキュリティに非常に近いため、ここに投稿しました。

C/C++については、ほとんど考えていません。彼らです

  • 他のライブラリに依存しない低システムレベル変数にパスワードを保存します。つまりパスワードをchar []に格納します。これは、フレームワークによって提供されるQString(Qt)タイプの変数よりも非常にネイティブです。

  • 使用後すぐにパスワードchar []を上書きします。その後、それを破壊します。

  • メモリ内のパスワードの時間をできるだけ短くします。

10
Kasun

一般的なガイダンスはchar []を使用することです。これは絶対確実ではありませんが、一度使用するとパスワードの文字を上書きできます。文字列では不可能なため、文字は不変であり、存続します。ガベージコレクションまでヒープ上。

これについては StackOverflow でも詳しく説明しています。

10
Xander