これは、PHP/SQLプロジェクトでの現在のパスワードハッシュ手順です...
- 最終的なハッシュに加えて、ユーザーのDBレコードに保存されている/ dev/urandomからユーザーごとに512ビットのソルトを取得します
- ファイルシステムに保存されている/dev/urandomから512ビットの「pepper」を取得します。これはアプリケーションごとに一定であり、各ユーザーで同じです
- それで
hash('sha512', $password.$salt.$pepper, TRUE)
ハッシュとソルトは、主に習慣から、DBにバイナリで格納されます。セキュリティの面では何の違いもないと思います。どちらかといえば、SQLバックアップには少し不便であり、PHPコードがわずかに複雑に見えるようになります。
最近、SHA-256またはSHA-512はhash()
、bcryptに取って代わられたと一般的に考えられていますか?
SHA-2(256/512)はまだ暗号的に安全であると考えられており、おそらくエントロピービットをやり過ぎていると思います。攻撃者がDBダンプからSHA-2ハッシュをリバースエンジニアリングするよりも、問題を引き起こす可能性がはるかに高いのは、私のコードの欠陥です。
しかし、crypt()
代わりにCRYPT_BLOWFISHで使用するために方法論を更新する必要があります(これはbcryptと呼ばれ、blowfishは技術的にはハッシュアルゴリズムではなく暗号です)?
将来のベストプラクティスと同じように?
アルゴリズムの計算コストについては特に心配していません(理由の範囲内で)。これは、アカウントを作成するとき、パスワードを変更するとき、またはログイン時にハッシュして比較するときにのみ要因になります。これらのアクティビティは、ページビューのわずかな割合を占めています。ある意味、遅いほど良いと思います。サーバーの生成が難しくなると、攻撃者のブルートフォース攻撃が遅くなります。
乾杯、B