¿El hashing del lado del cliente agrega algún beneficio aquí?

0

Mi situación es la siguiente:

  • Las credenciales de usuario se almacenan en el servidor, bcrypt, hashes aleatorios.
  • Estoy diseñando una API REST, ¡así que me gustaría mantener esto lo más apátrida posible!
  • El cliente es una aplicación de Android / iPhone.
  • Todas las comunicaciones se realizan a través de HTTPS con el TLS más reciente

Estos son los escenarios en los que tengo que transmitir una contraseña por cable:

  • El usuario inicia sesión
  • El usuario cambia su contraseña (necesita la contraseña anterior para confirmarla)
  • El usuario cambia su correo electrónico (necesita la contraseña actual para su confirmación)

En todos estos casos, me pregunto si habría algún beneficio de seguridad adicional al agregar / cifrar la contraseña en el lado del cliente, antes de enviarla por HTTPS al servidor.

En una nota relacionada, ya que las contraseñas se almacenan como hashes en el servidor, ¿cómo podría incluso implementar un esquema de hashing / cifrado adicional del lado del cliente que genere alguna forma de la contraseña original en el servidor, de modo que pueda compararlo con el hash almacenado?

    
pregunta Lukas Knuth 26.01.2018 - 11:05
fuente

1 respuesta

2

Cuando hash contraseñas en el cliente, el secreto compartido entre el cliente y el servidor ya no es la contraseña de texto simple, sino el hash de la contraseña de texto claro. Su contraseña ya no es monkey , su contraseña ahora es $2a$04$RuNMmxnNakaesRjxjI3IAO70b2zK8lb5eRLb./huDLJ0OkWC0ikGm (bcrypt hash de "monkey"). El servidor volvería a hacer hash de este hash y lo compararía con el hash-hash que ya tiene en la base de datos para esa cuenta de usuario.

Entonces, cualquier persona que de alguna manera obtenga el hash calculado por el cliente puede comprometer su cuenta de usuario.

La única ventaja que tiene en este esquema es que el servidor nunca está al tanto de la contraseña de texto simple del usuario, ni siquiera en la memoria. Esto hace que sea prácticamente imposible que el servidor robe las contraseñas de texto claro, incluso si tiene intenciones maliciosas.

Tenga en cuenta que este esquema requiere que el cliente siempre use la misma sal para el hashing de la misma contraseña. De lo contrario, volver a aplicar hash al hash en el lado del servidor no dará el mismo resultado. Pero puede usar diferentes sales en diferentes clientes y puede cambiar la sal cuando cambia la contraseña de cleartext.

    
respondido por el Philipp 26.01.2018 - 11:12
fuente

Lea otras preguntas en las etiquetas