web-dev-qa-db-ja.com

最適なbcrypt作業係数

パスワードハッシュの理想的なbcryptの作業要素は何でしょうか。

10の係数を使用すると、ラップトップでパスワードをハッシュするのに約0.1秒かかります。非常に忙しいサイトになってしまうと、それは人々のパスワードをチェックするだけのかなりの作業になります。

おそらく、7の作業係数を使用する方が良いでしょう。パスワードハッシュ作業の合計をラップトップログインごとに約.01sに減らしますか?

総当たりの安全性と運用コストのトレードオフをどのように決定しますか?

78
Chris

値はパスワードに保存されることに注意してください:$2a$(2 chars work)$(22 chars salt)(31 chars hash)。固定値ではありません。

負荷が高すぎる場合は、次にログインするときに、より高速な計算に暗号化するようにしてください。同様に、時間が経過してより良いサーバーが得られたときに、負荷が問題にならない場合は、ログイン時にハッシュの強度をアップグレードできます。

トリックは、ムーアの法則に沿って、ほぼ同じ時間を将来にわたって永続的に保つことです。 数値はlog2なので、コンピューターの速度が2倍になるたびに、デフォルトの数値に1を加えます。

ユーザーのパスワードをブルートフォースにするのにかかる時間を決定します。たとえば、いくつかの一般的な辞書Wordの場合、アカウントの作成でパスワードが脆弱であることがおそらく警告されています。たとえば、1000の一般的な単語の1つであり、攻撃者が0.1秒かけてそれぞれをテストする場合、100を購入します(まあ、いくつかの単語はより一般的です...)。ユーザーが「一般的な辞書の単語」と2つの数字を選択した場合、2時間以上かかります。パスワードデータベースが危険にさらされており、攻撃者が1日に数百のパスワードしか取得できない場合、パスワードを安全に変更するためにほとんどのユーザーを数時間または数日購入しています。それは彼らに時間を買うことの問題です。

http://www.postgresql.org/docs/8.3/static/pgcrypto.html は、考慮すべきパスワードをクラックする場合があります。もちろん、そこにリストされているパスワードはランダムな文字です。辞書の単語...実際には、パスワードが12345の男を保存することはできません。

99
Zer