AES-256 CBCを使用して暗号化し、16バイトのソルトでPBKDF2関数の複数の反復を使用して32バイトのキーを取得する場合、IVをソルトと等しくしても安全ですか?
(編集:ソルトは毎回ランダムに生成されます。これにより、当然IVも毎回ランダムに生成されます。)
これを行うとどの程度のセキュリティが失われますか?これを行うと、ソルトとIVの両方ではなく、最終的な暗号化ファイルにソルトを保存するだけでよいという利点があります(ファイルを16バイト小さくします!)
PBCDF2で使用されているソルトをCBC暗号化のIVに再利用することには既知問題はありません。ソルトがハッシュ関数への入力として入力されるために影響があったとしても、少し意外です。出力はブロック暗号のキーとして使用されます。したがって、塩とIVの間には「2つの層」があります。ただし、驚きが時々発生します。 2つの役割にデータ要素を再利用することは、基本的には潜在的に危険です。
PBKDF2は、任意の長さの出力を生成できる Key Derivation Function であるため、単純にキーを生成する方が安全と思われますand IV。それがこれらの問題で通常行われていることです。
または、パスワードとソルトから取得したキーをoneファイルでのみ使用する場合は、固定された従来のIVを使用できます(CBCでのIVの問題は、キーの2回目の使用で始まります)なので、キーが1回だけ使用された場合にのみ、すべてゼロのIVを許容します。 [〜#〜] eax [〜#〜] のような Authenticated Encryption モードでCBCを置き換える方が良いでしょう。 [〜#〜] gcm [〜#〜] 、IVに対する制約が少ない(EAXまたはGCMでは、従来のIVが問題ではないことは「明らか」であり、キーが1回使用される限り)、機密性に加えて完全性を提供します。
IV 必須は、CBCの呼び出しごとに一意である必要があります。 PBKDF2を介してキーを生成するソルトは一定です。それ以外の場合は、異なるキーを生成します。
だから、違います。
IVとsaltの両方が一意でランダムであることが必要です。したがって、これらの基準を満たしている限り、同じではない理由を私は見たことがありません(考えられません)。
参照:
私はパスワード+塩でPBKDF2を実行して、マスターキーを取得します。次に、そのマスターキーからキーとIVを派生させます。 saltのおかげで、各マスターキーは1回だけ使用されます。そうすれば、暗号と一緒にIVを保存する必要がありません。