Blowfish стоимость против времени

Я использую bcrypt/blowfish в php, и когда я устанавливаю параметр стоимости в $10 (думаю, 1024 раунда), процесс шифрования занимает 0,1 секунды. Если я установлю его на 12 долларов, это займет 0,3 секунды. Мой вопрос: занимает ли это 0,3 секунды процессорного времени, т.е. если у меня 100 пользователей, выполняющих этот процесс, придется ли им ждать 30 секунд (0,3 х 100)? (редактировать: может быть короче из-за двухъядерной / многопоточной обработки, но даже 10 секунд недопустимо).

Кроме того: Что является хорошим значением, чтобы оставить этот параметр стоимости? некоторые люди рекомендуют $16, но это занимает более 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";
?>

1 ответ

Честно? Стандарт - 7, но вы можете установить его так, как пожелаете, даже низкий уровень, например, 4, все равно будет стремительно превосходить все остальное. Он также имеет преимущество перед другими хешами в том, что его нельзя ускорить с помощью графических процессоров. Так что это так же медленно (даже медленнее прямо сейчас), чем другие хеши. Таким образом, это все еще так же медленно, как и всегда. Если вы принимаете 0,1 с на 10, то попробуйте 5 или 6. Это снизило бы вас до 0,05 с или около того. Теперь этого достаточно? Это будет зависеть от того, каково ваше определение достаточно.

Лично я бы сказал, что что-либо выше минимума (который равен 4) более чем достаточно. Кроме того, не просто делайте прямой удар. Когда кому-то удастся провести параллельное соединение, они смогут использовать ваши пароли для этого инструмента, который уже запрограммирован. Попробуйте сделать что-то вроде хеширования паролей с помощью другого быстрого хеширования до или после хеширования их с помощью bcrypt. Используйте что-нибудь сильное, например, sha256 или sha512. Таким образом, ваша система не идентична всем, кто использует bcrypt.

Поскольку вы уже используете bcrypt, я буду предполагать, что вы используете правильное засоление хеша (вне того, что требуется только для bcrypt).

Я провел множество тестов на своем собственном ноутбуке и честно остановился на 6 в качестве параметра стоимости, конечно, это не значение по умолчанию, равное 7, но он не настолько медленный, чтобы действительно волновать меня из-за того, что кто-то пытается в него попасть. Это также в миллионы раз медленнее, чем семейство хэшей ша.

Также отредактируйте, если вы хотите, чтобы какой-то код выполнял какие-то действия (поскольку я не знаю, если вы это делаете), я разместил его по этой ссылке. Ссылка на реализацию хеширования на основе bcrypt Я не знаю, хотите ли вы этого, поэтому я и не надевал его здесь. Лицензия безумно либеральна, поэтому, если вы еще не написали ее самостоятельно, я предлагаю вам использовать ее (но, возможно, что-то изменить).

Другие вопросы по тегам