[Security] パスワードハッシュ - アップグレード方法


Answers

すべての既存のパスワードを保護するクールな方法:新しい、より良いパスワードハッシュの入力として既存のハッシュを使用します。

したがって、既存のハッシュがまっすぐなMD5であり、 PBKDF2 (またはbcrypt 、またはscrypt )の形式に移行する予定がある場合は、パスワードハッシュを次のように変更します。

PBKDF2( MD5( password ) )

データベースにMD5があるので、PBKDF2を適用するだけです。

これがうまくいくのは、MD5と他のハッシュ(SHA- *など)の弱点がパスワードの使用に影響しないためです。 たとえば、衝突の脆弱性はデジタル署名にとって壊滅的ですが、 パスワードハッシュには影響しません 。 より長いハッシュと比べると、MD5はハッシュ検索スペースを128ビットの出力で多少減らしますが、これはパスワード検索スペース自体に比べるとはるかに小さいです。

パスワードのハッシュを強くするのは、イテレーションによってPBKDF2で達成される速度が遅くなり、長時間のランダムなランダムな塩です。最初のMD5はどちらにも悪影響を与えません。

パスワードを入力している間は、パスワードにバージョンフィールドも追加してください。

編集 :暗号化StackExchangeは、このメソッドに関する興味深い議論持っています。

Question

最高のアルゴリズムdiscussionはたくさんありますが、すでに制作中の場合はどうでしょうか? ユーザーをリセットせずにどのようにアップグレードしますか?

EDIT / DISCLAIMER:もともと私は「クイックフィックス」ソリューションを望んでいたが、oripのレスポンスを選んだが、あなたのアプリケーションのセキュリティがこの問題でも気にするほど重要であるならば、間違った精神と提案解決策はおそらく不十分です。




これを行う1つの方法は次のとおりです。

  • 新しいパスワードの新しいフィールドを導入する
  • ユーザーがログインすると、古いハッシュに対してパスワードを確認する
  • OKの場合は、クリアテキストのパスワードを新しいハッシュでハッシュします
  • 古いハッシュを削除する

その後、徐々に新しいハッシュのパスワードしか持たない




次回の認証時にプレーンテキストを再ハッシュするだけです。 Oahを使用し、base256(全バイト)と256バイトのサイズの塩でSHA-256を使用してください。




Links