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?