¿Cómo almacena Google Chrome las contraseñas?

27

¿Están encriptados en el disco? ¿Cómo? ¿Son seguros, por ejemplo, en caso de que alguien arranque desde un Live CD y monte el disco duro?

¿Cómo se genera la clave de cifrado? ¿Es diferente en Windows y Linux?

Óscar
fuente
Tenga en cuenta que Google se negó a implementar una contraseña maestra (como lo ha hecho Firefox) porque crearía una falsa sensación de seguridad, y hay herramientas como Chromepass que pueden descifrar la base de datos de contraseñas, siempre que el usuario haya iniciado sesión.
Dan Dascalescu
Relacionado: askubuntu.com/q/525019/472560
dskrvk

Respuestas:

22

Parece que tiene curiosidad específicamente sobre la clave utilizada para cifrar las contraseñas en Chrome.

La respuesta es:

Cada contraseña está encriptada con una clave aleatoria diferente.

Y luego la contraseña cifrada se almacena en el archivo de base de datos SQLite:

%LocalAppData%\Google\Chrome\User Data\Default\Login Data

Puede usar algo como SQLite Database Browser o SQLite Maestro para verlo. Aquí hay un fragmento de mi Login Dataarchivo:

origin_url                                username_value               password_value
========================================  ==============               ========================
http://thepiratebay.org/register          [email protected]  01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

Notarás que la contraseña es un blob de datos cifrado. El algoritmo aproximado para cifrar una nueva contraseña es:

  • generar una nueva clave de sesión aleatoria
  • cifrar la contraseña con la clave de sesión
  • cifrar la clave de sesión con la clave pública RSA del usuario
  • generar un código de autenticación de mensaje (HMAC) para los datos cifrados
  • concatenar la clave de sesión cifrada, la contraseña cifrada y el MAC

Y Chrome guarda ese blob en su base de datos SQLite.

Pero para responder a su pregunta: ¿De dónde viene la clave de cifrado?

Cada contraseña se cifra con una clave diferente generada aleatoriamente

Los detalles técnicos

Por supuesto, omití los detalles técnicos. Chrome no cifra sus contraseñas en sí. Chrome no tiene una clave maestra utilizada para cifrar nada. Chrome no hace el cifrado. Windows lo hace.

Hay una función de Windows CryptProtectData, que se utiliza para cifrar cualquier información arbitraria que desee. Los detalles de llamarlo son menos importantes. Pero si invento un pseudo-lenguaje que de alguna manera puede ser descifrable como cualquier lenguaje de programación, Chrome llama:

CryptProtectData(
      { cbData: 28, pbData: "correct battery horse staple" },
      "The password for superuser.com and all the glee therein",
      null, //optional entropy
      null, //reserved
      null, //prompt options
      0, //flags
      { cbData:   pbData:  }); //where the encrypted data will go

Entonces la contraseña:

  • Texto sin formato :correct battery horse staple
  • Cifrado :01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

Notarás que nunca necesité proporcionar una contraseña. Eso es porque Windows se encarga de todo eso. En el final:

  • Se genera una contraseña aleatoria para cifrar la contraseña
  • esa contraseña está encriptada con una contraseña aleatoria
  • esa contraseña está encriptada con su contraseña de Windows

Entonces, la única manera para que alguien sepa su contraseña es si la conocen.

Ian Boyd
fuente
Entonces, ¿cómo conoce Chrome la clave para poder usarla para eliminar la contraseña almacenada?
Brunoais
1
@brunoais Chrome no conoce la clave utilizada para cifrar las contraseñas. Chrome no los descifra, Windows sí.
Ian Boyd
Ah ok Entonces, si un programa malicioso ingresa a la computadora, las contraseñas están completamente disponibles para ese programa, ¿verdad?
brunoais
1
@brunoais Solo si ha ingresado su contraseña. Desafortunadamente, esta es una limitación fundamental del cifrado: una vez que se descifran los datos, se descifran.
Ian Boyd
Gracias. Chrome dejó de recordar mis contraseñas (todavía ofrecía guardarlas, pero nunca las recuperó), pensé que la base de datos de contraseñas estaba dañada. Resuelto eliminando%LocalAppData%\Google\Chrome\User Data\Default\Login Data
Coronel Panic
8

Las contraseñas están encriptadas y almacenadas en una base de datos SQLite:

La pieza importante aquí es CryptProtectData, que es una función API de Windows para cifrar datos. Los datos cifrados con esta función son bastante sólidos. Solo puede ser descifrado en la misma máquina y por el mismo usuario que lo cifró en primer lugar.

sblair
fuente
Pero, ¿cómo se genera la clave de cifrado? Dependiendo de esto, consideraría el esquema más o menos seguro. ¿Y qué hay de Linux?
Óscar
@ Óscar: en Windows, CryptProtectDatautiliza sus credenciales de Windows (no la contraseña, sino algunos otros datos) como clave. AFAIK, es la misma función utilizada para proteger sus certificados, credenciales de red y todo eso.
Grawity
3
@ Óscar: En Linux, Encryptor::EncryptString no hace nada . Parece que hay código para usar GNOME Keyring y KDE Wallet.
Grawity
Correcto. En Linux, se usa KDE Wallet, GNOME Keyring u otro almacén de contraseñas nativo compatible (que olvido de antemano).
Michael Hampton
1
entonces ... parece que es posible tener otra aplicación separada que básicamente espíe tus contraseñas de Chrome, dado que ya has iniciado sesión y se está ejecutando como tú.
rogerdpack
4

Están "encriptados" pero es una encriptación reversible. Chrome tiene que enviar la contraseña sin procesar al sitio donde se almacenó, por lo que si Chrome puede descifrarlo y usarlo, también pueden hacerlo otras personas. Almacenar contraseñas nunca es 100% seguro.

BloodPhilia
fuente
Pero, ¿cuál es la clave de cifrado?
Óscar
2
Comprueba la respuesta de sblair. Tenga en cuenta que existe la posibilidad de descifrar, sin importar cómo se almacene. Con el software adecuado, cualquiera podría descifrarlo. Cuando haya iniciado sesión en su cuenta de Windows hasta el momento en que cierre la sesión, sus contraseñas serán completamente utilizables y completamente visibles. Simplemente indicando que no existe una solución 100% segura para almacenar contraseñas del navegador.
BloodPhilia
1
No, pero si su computadora es secuestrada / infectada, las contraseñas del navegador podrían recuperarse fácilmente sin que usted lo note. Una vez más, todo lo que estoy señalando es que no hay un almacenamiento de contraseñas 100% a prueba de fallas para los navegadores ... Simplemente responda su pregunta sobre su seguridad.
BloodPhilia
1
No hay una "contraseña maestra". CryptProtectDataes una API de Windows, Windows realmente hace todo el cifrado y la recuperación, la clave de cifrado depende de su cuenta de usuario y sistema.
BloodPhilia
1
Esto debería proporcionarle una explicación de su funcionamiento: msdn.microsoft.com/en-us/library/ms995355.aspx
BloodPhilia
1

En Mac, el equivalente a la función CryptProtectData en Windows es acceder a la contraseña para "Chrome Safe Storage" en el llavero de OS X.

Fazal Majid
fuente