Imagina la situación:
- La aplicación puede o no ejecutarse a través de SSL / TLS
- La aplicación no debe saber la contraseña del cliente porque el cliente podría reutilizar las contraseñas
¿Entonces el hash combinado de la contraseña del lado del cliente y del servidor no funcionaría mejor?
¿Cómo funcionaría la creación de contraseñas?
- El usuario ingresa la contraseña en un campo.
- El javascript del lado local contiene la contraseña con el nombre de usuario que proporciona sal
- Estos datos con hash se transmiten a través de la red al servidor.
- El servidor agrega sal generado aleatoriamente al hash y recalienta a ambos en un nuevo hash. Este nuevo hash y sal aleatoria del lado del servidor se almacenan
Cómo funcionaría el inicio de sesión:
- El usuario ingresa la contraseña en un campo.
- El valor del campo de "inicio de sesión" se toma como salt y hash de cómputo del lado local.
- Este hash se transmite a través de la red al servidor
- El servidor toma la sal almacenada para ese usuario, combina el hash con la sal y la hace hash.
- El servidor compara el hash nuevo con el hash almacenado, si coincide, el usuario inició sesión correctamente. Si no coincide, se deniega el acceso al usuario.
¿Cuál sería una desventaja de este enfoque en comparación con el enfoque estándar con la transmisión de contraseñas de texto simple a través de Internet y luego la mezcla y el almacenamiento en el servidor?