2012-05-19 8 views
5

Estoy usando bcrypt/blowfish en php y cuando establezco el parámetro de costo en $ 10 (creo que 1024 rondas) el proceso de encriptación toma 0.1 segundos. Si lo configuro en $ 12, demora 0.3 segundos. Mi pregunta es: ¿Esto ocupa 0,3 segundos de tiempo de CPU, es decir, si tengo 100 usuarios ejecutando este proceso, todos tendrán que esperar 30 segundos (0,3 x 100)? (edit: puede ser más corto debido al procesamiento dual0core/multi-thread, pero incluso 10 segundos son inaceptables).Costo de Blowfish contra tiempo

También: ¿Cuál es un buen valor para dejar este parámetro de costo? algunas personas recomiendan $ 16, pero eso lleva más de 5 segundos en mi sitio (alojado por un gran servidor web).

por la forma en que estoy usando el siguiente código para comprobar el tiempo que se tarda:

<?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

Puedes probarlo con apache benchmark o ab para abreviar para ver cómo se maneja bajo carga. – Zombaya

+1

¡Nooo! ¡No más benchmarking! ... No tengo tanto acceso al servidor Apache en mi servidor web y estoy seguro de que hay personas que han implementado la seguridad de blowfish y pueden responder a esto ... aunque averigüe cuántas rondas la mayoría de la gente está usando Puedo usar eso como punto de partida. –

+1

Puede comparar desde su computadora local. Yo personalmente uso 8, es el valor predeterminado de [phpass] (http://www.openwall.com/phpass/). – Zombaya

Respuesta

4

Honestamente? El estándar es 7, pero puede configurarlo para lo que desee, incluso bajo como 4 todavía va a saltar por encima de todo lo demás. También tiene la ventaja sobre otros hash en el hecho de que no se puede acelerar mediante el uso de GPU. Por lo tanto, es tan lento (incluso más lento ahora) que otros hashes. Por lo tanto, sigue siendo tan lento como siempre lo ha sido. Si estás tomando 0.1s en 10, prueba con 5 o 6. Eso te reduciría a 0.05s más o menos. Ahora bien, ¿es eso suficiente? Depende de cuál sea su definición de suficiente.

Personalmente, diría que cualquier cosa por encima del mínimo (que es 4) es más que suficiente. Además, no lo hagas directamente con blowfish. Cuando alguien logre colocarlo en paralelo, podrá lanzar sus contraseñas contra esta herramienta que ya está pregramada. Intenta hacer algo así como hash las contraseñas con algún otro hash rápido hash antes o después de hash ellos con bcrypt. Usa algo fuerte como sha256 o sha512. De esta forma, su sistema no es idéntico a todos los demás que usan bcrypt.

Dado que ya está usando bcrypt, supongo que está utilizando la salazón adecuada del hash (fuera de lo que solo requiere bcrypt).

que he hecho toneladas de puntos de referencia en mi propio ordenador portátil y me he adaptado honestamente el 6 como el parámetro de coste, seguro que no es el valor por defecto de 7, pero no es lo suficientemente lento como para conseguir realmente me preocupa que alguien tratando de entrar en eso. También es millones de veces más lenta que la familia de hash sha.

Edite también si quiere un código para hacer las cosas (ya que no sé si lo hace), he publicado algo más en este enlace Link to implementation of bcrypt based hashing. No sé si lo quieres, así que es por eso que no lo puse aquí. La licencia es increíblemente liberal, así que si aún no la has escrito tú mismo, te sugiero que la puedas usar (pero tal vez modifiques algo).

+2

Los costos 5 y 6 dan una aceleración de 2^5 = 32 y 2^4 = 16 veces, respectivamente, en comparación con el costo 10. Entonces, si se usan 0.1 segundos con costo 10, entonces los costos 5 y 6 toman alrededor de 0.003 o 0.006 segundos, respectivamente, no 0.05 segundos. – Jaan

Cuestiones relacionadas