強力な認証方式を使いたいので、PBKDF2を使うことにしました。私はSHA256アルゴリズムで5000回の反復でPBKDF2を使用しており、ユーザー名(ユーザーの完全な電子メールアドレス)をソルトとして使用しています。したがって、すべてのユーザーは一意の電子メールを持っており、その電子メールアドレスが識別子です。したがって、パスワードを入力するときは、5000回の反復でPBKDF2を使用し、SHA256アルゴリズムを使用してユーザーのパスワードをハッシュします。
いいと思いますか?このハッシュスキームにセキュリティ上の弱点があるかどうか教えてください。
はい、弱点があります。ユーザーがパスワードを変更するたびにソルトを変更する必要がありますが、スキームでは変更できません。ソルトが何であるかを知っている攻撃者は、何千ものパスワードのハッシュを計算して、事前計算攻撃を仕掛けることができます。そうすれば、ユーザーがパスワードを変更したとしても、攻撃者はおそらくすでにパスワードを事前に計算しているでしょう。
ソルトは、暗号的に安全な疑似乱数ジェネレーター(CSPRNG)から取得する必要があります。