AES/CBC/PKCS5Padding メソッドを使用してデバイス上のユーザーのデータを暗号化するアプリを構築していますが、セキュリティは非常に重要です。誰かがデータベースを手に入れた場合に備えて、総当たり攻撃を防ぎたいです。
テーブルの各行には、タイトルが関連付けられています。シードとして何を使用すればよいかわかりません。次のいずれかを実行できます。
ソースに自分のシードをハードコーディングしますが、誰かが私のアプリを逆コンパイルすると、これを読み取ることができると思います
ユーザーが入力したタイトルをシードとして使用
自分のシードと入力したタイトルを連結して使用する
他の方法がない限り、上記のすべてのシナリオで、誰かが種を見つけている様子を視覚化できます。これは、暗号化されたデータをブルート フォースできるようにするのに役立ちますか? もちろん、上記のすべてのシナリオで、キーの一部としてユーザーのパスワードも含めます。
潜在的なハッカーにとってより困難にするにはどうすればよいですか?
編集(再編集)
以下の返信と私の調査と思考プロセスに基づいています。以下ができると思います。
- ユーザーにパスワードを入力させますが、データベースには保存しません
- 機密データを保存する前に、それを識別するためにラベルを入力する必要があります。これをクリア テキストとしてデータベースに保存し、salt として使用します。
- ユーザーのパスワードと 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