2012-06-09 9 views
7

私は、AES 256を使用してファイルを暗号化および復号化するためのAndroidアプリケーションを作成しています。ユーザーが入力したパスワードからAESキーを引き出すためにAES-CBCモードとPBKDF2を使用しています。また、私はすべてのファイルの暗号化キーに対して安全な疑似ランダムソルトを生成しています。私はIVと塩を暗号化されたファイルと一緒に保存しているので、それらを再度読み込み、後で鍵を再生成してファイルを解読できるようにします。暗号化されたファイルブレークセキュリティと共に塩を保存していますか?

私の質問:暗号化されたファイルと一緒に塩を保存するとセキュリティと塩そのものの意味が損なわれますか?攻撃者が塩分を知ることはできず、IVは暗号化されたファイルに対してオフラインブルートフォース攻撃を行って暗号鍵を見つけることができないのですか?

答えて

10

塩の主な目的は秘密ではありませんが、虹のテーブル(つまり既存のテーブルまたは新しいテーブル)を使用するような攻撃者がショートカットを使用できないようにすることです複数の暗号化されたファイルに使用される)、または一度に複数の収集されたファイル(異なる塩を持つ必要があります)をブルートフォースします。

パスワードに十分なエントロピーがあり、キー導出関数の反復回数が十分多い場合は、暗号文で塩を保存することは問題ありません。 塩だけでは、誰もファイルの解読を許可しません。

塩を秘密にしたい場合(通常は塩の代わりに「コショウ」と呼ばれます)、正当な塩を正しいものにするためのメカニズムを考える必要があります。

+0

しかし、攻撃者がファイルから平文で読むことができる有効な塩を含む虹のテーブルを作成するとどうなりますか? –

+9

@AlexAmiryan虹のテーブルを構築することは、少なくともブルートフォース攻撃ほど高価です。だから、もしあなたがテーブルを再利用することができないなら(それは塩が防ぐものです)、テーブルを作ることは無駄です。単にブルートフォース攻撃を直接実行してください。 – CodesInChaos

2

パスワードは、パスワードのハッシュなどの一方向関数に使用されます。

ランダムIVは、後で復号化できるデータの暗号化などの双方向機能に使用されます。

これらは両方ともランダムなバイトであり、同じ情報が関数によって適用された後に同じ結果を生成するのを防ぐために使用されます。したがって、2人が同じパスワードを選択してデータを保存し、同じ情報を格納すると、暗号化されたバイトは異なります。

暗号化されたファイルの横にそれらを保存できます。

また、PBKDF2で1回以上の繰り返しを使用してください。そうでなければ、かなり役に立たないです。 Wikipediaによると、iOS 3は2,000回の反復を使用し、iOS 4は10,000回の反復を使用します。

+1

暗号化されたファイルと一緒にIVと塩を保存するのがなぜ安全であるか説明できますか? –

関連する問題