¿Cómo guarda un navegador web las contraseñas?

8

¿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?

marcus
fuente
Es probable que esta pregunta se ajuste mejor al sitio de IT Security SE.
Bernard
@Bernard Gracias, no conocía el sitio de seguridad de TI ...
marcus
A partir de hoy (Chrome 60), Chrome ha estado almacenando contraseñas de texto claro desde ... bueno, siempre. Existe una acalorada discusión sobre qué tan bien deben protegerse estas contraseñas de texto claro del acceso del usuario. Disfruta de muchos argumentos válidos de ambos lados aquí .
bers

Respuestas:

4

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.

monstruo de trinquete
fuente
Gracias. De todas las respuestas, parece que no hay una buena solución "fuerte", ya sea texto sin formato o alguna ofuscación (es decir, un cifrado cuya clave se puede obtener de la máquina)
marcus
12

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.

Arseni Mourzenko
fuente
2
Parece preocupado por la forma en que se almacena la contraseña maestra, pero realmente no necesitamos (o queremos) almacenarla, ¿verdad? Según tengo entendido, solo necesitamos la contraseña maestra como (parte de la) clave para descifrar las contraseñas guardadas y para cifrar nuevas contraseñas. En lo que respecta al descifrado, si la contraseña maestra es incorrecta, la contraseña específica descifrada también (con suerte) también será incorrecta. El problema real es para las nuevas contraseñas, ya que no queremos cifrarlas con la contraseña incorrecta, pero no podemos verificar que el paso maestro descifre una cadena predeterminada correctamente (por lo tanto, debemos almacenar la cadena codificada).
SylvainD
Convenido. Tener una contraseña maestra lo coloca nuevamente en la misma posición en la que se encuentra en el lado del servidor: solo verifique. Puede verificar la contraseña con un hash, luego usar la entrada de los usuarios si se desprotege. No hay necesidad de almacenarlo permanentemente. Este es también el mecanismo utilizado por algunas aplicaciones para actualizar el hash cuando se vuelven obsoletos. Espere a que el usuario inicie sesión, verifique con el hash anterior, luego vuelva a escribir la entrada mientras todavía está en la memoria en texto sin cifrar y almacene el hash nuevo y más seguro.
Matthew Scharley
@Josay: nos preocupa la forma en que se almacena la contraseña maestra si no queremos pedirle al usuario que la ingrese cada vez que abra un navegador. Si el usuario tiene que ingresarlo, se vuelve muy simple técnicamente, ya que almacenamos solo su hash.
Arseni Mourzenko
@MainMa Ok, estoy 100% contigo entonces.
SylvainD
Vale la pena señalar que la mayoría de los navegadores ahora usan el almacén de claves del sistema operativo donde existe uno. Por ejemplo, si tuviera que almacenar mi nombre de usuario y contraseña SO en mi PC (firefox en Win 10), se almacenaría en el almacén de claves. Esto está encriptado, pero desbloqueado al iniciar sesión. Alguien que esté sentado en mi PC inició sesión como yo podría acceder a ellos, pero si inicie sesión como otra persona, mis contraseñas no serían alcanzables.
Baldrickk
0

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).

Matteo
fuente