¿Cómo los navegadores web actuales (o los clientes de correo móvil y cualquier software en general) guardan las contraseñas de los usuarios? Todas las respuestas sobre el almacenamiento de contraseñas dicen que deberíamos almacenar solo hashes, no la contraseña en sí. Pero me cuesta mucho buscar en la web tratando de encontrar las mejores técnicas para almacenar contraseñas cuando sabemos que las necesitaremos en texto plano más adelante, sin almacenarlas en texto plano, sin usar un cifrado débil (clave conocida) y sin pedirle al usuario una contraseña maestra. ¿Algunas ideas?
encryption
passwords
hashing
marcus
fuente
fuente
Respuestas:
localmente se almacena como texto sin formato o se cifra.
cuando se encripta, la clave en / descifrado puede repararse por navegador (codificado en el ejecutable), por máquina (generada en la instalación y almacenada en el directorio de instalación) o por usuario (generada en el primer uso del administrador de contraseñas y almacenada en el
%appdata%
)o se pueden combinar: la clave de nivel de usuario se cifra con la clave de nivel de máquina de modo que cuando el malware toma el archivo donde se almacenan las contraseñas se almacena, es inútil sin el nivel de usuario y las claves de nivel de máquina
Algunos navegadores también le permiten usar una contraseña "maestra" que se combina con la clave existente para proporcionar más seguridad
cuando utiliza un servicio de sincronización (bueno), las contraseñas nunca se almacenan en texto plano en el servidor y nunca se descifran del lado del servidor.
fuente
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.
fuente
Estos programas necesitan la contraseña en texto claro (deben enviarla cuando se solicite). Por lo tanto, se almacena como texto sin formato. Muchos navegadores permiten encriptar todas las contraseñas almacenadas con una contraseña maestra (solicitada solo una vez).
fuente