¿Necesita usar la misma cantidad de rondas para todas las personas con bcrypt?

0

Voy a tener contraseñas de usuario de hash en la máquina cliente, y me gustaría que el hash se genere en 0,3 segundos.

¿Debo encontrar el número de rondas y hacer que cada usuario use este número, o el número de rondas depende de la máquina?

Por ejemplo, si descubrí que 10 rondas tomaron 0.3 segundos en mi máquina, ¿significa esto que todos los usuarios deberían usar 10 rondas? O debería ser por máquina. Si es por máquina, tendré que enviar la cantidad de rondas a un servidor y almacenar la cantidad de rondas en la máquina del usuario para asegurarme de que esta cantidad siempre se use en el futuro. ¿Eso esta bien? ¿O las cosas no son tan complejas?

    
pregunta user3100783 31.01.2014 - 08:51
fuente

3 respuestas

0

El ajuste del factor de costo para BCrypt es principalmente un problema para las aplicaciones del lado del servidor. Si el factor de costo es demasiado alto, el servidor puede estar muy ocupado solo con el cálculo de hashes, cuando varias personas intentan iniciar sesión al mismo tiempo. Es por eso que intentamos encontrar un número adecuado de rondas para este servidor.

Si está haciendo el cálculo del lado del cliente, cada cliente tiene suficiente poder de CPU por sí solo para calcular incluso un gran número de rondas, la potencia aumenta con el número de clientes. Sin embargo, las aplicaciones web deberían calcular el lado del servidor hash.

    
respondido por el martinstoeckli 31.01.2014 - 09:44
fuente
0

Si echas un vistazo a esta implementación en PHP , verás que el número de rondas se almacena en una base de datos, lo que significa que es posible cambiar el número de rondas si es necesario.

Entonces, siempre que almacene el número de rondas en algún lugar, no necesita tener el mismo número de rondas para cada usuario.

    
respondido por el Techbrunch 31.01.2014 - 11:15
fuente
0

No hay necesidad de tener el mismo número de rondas en todas partes. Cuando vuelva a marcar otra vez una contraseña determinada (p. Ej., Cuando se verifica una contraseña), debe usar el mismo número de rondas que antes (de lo contrario, no obtendrá el mismo valor), por lo que si El número no está codificado, entonces debe almacenarse junto con el valor de sal y hash. Pero la implementación habitual de bcrypt hace precisamente eso: la salida es una cadena que codifica la salida real de 192 bits, pero también el conteo de sal y iteración.

De hecho, en la mayoría de los casos donde el hash de contraseña se produce en el lado de cliente , la sal todavía se almacena en el servidor, por lo que debe organizar el envío de la sal como un paso previo; puede enviar el recuento de iteraciones en el mismo mensaje.

Tenga en cuenta, sin embargo, que la seguridad adicional contra la fuerza bruta es directamente proporcional a este recuento de iteraciones, por lo que los casos en que permita que el recuento de iteraciones sea bajo serán comparativamente más débiles. Este recuento es una compensación entre la seguridad y la conveniencia del usuario: cuanto mayor es el recuento, mejor es la seguridad, pero también cuanto más tiempo espera el usuario humano.

    
respondido por el Tom Leek 31.01.2014 - 13:29
fuente

Lea otras preguntas en las etiquetas