5

PHP で bcrypt/blowfish を使用しています。コスト パラメータを $10 (1024 ラウンドだと思います) に設定すると、暗号化プロセスに 0.1 秒かかります。$12 に設定すると、0.3 秒かかります。私の質問は次のとおりです。これは 0.3 秒の CPU 時間を占めていますか?つまり、100 人のユーザーがこのプロセスを実行している場合、全員が 30 秒 (0.3 x 100) 待たなければなりませんか? (編集: dual0core/マルチスレッド処理のために短くなる可能性がありますが、10 秒でも許容できません)。

また、このコスト パラメータをオンにしておくのに適した値はどれですか? $16 を推奨する人もいますが、私のサイト (大規模な Web ホストがホスト) では 5 秒以上かかります。

ちなみに、次のコードを使用して所要時間を確認しています。

<?php
// set a password to work with
$var1 = "doodoo1234";

//echo that password onto the screen 
echo $var1 . "<br /><br />";

//Start the clock
$time_start = microtime(true);

//Run blowfish function to encrypt the password
$hashedpass = PassHash::blowfishhash($var1);

//stop the clock  
$time_end = microtime(true);

//echo the password to the screen
echo $echohashedpass . "<br /><br />";

//Echo the length of the encrypted password to the screen
//(this taught me that blowfish always returns a 60 varchar string)
echo strlen($sajpass). "<br /><br />";

$time = $time_end - $time_start;
echo "that took $time seconds\n";
?>
4

1 に答える 1

4

本音をいうと?標準は7ですが、好きなように設定できます。4のように低くても、他の何よりも飛躍的に向上します。また、GPUを使用して高速化できないという点で、他のハッシュよりも優れています。したがって、他のハッシュと同じくらい遅い(今はさらに遅い)。したがって、それはいつもと同じくらい遅いです。10で0.1秒を取っている場合は、5または6を試してください。これで0.05秒程度になります。では、それで十分ですか?それはあなたの十分な定義が何であるかに依存するでしょう。

個人的には、最小値(4)を超えるもので十分だと思います。また、ブローフィッシュをまっすぐにするだけではいけません。誰かがなんとかそれを並列化するとき、彼らはすでにプレグラムされているこのツールに対してあなたのパスワードを投げることができるでしょう。bcryptでパスワードをハッシュする前または後に、他の高速ハッシュでパスワードをハッシュするようなことを試してください。sha256やsha512のような強いものを使用してください。このように、あなたのシステムはbcryptを使用している他のすべての人と同一ではありません。

あなたはすでにbcryptを使用しているので、ハッシュの適切なソルトを使用していると仮定します(bcryptだけで必要なもの以外)。

私は自分のラップトップでたくさんのベンチマークを実行し、コストパラメータとして6を正直に決めました。これは、デフォルトの7ではないことを確認してください。しかし、誰かがそれに侵入しようとしていることを本当に心配するほど遅くはありません。また、shaファミリーのハッシュよりも数百万倍遅いです。

何かをするためのコードが必要な場合も編集してください(そうするかどうかはわかりません)。このリンクにいくつか投稿しました。bcryptベースのハッシュの実装へのリンク。欲しいかどうかわからないので、ここには載せませんでした。ライセンスはめちゃくちゃリベラルなので、まだ自分で書いたことがない場合は、それを使用することをお勧めします(ただし、何かを変更する可能性があります)。

于 2012-07-09T04:29:45.837 に答える