当社が構築するソフトウェアは、セキュリティ監査を受けたばかりです。監査人は、ファイルにパスワードが必要な場合にユーザーが設定できるパスワードをハッシュするためのMD5の使用にフラグを立てました。調べたところ、PBKDF2に置き換える必要があるようです。
しかし、ソフトウェアからすべてのMD5ハッシュ方式を削除するには、ユーザーがすべてのパスワードを一時的に失う必要があることを意味しますか?同様に、更新した場合、すべてのファイルがパスワード保護されないことをお客様に伝える必要がありますか?つまり、古いハッシュ存在するであることを確認して、手動で新しいパスワードを設定するように強制できますが、パスワードは、なんらかの大きな欠陥のように思われるユーザーによって設定される可能性があります。攻撃者がファイルとソフトウェアの新しいバージョンにアクセスできる場合、パスワードなしでファイルにアクセスできます。
これはよくある問題です。
通常の答えは2つあります。
新しいテーブルの追加の列を使用して、新しいハッシュの計算方法を示します。
さらに読む
MD5ハッシュの出力に対してPBKDF2を実行しないのはなぜですか?結果のハッシュは引き続き有効であり、ユーザーからのパスワードのリセットを要求したり、古いユーザーを危険にさらしたりせずに、古いハッシュを新しいハッシュに一度変換するために使用できます。
再ハッシュは両方ともPBKDF2と少なくとも同じくらい安全であり、単なるPBKDF2(MD5はそれを使用するのが悪い考えである理由で簡単に計算することができる)よりもはるかに高価であってはならないことに注意してください。これがコードで物事を安全に処理する方法であることを説明/マークできるはずです。将来的に警告が表示されるのを恐れている場合。
これをStackzOfZtuffのメソッドと組み合わせて、まだ更新されていないユーザーパスワードを保存しておく方法として、ユーザーがPBKDF2にログインするときにユーザーのパスワードを更新し、今のところPBKDF2(MD5)に変更することに注意してください。ユーザーのパスワードを今のところ安全に保つ。
これを実装しました-ソルト付きのmd5ハッシュからふぐに移動します( PHPパスワードAPI を介して)。
データベースにフラグを設定して移行を管理しました-フラグが設定されていない場合、そのレコードはソルトmd5を使用しています。古い方法で認証し、新しい方法でリハッシュします。この新しいメソッドの本番リリースから修正された後、古いアルゴリズムを使用しているアカウントのパスワードフィールドが空になるポリシーを実装しています。新しいパスワードを設定する必要があり、リセットされるまでアクセスをブロックします。
PHPパスワードAPIが機能する方法についての1つの良い点は、ハッシュ関数から返された文字列に、どのようにハッシュされたかに関する情報(どの暗号化メソッド、メソッドのパラメーター、およびソルト)が含まれるかということです) 、ハッシュをすべて1つの文字列にまとめたものです。この方法では、設定ファイルの暗号化方法とパラメータを変更できます。APIは、現在の保存値のパラメータと設定を比較する関数を提供し、再ハッシュかどうかを通知します新しいパラメータに必要です。