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?
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?
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.
¿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!
¿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:
horsebatterystaple01
) 123456
(pretendo que es una salida hash válida) 123456
coincide con la base de datos. Entonces otorga o niega el acceso. 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.