web-dev-qa-db-ja.com

MD5からSHA-512への移行

この質問は、技術的なセキュリティの質問よりもセキュリティポリシーの詳細です。

何年も前に、asp.netサイトを開発し、フォーム認証を実装し、ユーザーパスワードをMD5ハッシュとして保存しました。基本的なセキュリティニュースをたどると、MD5がもはや役に立たなくなっていることは明らかです。現在のユーザーを処理するための2つの考えられる計画が表示されます。

  1. 古いユーザーテーブルを新しいデザインにコピーし、現在のMD5をSHA-512にハッシュします。次に、ユーザーがログインするときに、入力を最初にMD5としてハッシュし、次にSHA-512としてハッシュします。ちょっとルーベゴールドバーグですが、それは私のユーザーをまったく気にしません
  2. すべてのユーザーにパスワードのリセットを強制し、MD5を使用して古いパスワードを確認しますが、新しいパスワードはSHA-512として保存します。

何かご意見は? 3つ目のオプションが欠けていますか?

注:OpenIDは大好きですが、このサイトではオプションではありません

10
Justin C

これと同じ問題を2回解決する必要がありました。

  1. 私の最初のWebアプリですが、実際にはユーザーのパスワードをMD5ハッシュするのに十分な知識がありました。しかし、私は塩について知りませんでした、そしてそれを後で働きました。
  2. 実際、同じWebアプリで、数年後、既存のMD5からSHA-512に「アップグレード」することに決めました。

どちらの場合も、オプション3ではなくオプション3を使用しました。ユーザーの次のログイン時に、パスワードを使用して新しいハッシュを生成し、古いハッシュを置き換えます(古いハッシュと照合して確認した後)。

ソルトを追加する場合、これはかなり簡単なことでした。私が行ったのは、デフォルトで全員が ""(空の文字列)のソルトでした。これは、連結して、結果のハッシュに影響を与えることなくハッシュすることができました。認証されたら、ユーザー用に新しいソルトを生成し、パスワードを再度ハッシュ化して、新しい結果を保存しました。

MD5からSHA-512へのアップグレードは少しトリッキーでしたが、テーブルのhasの文字列の長さを調べるだけで(新しいハッシュに新しい列を使用せず、より長いハッシュに対応するために既存の列を拡張しただけです) )使用するアルゴリズムを指定して、ユーザーを適切に認証できます。認証された後、それらがまだ古いハッシュ上にある場合、新しいハッシュを計算し(また、新しい塩を生成する機会を得て)、それを保存します。

もちろん、どちらの場合でも、最終的には「古いスタイル」のパスワードがまだ存在する状況に最終的に遭遇しました。適切な時間(6か月など)待った後、新しいスタイルが採用されてからログインしていないユーザーを「非アクティブ」と判断します。新しい完全にランダムなパスワードを生成して保存します(新しいスタイルを使用)もちろん、それを保存することもできます。また、戻ってきた場合は、パスワードリセットメカニズムを使用してアクセスを回復する必要があります。 (または、現状のままにしますが、古いスタイルのコードを削除するだけで事実上無効化します。)これらのユーザーに電子メールを送信し、ログインしてセキュリティアップグレードを完了するように依頼することもできます。現在のパスワードを無効にする前のアカウント。

もちろん、このアプローチには認証ルーチンに追加のコードが含まれますが、それは一時的なものです-すべてのユーザーがアップグレードすると(ログインするか、前の段落のように「強制」されるかによって)、責任のあるすべてのコードを削除できますアップグレードを実行します。セキュリティのアップグレードが完了しました。ほとんどのユーザー(およびすべての通常のユーザー)は何も気づいていません。

14
Kromey

私は同じことをする必要がある会社で以前にオプション2を使用しました。オプション1では問題ありませんが、2の方が簡単に見えます。

パスワードにSHA-512の代わりに PBKDF2bcrypt も使用します

Ok Open-IDはリリースされましたが、O-Authを使用してTwitterやFacebookの接続などを使用して、ユーザー名とパスワードの保存と管理を完全に排除できますか?

9
Rakkhi

これは特定の質問に対応していないという点で真の答えではありませんが、IDを統合する別のオプションを追加することに同意します。つまり、それがOpenID、Facebook、Googleなど、だれであろうと...ユーザーの資格情報を安全に保存するための最良のオプションは、単に実行しないことです。

TL; DR:可能な場合は、認証を統合します。

1
Daniel Miessler