1. ホーム
  2. java

[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?

2022-03-16 21:52:22

質問

Swingでは、パスワードのフィールドに getPassword() (を返します)。 char[] ) メソッドの代わりに、通常の getText() (を返します。 String ) メソッドを使用します。同じように、私は String を使用して、パスワードを処理します。

なぜ String パスワードはセキュリティにとって脅威となるのでしょうか? を使うのは不便に感じる。 char[] .

解決方法は?

文字列は不変である . つまり、一度作成した String 他のプロセスがメモリダンプを行った場合、( リフレクション ) の前にデータを取り除くことができます。 ガベージコレクション が蹴られる。

配列であれば、使い終わった後に明示的にデータを消去することができます。好きなもので配列を上書きすることができ、ガベージコレクションの前でもパスワードはシステムのどこにも存在しないことになります。

そうそう、この を使用しても、セキュリティ上の懸念はありません。 char[] は、攻撃者の機会の窓を減らすだけであり、この特定のタイプの攻撃にしか対応できません。

コメントで指摘されているように、ガベージコレクタによって移動される配列は、メモリ内にデータの浮遊コピーを残す可能性があります。これは実装に依存するものだと思います。ガベージコレクタは かもしれない このようなことを避けるために、すべてのメモリをクリアする必要があります。たとえそうであったとしても、この間は char[] には、実際の文字が攻撃窓として含まれています。