暗号の達人は助けてください。
対称アルゴリズム (AES など) を使用した暗号化キーは、各暗号化でランダムソルトを使用して、PBKDF2 関数を介してパスワードから導出する必要があることを学びました。また、IV をハードコーディングしたり、パスワード文字列や暗号化キーに直接バインド (派生) したりしてはならないことも学びました。これまでは、AES-256 暗号化用にそれぞれ 16 バイトのキー派生ソルトとIVの両方をランダムに生成し、暗号化されたペイロードと一緒に保存していました。
ランダムソルトを使用すると、そのソルトを使用してパスワード文字列からキーとIVの両方を導出できるため、IVのランダム生成は冗長であると考えています。それとも、私はすべきではありませんか?
だから私の質問は最終的にこれです:
パスワードから初期化ベクトルを導き出すことはできますか (キーの場合と同様)、または各暗号化でランダムなソルトを使用するという事実を考慮して、毎回ランダムな IV を生成する必要がありますか?
以下の C# コードを使用できますか?
// Derive key and initialization vector from password:
// ---> NOTE: _salt is random 16 bytes in each encryption.
byte[] key, iv;
using (Rfc2898DeriveBytes derivedBytes = new Rfc2898DeriveBytes(password, _salt, _iterations))
{
key = derivedBytes.GetBytes(32);
iv = derivedBytes.GetBytes(16);
}