¿Calculando hashes de contraseña en el navegador?

6

Finalmente, ingresé a Keybase y me sorprendió al ver esto en la página de registro:

¿No se debe hacer el estiramiento de la contraseña y el hashing en el servidor, ya que normalmente no confiamos en un cliente?

    
pregunta Naftuli Kay 01.10.2014 - 22:13
fuente

3 respuestas

6

El punto central de Keybase es que el usuario no tiene que confiar en el servidor con nada. Todas las pruebas pueden ser verificadas sin el servidor. Como la frase clave de Keybase sirve para descifrar la clave privada utilizada para firmar las pruebas, no se puede permitir que el servidor la toque.

Además, uno tiene que confiar en el cliente para que proporcione una frase de contraseña de registro, por lo que incluso en sitios web menos peculiares que Keybase, permitir que el JavaScript haga su propia aplicación de contraseñas con la contraseña sería perfectamente correcto. (Sin embargo, permitir que un usuario inicie sesión con el mismo sería una muy mala idea, ya que alguien podría pasar el hash). Sin embargo, no lo hacen porque a esos sitios se les debe confiar la contraseña del usuario ( vea entre paréntesis), y el hash de JavaScript es más lento y no siempre está disponible.

    
respondido por el Ry- 01.10.2014 - 22:31
fuente
3
  

¿No se debe hacer el estiramiento de la contraseña y el hashing en el servidor, ya que normalmente no confiamos en un cliente?

Tienes las cosas mezcladas aquí. Hay una diferencia entre confiar en un cliente y hash de la contraseña del usuario en el lado del cliente.

Tienes razón en que nunca confiamos en el cliente. Pero aquí somos el cliente y tenemos la necesidad de hacer algo. ¿Por qué deberíamos nosotros, el cliente, confiar en el servidor con nuestra contraseña?

Entonces, lo que sucede es que lo hash localmente para que el servidor nunca sepa lo que escribiste y luego lo envíe. Entonces el servidor debe asegurarse de que sea un hash válido en lugar de aceptar ciegamente lo que recibe, ya que, de hecho, nunca debes confiar en los clientes.

No estoy seguro de cómo explicar esto correctamente, ¡espero que ayude!

    
respondido por el Luc 01.10.2014 - 23:20
fuente
2
  

¿No se debe hacer el estiramiento de la contraseña y el hashing en el servidor, ya que normalmente no confiamos en un cliente?

Eso es cierto, pero no es aplicable en este caso. En primer lugar, el cliente que arruina el hash solo les duele en este escenario.

Tradicionalmente, esto es lo que sucede con un hash del lado del cliente:

  1. Alguien escribe su contraseña ( horsebatterystaple01 )
  2. Está hash y la salida es 123456 (pretendo que es una salida hash válida)
  3. El servidor ve si el hash de 123456 coincide con la base de datos. Entonces otorga o niega el acceso.
  4. Un hacker encuentra la base de datos de contraseñas en el servidor
  5. Envían 123456 al servidor y se registran, omitiendo el hash.

Ahora, esta es la razón por la cual es fácil para un pirata informático piratear un hash del lado del cliente. El objetivo de un hash es evitar que la contraseña sea recuperable, incluso si la base de datos de contraseñas está comprometida. Si no estuvieran aplastados ni salados adecuadamente, entonces el pirata informático no solo podría usar esa contraseña para iniciar sesión en el sitio comprometido, sino que también podría probar otros sitios de banco / correo electrónico para ver si se acepta la contraseña.

Aunque el hashing del lado del cliente evita el segundo escenario, aún sería fácil para un atacante simplemente enviar el servidor 123456 y el servidor otorgaría acceso.

    
respondido por el Anonymous Penguin 02.10.2014 - 04:39
fuente

Lea otras preguntas en las etiquetas