最近では、パスワードの保存に関連する問題のために、誰もが MD5 を非難しています。しかし、一度使用される可能性が高いものに認証のレイヤーを追加したい場合はどうでしょうか?
これは単なる架空の例ですが、ユーザーがパスワードをリセットできる機能があるとします。ユーザーに、クリックして新しい (ランダムに生成された) パスワードを設定できるリンクをメールで送信します。
私の現在の考えでは、プライベート ソルト値といくつかの識別変数を使用して MD5 ハッシュを生成し、それを使用してリンクを作成します。
この機能のソルトが「8b769a378411b705」だとしましょう (すべてのパスワード リセット リクエストに同じソルトを使用します)。その他の識別データは、ユーザー ID と、既に生成されたパスワード ハッシュのデータベース ID です。
salt = "8b769a378411b705" (private)
user_id = 123
pw_id = 456
code = md5(salt + " " + user_id + " " + pw_id)
なる
code = "692a71cd7da194145be209e40fcd3e92"
リンクの例: confirm_reset_password.php?user_id=123&pw_id=456&code=692a71cd7da194145be209e40fcd3e92
MD5 の問題を考慮して、これは安全と見なされますか? SHA-1 のように、使用を検討すべき別の一方向ハッシュはありますか?
パスワードを保存するためにSHA1でPBKDF2を使用してきましたが、その利点の一部は「遅さ」とハッシュの生成にかかる時間にあることを理解しています。このような目的でこれらの高品質のハッシュを生成することはできますが、逆効果になる可能性があると思います。なぜなら、(間違った) リクエストを大量に送信することでサーバーを簡単にひざまずかせることができるからです。ハッシュ(特に、多くの反復を使用しているため)。「高速な」アルゴリズムを持つことは、使い捨ての目的には適しているようですが、MD5 が依然として最良の選択であるかどうか疑問に思っています。
ありがとう!