2

これは、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

4

2 に答える 2

5

php 5.5まで待つことができる場合は、この組み込み関数に役立つ関数がいくつかあります。

https://gist.github.com/3707231

それまでは、cryptを使用してください。新しい関数の上位互換性のあるポートを確認できます。

https://github.com/ircmaxell/password_compat

于 2012-09-17T22:54:00.590 に答える
2

あなたは間違いなく正しい方向に進んでいます。bcryptはパスワードを保存するための非常に優れた方法です(scryptの方が優れていますが、PHPで適切な実装を見つけるのは困難です)。

sha1、sha256、sha512がパスワードをハッシュするように作成されたことはないことを忘れないでください。これらは高速になるように設計されているため、大規模なデータセットを取得して、それらの一意の署名を最短時間で作成できます。それらは何よりも署名に使用されます。

あなたは間違いなくもっと時間がかかるハッシュアルゴリズムを使いたいです。

補足:コショウは無意味であると主張する人もいます。なぜなら、彼らがあなたのシステムをハッキングした場合、彼らはあなたの塩とコショウにアクセスできるからです。

この投稿には、パスワードのセキュリティに関する優れた洞察が含まれています。

于 2012-09-18T01:51:41.940 に答える