Las contraseñas se almacenan en texto plano, a menos que se use una contraseña maestra.
Cuando las personas le dicen que debe almacenar solo hashes de contraseñas, están hablando del almacenamiento del lado del servidor , no del lado del cliente.
Lado del servidor
Cuando tiene su propio sitio web cuando los usuarios pueden registrarse / iniciar sesión con sus contraseñas, no necesita (y nunca debe) almacenar las contraseñas ellos mismos:
No necesita almacenar contraseñas simples , porque solo tiene que verificar que la contraseña utilizada durante un inicio de sesión coincida con la contraseña proporcionada por el usuario durante el registro. Puede hacerlo con hashes, ya que diferentes contraseñas tendrían diferentes hashes¹.
No debe almacenar contraseñas simples . ¿Qué pasa si su sitio web es pirateado? Además, muchas personas reutilizan las mismas contraseñas una y otra vez, por lo que prácticamente le da a cualquier hacker la posibilidad de acceder a la cuenta de Facebook, la cuenta de correo, etc. de sus usuarios.
Lado del cliente
Los navegadores son diferentes. Almacenan las contraseñas en la máquina del cliente y deben tener una contraseña original, no un hash.
Esto significa que esas contraseñas se almacenan en texto sin formato en la mayoría de los casos.
En cuanto a la seguridad, no importa demasiado. Esas contraseñas se almacenan en un directorio que pertenece a la cuenta de usuario. Esto significa que depende del sistema operativo (y del usuario) configurar adecuadamente los permisos para los archivos de los usuarios y restringir el acceso al archivo que contiene las contraseñas para el propio usuario.
En cuanto a la experiencia del usuario, esto es lo más fácil de hacer. Otra posibilidad es cifrar esas contraseñas con una contraseña maestra, en cuyo caso el usuario tendría que proporcionar la contraseña maestra cada vez que abra el navegador . Estoy bastante seguro de que la mayoría de los usuarios nunca lo disfrutarían.
Si la contraseña maestra se almacena en algún lugar, surge el mismo problema: si almacena la contraseña maestra en texto plano, ¿cuál es el punto? Si lo encripta, debe tener una contraseña maestro-maestro.
Sincronización
Tenga en cuenta que la mayoría de los navegadores permiten a los usuarios sincronizar sus datos en varias máquinas. La sincronización utiliza un servidor remoto para almacenar las cookies, el historial, los marcadores y las contraseñas. Por ejemplo, Chrome utiliza servidores de Google para almacenar estos datos.
En este caso, las contraseñas nunca se almacenan en texto sin formato en los servidores de sincronización , de lo contrario, sería un problema de seguridad. En Chrome, debe elegir la contraseña maestra para la sincronización (o usar la de su cuenta de Google). Esta contraseña maestra se usará para cifrar las contraseñas (siempre) y otros datos como el historial o los marcadores (opcional).
¹ Por simplicidad, puede imaginar que las diferentes contraseñas no pueden tener los mismos valores hash. En teoría, esto está mal, ya que pueden existir colisiones. En la práctica, si utiliza un algoritmo hash fuerte, como SHA-256, puede descuidar el riesgo de colisión de un sitio web incluso con millones de usuarios registrados. Las cosas son diferentes si usa un algoritmo hash obsoleto y depreciado, como MD5.