2012-05-19 4 views
5

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

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

Вы можете попробовать его с помощью теста apache или ab для краткости, чтобы увидеть, как он обрабатывается под нагрузкой. – Zombaya

+1

Nooo! не более бенчмаркинга! ... У меня нет такого доступа к серверу apache на моем веб-хостинге, и я уверен, что есть люди, которые внедрили защиту от дыма и могут ответить на это ... даже если я узнаю, сколько раундов большинство людей используют, я могу использовать это как отправную точку. –

+1

Вы можете сравнивать с локальным компьютером. Я лично использую 8, это по умолчанию [phpass] (http://www.openwall.com/phpass/). – Zombaya

ответ

4

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

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

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

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

Редактирование также, если вам нужен какой-то код для выполнения вещей (так как я не знаю, если вы это сделаете), я разместил несколько ссылок по этой ссылке Link to implementation of bcrypt based hashing. Я не знаю, хотите ли вы этого, поэтому я и не надел его здесь. Лицензия безумно либеральная, поэтому, если вы ее еще не написали, я предлагаю вам использовать ее (но, возможно, изменить что-то).

+2

Затраты 5 и 6 дают ускорение 2^5 = 32 и 2^4 = 16 раз, соответственно, по сравнению со стоимостью 10. Таким образом, если 0,1 секунд используются со стоимостью 10, тогда затраты 5 и 6 занимают около 0,003 или 0,006 секунд, а не 0,05 секунды. – Jaan