Seguridad del uso de contraseñas usando bcrypt Hecho en el lado del cliente

7

Actualmente estoy usando una técnica en la que envío el nombre de usuario / contraseña en texto simple (usando https) al servidor, que luego realiza bcrypt y se compara con la base de datos. Práctica estándar.

Se considera seguro.

¿El envío de hash bcrypt al servidor para verificarlo sería igualmente seguro?

El punto de cifrado es que es computacionalmente costoso, por lo que los hashes robados no pueden ser forzados a la fuerza bruta (o tomarían mucho tiempo). Con el cliente enviando el hash, creo que esto sigue siendo cierto.

Entonces, la pregunta es, ¿esta técnica pondría en peligro la seguridad de mi red de alguna manera?

- Editar

Me gustaría hacer esto porque reduce la potencia computacional que necesita el servidor. Hacer cosas moderadamente caras en el cliente nunca es una mala idea.

    
pregunta code ninja 07.08.2014 - 14:25
fuente

3 respuestas

17

El problema es que tu hash ahora esencialmente se convierte en tu contraseña. Si le roban su base de datos de hashes, no deben preocuparse por forzarlos bruscamente, porque eso es todo lo que necesita enviar ahora para autenticarse.

    
respondido por el Greg 07.08.2014 - 14:49
fuente
7

Esta publicación debería responder a su pregunta: enlace

Básicamente, si hash en el lado del cliente, la contraseña de hash se convierte en el token de autenticación y eso significa que en esencia estás almacenando la contraseña en texto sin formato en la base de datos.

Entonces, para responder a su pregunta: no comprometería la seguridad de su red, pero significaría que si se viola su base de datos, habrá perdido todo el beneficio de almacenar la contraseña en un formato hash, ya que los hashes son ahora los contraseñas.

    
respondido por el ilikebeets 07.08.2014 - 14:53
fuente
5

Creo que ahora ya sabes por las respuestas, por qué puede ser un problema enviar un hash de contraseña al servidor. Solo me gustaría comentar sobre este punto en particular:

  

Me gustaría hacer esto porque reduce la potencia computacional del   necesidades del servidor. Hacer cosas moderadamente caras en el cliente nunca es   una mala idea.

El hecho de que bcrypt (una función hash adaptable) sea lenta y consuma más potencia computacional del servidor puede hacer que su servidor sea vulnerable a un ataque DoS fácil. Como esto hace que la verificación de contraseñas sea una tarea más intensiva en computación, un atacante puede enviar muchas solicitudes de inicio de sesión al servidor y engañar al servidor para que haga más trabajo del esperado. Puede encontrar más detalles sobre el problema en los siguientes subprocesos:

Can el hashing del lado del cliente reduce el riesgo de denegación de servicio con hashes lentos?

Si te importa sobre los ataques DoS si su servidor está utilizando bcrypt?

Así que, en lugar de las contraseñas de hashing en el lado del cliente, puede hacer uso de una prueba de trabajo esquema donde su navegador realiza un montón de cálculos y proporciona pruebas al servidor de que el servidor puede verificar muy rápidamente en la misma solicitud donde se envía la contraseña. De esta manera, el servidor solo computará el bcrypt si se verifica el PoW. Esto puede evitar que el servidor sea DoS, ya que el cliente también tendrá que trabajar. Para los dispositivos con menos potencia de cálculo (que podrían no ser adecuados para calcular la prueba de trabajo), puede usar esquemas como CAPTCHA.

    
respondido por el Rahil Arora 07.08.2014 - 16:07
fuente

Lea otras preguntas en las etiquetas