7

MD5 を使用してソルト化およびハッシュ化された従来のパスワードのデータベースがあります。データがより安全になるようにシステムを更新したいと思います。

最初のオプションは、ユーザーがログインして一定期間後に古いユーザーを非アクティブ化するときに、ユーザーを新しいハッシュ スキーム (Salt + Scrypt または PBKDF2 HMACSHA256) に移行することです。これにより、ユーザーは自動的にハッシュを更新するパスワード回復機能を使用する必要があります。

全員を即座にアップグレードできるようにする別のオプションは、既存の MD5 ハッシュを取得し、それぞれに新しいランダムなソルト値を追加してから、新しいハッシュ スキーム (Salt + Scrypt または PBKDF2 HMACSHA256) を使用して結果をハッシュし、その値を保存することです。データベースに移動し、古い値を削除します。

次に、ユーザーがログインするときに、古い方法を適用してから新しい方法を適用する必要があります。私は 2 番目のオプションの方が気に入っています。これにより、古い安全でないハッシュをデータベースから遅かれ早かれすべて削除できるからです。

既存のハッシュをソルトして再ハッシュしても安全ですか? MD5 は非常に壊れているので、スクリプトを実行してパスワードをハッシュ解除し、新しいスキームを使用してパスワードを再ハッシュできますか?

それとも、両方のオプションを組み合わせて実行するのが最善の解決策でしょうか? こうすれば、データベース内の既存の MD5 ハッシュをセキュリティで保護されていないままにしておく必要がなくなり、一定期間、ユーザーを新しいシステムに移行できますか?

4

2 に答える 2

2

これは実際、あなたが持っていた非常に独創的なアイデアです。通常、私は持っているでしょう:

  • ユーザーが戻るまで待機
  • 保存されたパスワードを更新する必要があることに気付く
  • (有効であることがわかっている)パスワードがメモリにあるので、新しいアルゴリズムで再ハッシュします
  • 新しいハッシュをデータベースに保存する

MD5 のみを使用したことの欠点は、総当たり攻撃が容易なことです。実際の scrypt/Argon2 を適用する前に、MD5 の結果を中間ステップとして (一時的に) 処理することで、総当たり攻撃の試みを阻止します。

「実際の」パスワード ハッシュの前に前処理ステップとして高速ハッシュ アルゴリズムを使用することは前代未聞ではありません。

そのため、プレハッシュを使用することには利点があります (ただし、必ずしも MD5 であるとは限りません)。

MD5 ハッシュを現在どのように保存しているかわかりません。MD5 は 128 ビットです。Base64 に保存すると仮定すると、簡単に認識できます。

  • MD5 :nMKuihunqT2jm0b8EBnEgQ==

望ましい最終目標は、scrypt のようなものです。

  • MD5 :nMKuihunqT2jm0b8EBnEgQ==
  • スクリプト:$s0$e0801$epIxT/h6HbbwHaehFnh/bw==$7H0vsXlY8UxxyW/BWx/9GuY7jEvGjT71GFd6O4SZND0=

したがって、保存されたハッシュに対して資格情報を検証する場合、それがどのハッシュであるかを把握し、適切なアルゴリズムを使用できます。計算の複雑さを追加する中間ステップは、次の独自の形式を定義することです。

MD5 + スクリプト

何かのようなもの:

  • MD5 :nMKuihunqT2jm0b8EBnEgQ==
  • MD5 + スクリプト:$md5s0$e0801$eX8cPtmLjKSrZBJszHIuZA==$vapd0u4tYVdOXOlcIkFmrOEIr1Ml2Ue1l2+FVOJgbcI=
  • スクリプト:$s0$e0801$epIxT/h6HbbwHaehFnh/bw==$7H0vsXlY8UxxyW/BWx/9GuY7jEvGjT71GFd6O4SZND0=

これで、保存されたハッシュに基づいて使用されているアルゴリズムを認識し、パスワードを少しずつアップグレードできます。

于 2016-10-03T17:33:11.107 に答える