ハッシュをクラックするためのプールされたリソースの最良の例はビットコインネットワークであり、現在2.14 ExaHashes/sを使用しています。
このネットワークのリソースがフグの解読に向けられていて、bcryptを指している場合、bcryptを使用してパスワードを保護する場合に維持する必要がある最小のコスト要因は何ですか?
短い答え:x86の速度を比較すると、PHP of 31(2 ^ 31反復))の最大コストは、強力な(ランダム8文字)password。それが使用可能であるというわけではないので、1つのハッシュがデスクトップで生成されるまでに最大200時間かかります。
長い答え:(正確なハッシュパフォーマンスデータの欠如によるエラーの大きなマージン、パスワードの強度および遅延近似の詳細はありません。)
生の総当たりのコストは、6文字のパスワードと、数字と特殊文字を含む長さ10のパスワードとの間で数十億倍も異なります。 (26 ^ 6 =小文字の場合は3.0E + 8、mixalpha-num-allの場合は94 ^ 10 = 5.3e + 19)ハッシュ速度は実装によって異なります。
したがって、ユーザーが1000の最も一般的に使用されるパスワードの1つを選択した場合、それは3桁のPIN番号と同じくらい良いので、質問は事実上無関係です。
そのための答えは「できるだけ多くの人を自分たちから救うことはできない」ということです。
しかし、アイディアを得るために、ナプキンの逆算をしてみましょう。 データベースが「8文字のランダム文字と同じくらい」という強力な最小要件を設定しているとします
すべての小文字と大文字の文字セットASCII chars、6161234432565770の組み合わせになるすべての数字と特殊文字
では、ハッシュのパフォーマンスについて考えてみましょう。私が近づいたと私が見つけることができた唯一の並列比較はこれでした: https://pthree.org/2014/12/26/sha512crypt-versus-bcrypt/
デフォルトの作業係数10は、SHA512cryptの80.000ラウンドにほぼ等しいと述べています。 現在 SHA 512は256の時間の約120%しかかかりません
つまり、bcryptはcost(10)でSHA256の100.000ラウンドとほぼ等しくなります。
2桁のコストパラメータは、基礎となるBlowfishベースのハッシュアルゴリズムの反復回数の2を底とする対数であり、範囲は04-31でなければなりません。この範囲外の値はcrypt()が失敗する原因になります
cost(10)= 2 ^ 10 = 1024回の反復。したがって、ビットコインのアルゴリズムSHA256は、反復ごとに約100倍高速です。 BitCoinsネットワークが2.14E + 18 SHA256 /秒を実行できると仮定すると、BCrypt /秒の2.14E + 16の反復になります。 charset mixalpha-numeric-allでの長さ8のランダムパスワードのキースペースは、約6.16E + 16です。
これは非常に実行不可能な力であり、当面は安全であると考えることができます。
パスワードが適度に強力な場合、BCryptの「コスト」の最大量は、現在のBitCoinネットワーク全体に対して十分です。
ただし、BCryptとSHA512の比較では、コスト(20)はワークステーションですでに3分以上かかるため、このような大きなコストは今のところ実用的ではありません。 2 ^ 12 * 3.12/60 =〜213時間の外挿
たぶんあなたは間違った質問をしている:
使用する作業要素(反復回数)を尋ねたくないですか(KDF /適応ハッシュを使用)、あなたは尋ねたいです単一のハッシュにはどのくらい時間がかかりますか?そして、そこから作業係数を計算します。
後者に対する答えは、「許容できる限り」です。専門家による詳細はこちら https://security.stackexchange.com/a/3993/69959
したがって、質問に答えるには、ネットワークがハッシュを計算するのにかかる時間を知る必要があります。またはもっと便利なのは、与えられた仕事係数のH/sです。 Bcryptのベンチマークは よく引用されるterms of bcrypt(5)
です。これは作業係数5です。bcrypt(5)のH/sを取得できる場合上記のネットワークの場合、別のクラッキングベンチマークと比較するための基盤があります。
オンプレミスデバイスで私が見つけた最高のものはこれです 8x GTX Titan X cudaHashcatベンチマーク これはbcrypt(5)を133 KHの速度でクラックしますs(執筆時)。これは、分散型クラッキングネットワークと比較するのに適したベースです。
ただ注意してください 分散ハッシュクラッキング は 新しいではありません であり、一般に入手可能なものよりも桁違いに多くのクラッキングパワーがあると想定する必要があります。
パスワードを安全に保つために使用する作業要素を尋ねていますか?
ここに私の個人的なルールがあります:
ローカル開発マシンとアプリがデプロイされるWebサーバーノードでbcryptをベンチマークします。次に、ユーザーを対象とする(UXの観点から)許容できる最長時間を選択します。私にとってこれは約1000ミリ秒です(覚えておいてください:サインアップ画面とログイン画面。頻繁には起こりません)。次に、その時間内にある作業係数を見つけ、ローカルの開発および製品ボックスの中で最も遅いものを選択します。