ビットコイン マイニングで使用されるような特殊なハードウェアは、1 秒あたり 500 億回以上のハッシュを実行できます (2013 年初めの時点で。ハードウェアが高速化するにつれて、これは移動するターゲットです)。
PBKDF2 を 1,000 回反復すると、攻撃は 1 秒あたり 500 億から 5000 万に減少します。10,000 回の反復は 1 秒あたり 500 万回になります。
ただし、一般的な Web サーバーはそれほど高速ではありません。あなたにとってはずっと遅くなるでしょう。独自の運用サーバーでいくつかのテストを行う必要があり、10,000 回の反復では遅すぎることがわかる場合があります。
したがって、実際には PBKDF2 がブルート フォースされる速さではなく、サーバーが PBKDF2 パスワードを検証できる速さについてです。必要な時間 (0.5 秒? 10 分の 1 秒? 100 分の 1 秒?) を決定し、それに合わせて PBKDF2 ラウンドの数を調整する必要があります。
また、顧客が使用するパスワードの強度も考慮してください。それらすべてが優れたパスワードを持っている場合、どのハッシュ システムを使用しても問題ありません。彼ら全員がひどいパスワードを使用している場合、PBKDF2 はそれらを保護するのに十分ではありません - Apple が iPhone で使用するハードウェアソルト付きハッシュのように、4 桁の数字を少なくともいくつかの数字を持つものに変換しようとするなど、より風変わりなものを取得する必要があります。セキュリティ (基本的に、すべてのハッシュを専用のハードウェア チップで実行するように強制します。これは意図的に低速です。データを他のハードウェアに移動すると、復号化できなくなります)。
パスワードが辞書に載っていないと仮定すると (ほとんどのパスワードは辞書に載っています)、パスワードの強度は、アルファベットの可能な文字数に各文字の 1 ハイブを掛けることによって計算されます。したがって、パスワードに文字 (26 文字のアルファベット) と数字 (さらに 10 文字) がある場合、36 文字のアルファベットがあり、6 文字の長さの場合はそれ自体を 6 回掛けます。
したがって、6 桁の英数字のパスワードは 36*36*36*36*36*36、または必要に応じて 36^6 です。これにより、約 21 億の可能なパスワードが得られます... 通常、ハッカーは実際のパスワードを途中で見つけると想定しているため、10 億と呼びます。
PBKDF2 を使用していて、反復回数が 1,000 回の場合、特殊なハードウェアを使用するハッカーは、約 20 秒で 10 億個のパスワードを推測します。それはあまり良いセキュリティではありません。
PBKDF2 の回数を増やす (Web サイトの速度が低下します) か、ユーザーに適切なパスワードを設定するよう説得することで、セキュリティを向上させることができます。6 桁から 7 桁に変更するか、大文字や記号を追加するだけで、セキュリティが大幅に向上します。
計算には Wolfram Alpha が便利です((36 ^ 6) / 50 million) seconds
。36 はアルファベットのサイズ、6 はパスワードの長さ、5000 万はハッカーが使用できる 1 秒あたりの推測回数です (5000 万は PBKDF2 を狙う深刻な攻撃者です) 1,000ラウンドで)。
データベースにはいくつのパスワードがありますか? 個々のパスワードを解読するのに 20 秒かかるとしたら、それは 30 日分の数学か、それとも 30 年か? それはあなたが何人の顧客を持っているかによって異なります。