最近PHPログインセキュリティについて多くのことを読みましたが、セキュリティに関するStack Overflowに関する多くの質問は時代遅れです。
現在、bcryptはパスワードをハッシュ化する最良の方法の1つであると理解しています。しかし、私のサイトでは、少なくとも最初からsha512は非常にうまくいくと思います。 (bcryptは大きなサイト、高いセキュリティを必要とするサイト向けですよね?)
塩漬けについても不思議です。すべてのパスワードに固有のソルトが必要ですか?データベーステーブルにソルト用のフィールドとパスワード用のフィールドを1つずつ用意する必要がありますか?今日はまともな塩は何でしょうか?ユーザー名とパスワードを結合し、それにランダムな単語/文字/特殊文字の組み合わせを追加する必要がありますか?
この質問が移行された理由はわかりません。これに関するstackoverflowに関する有効な回答を含むかなりの質問があります。
まず:BCrypt-hashを使用します。これは現在推奨されているハッシュアルゴリズムです。
Sha256は、fast;になるように設計された汎用ハッシュアルゴリズムです。ハッシュアルゴリズムのパスワードハッシュを高速にしたくない場合。
2番目:ランダムで、均一に分布した、高エントロピーの塩を使用します。 塩漬けに関する私の長い答え を読むことも勧めます
プログラミング言語/プラットフォームに応じて、BCryptアルゴリズムはすでにソルトを作成します。ただし、すべての実装がこれを行うわけではありません; PHPたとえば、ソルトは自動作成されません。
可能な限り、独自のスクリプトをロールしないでください。ただし、標準ライブラリを使用してください。
セキュリティは、ほとんどのプログラマが単独で取り組むことができるよりもはるかに複雑で目に見えないねじ込みの可能性がある傾向があるため、標準ライブラリを使用することは、ほとんど常に最も簡単で最も安全な(唯一ではないが)利用可能なオプションです。
Bcryptを使うことを恐れないでください!これは、セキュリティの高いサイト専用ではなく、md5ハッシュを使用するのと同じくらい簡単に使用できます。パスワードごとにランダムなソルトを使用することでアプリケーションが複雑になることはありません。ハッシュ値と同じデータベースフィールドに保存できます。
バージョン3.5以降、PHPは、crypt()
関数を使用してbcryptハッシュを生成できます。記事で bcryptによるパスワードハッシュの生成 私は重要な点を説明しようとしましたが、bcryptについて理解する必要があります。