関連する答えを長い間見つけようとしていますが、まだ確信が持てません。
私がしようとしているのは、RijndaelManaged を使用して暗号化することです。キーを作成するために、パスワード、salt、反復を Rfc2898DeriveBytes に渡します。
ユーザーが入力したパスワードがRfc2898DeriveBytesに渡す前に特定の長さを下回っている場合、定数を追加することを考えていました。
これまでのところ、定数を追加してもセキュリティには何のメリットもありません。攻撃者が暗号化されたデータとソルトを含むデータベースへのアクセスを取得するとします。結局、彼はそれが一定であることに気付くでしょう。
それとも、心配することなく、任意の長さのパスワードを Rfc2898DeriveBytes に渡すことは「本当に非常に」安全ですか?
より短いまたはより長いパスワードを渡すと、どちらがより適切で最も推奨されるかという点で、キー導出プロセスに影響しますか?
これまでのところ、ランダムなソルトとより多くの反復が重要であることを知っています。
以下はコードです。パスワードへの定数の追加を削除するか、保持する必要がありますか?
(注: ユーザーに対するパスワードの長さ制限は GUI では適用されません。ユーザーは 1 文字または 10 文字以上を渡すことができます)
string constant = "AnyConstantToMakePasswordBigger";
if (password.Length < 8)
{
password = password + constant;
}
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] salt = new byte[8];
rng.GetBytes(salt);
Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(password, salt, 1000);
using (RijndaelManaged aes = new RijndaelManaged())
{
aes.Key = derivedKey.GetBytes(keyLength);
.....
}
肯定的または否定的なコメントと応答を歓迎します。