私は、AES/CBC/PKCS5Paddingメソッドを使用してデバイス上のユーザーのデータを暗号化するアプリケーションを構築しており、セキュリティは非常に重要です。誰かがデータベースを取得した場合のブルートフォース攻撃を防ぎたい。Java暗号化:AES/CBC/PKCS5Paddingシナリオで使用する種子
テーブルの各行には、関連するタイトルがあります。私は種として何を使うべきか分かりません。私は、次のいずれか行うことができます。
ハードコード私自身のシードソースのを、私はこれは誰かが私のアプリを逆コンパイル場合
のように、ユーザが入力したタイトルを使用して読み取ることができると信じて他の方法は、上記のすべてのシナリオで、がない限りシード
は、私はC、私自身の種子の連結と同様に入力されたタイトル
を使用します種を見つけ出す誰かを視覚化する。これは暗号化されたデータを無理やりにすることができるという点で、これは役に立ちますか?もちろん、上記のすべてのシナリオでは、ユーザーのパスワードをキーの一部として含めることもできます。
潜在的なハッカーにとって、どうすればそれを難しくすることができますか?
編集(再編集)以下の回答と私の研究や思考のプロセスに基づいて
。私は次のことができると思う。
- ユーザーがパスワードを入力しますが、機密データを格納する前に、データベース
- に保管していないが、彼らはそれを識別するためのラベルを入力する必要があります。私はこれをデータベースにテキストとして保存し、塩として使用します
- 私は、PBKDF2でユーザーのパスワードとラベルを使用してキーを生成しますが、それを保存しません。
- # 3は
- を解読するために機密データを暗号化するために、私は再びユーザのパスワードと行ラベルをオフに基づいて鍵を生成し、機密データ
この音権利をいを復号化するためにそれを使用するのだろうか?ハッカーは、2つの列(クリアテキストのラベル)と暗号化されたデータでデータベースを保持すると何かを推論できますか?
編集2
私は具体的にはAndroidのアプリケーションを構築するために計画していて、次のリンクは、私が必要なものに強打しました。
https://nelenkov.blogspot.in/2012/04/using-password-based-encryption-on.html?m=1
https://android-developers.googleblog.com/2013/02/using-cryptography-to-store-credentials.html?m=1
埋め込みは暗号化ではありません...あなたの暗号化方法/ライブラリは正確に何ですか –
シードとはどういう意味ですか? –
@LukePark私は、暗号化/復号化に使用される秘密鍵を意味しました。私はそれをバイトに変換して渡します... SecureRandom.setSeed(byte [] seed) –