可能性のある複製:
パスワードを安全にハッシュする方法?
私はWebサイトを持っていて、そのWebサイトでSHA-256を使用して、ユーザーのパスワードをソルトします。私が今やっていることは、ハッシュする前に、ユーザーのパスワードの各文字にごみデータを埋め込むことです。私がこれを行う理由は、誰かがたまたま私のサイトのデータベースダンプを取得した場合(そうではないかもしれませんが)ジョンザリッパーのようなブルートフォーサー/辞書攻撃ツールは機能しません単語リスト、しかしそれのごちゃごちゃしたバージョン。
これは実行可能な戦略ですか、それとも辞書攻撃を防ぐ別の方法がありますか?一部のユーザーから、パスワードに問題があるとの報告がありました。これは、私の「事前ハッシュ」方法に関連する場合と関連しない場合がありますが、パスワードをハッシュする別の方法を検討することに興味がありました。パスワードハッシュを妥当な時間内に計算する必要があるため、安全なラウンド数でフグを使用することはできません。
PHP新しいSHA3 Keccakハッシュアルゴリズムの実装はありますか、またはこれを使用するのは悪い考えでしょうか?
まだSHA-3を使用すべきではありません。 わかりやすくするために、これをKeccakと呼ばないでください。SHA-2とSHAが最初に呼び出されていた理由を思い出せません。将来の読者もKeccakを知らないでしょう。
よりトピックについては、あなたの答えはここにあります: パスワードを安全にハッシュする方法? これは辞書と他のすべての可能な攻撃から現在最もよく知られた方法で保護します。
辞書ソリューションのハッシュは、パスワードソリューションでそれ自体を使用すべきではありませんが、ソルティングを使用して、私が推測することを回避することができます。これにより、同じパスワードが2回繰り返されたとしても、異なるワードが異なるハッシュを取得します。
http://en.wikipedia.org/wiki/Salt_(cryptography)
これらのシステムは、レインボーテーブル攻撃に対して依然として脆弱であるため、これを軽減するには、エンティティごとに#auths/secondを制限する必要があります。
さまざまなSHAアルゴについて、詳細はこちら:
http://www.schneier.com/blog/archives/2012/10/when_will_we_se.htmlhttp://www.schneier.com/blog/archives/2012/09/ sha-3_will_be_a.html
誰かがあなたのサイトのコピーを入手した場合、おそらく彼らはそれを実行するコードのコピーも入手するでしょう。その場合、彼らはあなたのパスワード変更スキームに気づくでしょう。それからそれを補うために彼らのクラッキング辞書を修正することは簡単です。
一方、データベースのコピーのみを取得して(コードは取得しない)場合は、あらゆる種類のハッシュをカスタマイズするだけで、あらゆる種類の攻撃を防ぐことができます。一般的なオプションは、ランダムな文字列だけでなく、データベースではなくサイトコードに含まれているサイト固有のシークレットをハッシュに付加することです。これにより、秘密鍵を取得せずにデータベースのパスワードハッシュを無用にすることができます。
また、辞書攻撃を数桁も高価にするハッシュ強化アルゴリズムであるPBKDF2も忘れないでください。
SHA-3については、検討する価値があるものになるまでにはまだ数年かかります。まず、実装の記述、テスト、ピアレビューなどを行う必要があります。既存のSHA-256またはSHA-512は、依然として安全と見なされています。