web-dev-qa-db-ja.com

PHPのpassword_hash()BCRYPTコスト係数は、クラッキングの計算時間にどのように変換されますか

BCRYPTCOST要素の関係と、マシンがPHP 5.5's password_hash()

平均的なサーバーでpassword_hash()について観察した暗号化時間は次のとおりです。

COST 14 takes 1.23s to 2s
COST 13 takes 0.6 to 1s
COST 12 takes about 0.3s
COST 11 takes about 0.15s
COST 10 takes about 0.08s
COST 09 takes about 0.04s
  1. ラウンド数は、かかった時間に直線的に比例しますか?

  2. 同じ線形スケールまたは指数関数でパスワードを解読するのに必要な計算時間はありますか?

例えばCOST 10のハッシュの解読に1分かかった場合。同じパスワードでCOST 14を使用してどのくらいの時間を見ているのですか?これはパスワードのエントロピーによって異なると思います。それでは、推論の基礎として、「EasyCrack1」などのかなり弱い10文字の平均パスワードを考えてみましょう。

6
hexalys

crypt()関数 のページにかなり間接的に記載されているように、costパラメーターは、反復カウントの2を底とする対数です。言い換えると、+ 1が増えるごとにto costは、反復回数の2倍を表します。

コスト10のハッシュをクラックするのに1分かかる場合、コスト14は2 ^(14-10)= 16分かかります。 bcryptのような暗号化ハッシュをクラックすることは、パスワードが何であるかを推測してハッシュし、ハッシュが一致するかどうかを確認することで構成されているため、クラックの難易度はハッシュ時間に比例して増加します。コストを1増やすとハッシュ時間が2倍になるのと同じように、ハッシュをクラックするための労力も2倍になります。

8
Mark