アプリで一部のデータ (ユーザー セッション トークン) を暗号化する必要があります。私が目にするほとんどの例には、次のようなパスフレーズとソルトを使用してキーを生成するメソッドがあります。
public static Key generateKey(char[] passphrase, byte[] salt) {
...
}
私の理解では、パスフレーズを生成するための 3 つのオプションがあります。
- アプリが起動するたびにユーザーに入力してもらいます (ユーザーにとって迷惑です)。
- パスフレーズをアプリ自体にハードコードします。ユーザーにとってはより便利ですが、アプリのバイナリに与えられたパスフレーズを誰かが知ることができます。
- パスフレーズをランダムに生成しますが、生成されたキーをディスクに保存する必要があります。これで、キーをディスクに安全に保存する必要があるという問題に移行しましたが、これも不可能に思えます。攻撃者が生成されたキーを見つけた場合、大きな問題になります。
オプション#1は私にはうまくいきません。オプション 2 と 3 は、どうすればよいかをひどく誤解していない限り (そうであることを願っています)、本質的に欠陥があるように見えます。#1で行けない場合、これを行うための推奨される方法は何ですか? 攻撃者が飛び越えて最善を尽くせるように、難読化されたフープをたくさん入れますか?
ありがとう