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 Я не знаю, хотите ли вы этого, поэтому я и не надевал его здесь. Лицензия безумно либеральна, поэтому, если вы еще не написали ее самостоятельно, я предлагаю вам использовать ее (но, возможно, что-то изменить).