ムーアの法則に追いつく能力があるため、bcrypt を使用してパスワードをハッシュするという推奨事項を見てきました。
どうやらこれの理由は、攻撃者が bcrypt ハッシュをクラックするのに、SHA256 のような汎用ハッシュ関数によって生成されたハッシュよりもはるかに長い時間がかかるためです。
そんなことがあるものか?ムーアの法則にもかかわらず、アルゴリズムを意図的に遅くするにはどうすればよいでしょうか?
攻撃者は、 216,553の英語の単語すべてを試してみたいと思うでしょう。
さらに、一般的なバリエーションのためにさらに12ビットの努力が必要です。これにより、887,001,088(2 29)の可能なパスワードのリストが得られます。
BCryptは、1つのハッシュを計算するために約4,342,912(つまり、2 22)の操作を必要とします(コスト= 12)。
今日のコアは約231サイクル/秒を提供します。最新技術は、プロセッサあたり8 = 2 3コアで、合計2 3 * 231 = 234サイクル/秒です。サーバーには通常4つのプロセッサがあり、合計が2 2 * 2 34 = 236サイクル/秒に増加します。21つのハッシュを計算するための22サイクル*229の可能な(共通の)パスワード= 2すべての(共通の)パスワードを実行するための51サイクル。
これは、4プロセッサ、オクトコア、サーバーがすべての一般的なパスワードを実行するのに約2 51/2 36 = 2 15秒(9時間)かかることを意味します。
実際、私のパスワードは一般的ではなく、約44ビットを使用しています。244パスワード*2パスワードあたり22サイクル= 266サイクルですべての一般的でないパスワードを試します。266/236サイクル/秒=230秒(34年)でパスワードを検索します。
ムーアの法則によれば、処理能力は18か月ごとに2倍になります。
これで、bcryptはムーアの法則に反します。
コスト係数を12から13に増やすと、関連する時間が2倍になります。
bcryptは、「work factor」というパラメーターを使用して構成できます。内部的には、ハッシュに似た操作を連続して何度も実行します。「多」は数十億まで設定できる部分です。したがって、ムーアの法則に対処するには、その設定を上げてください。必要に応じて遅くすることができる別の関数は、 PBKDF2 です(「反復回数」パラメーターを参照してください)。
パスワードハッシュを遅くするポイントは、攻撃者にとって物事を困難にすることですが、「正直なシステム」にとっても機械的に遅くなることに注意してください。それはトレードオフです。詳細については、この回答(security.stackexchange で) を参照してください。