¿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?
¿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?
Respuestas:
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 Data
archivo:
origin_url username_value password_value
======================================== ============== ========================
http://thepiratebay.org/register JolineBlomqvist@example.com 01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA
Notarás que la contraseña es un blob de datos cifrado. El algoritmo aproximado para cifrar una nueva contraseña es:
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
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:
correct battery horse staple
01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA
Notarás que nunca necesité proporcionar una contraseña. Eso es porque Windows se encarga de todo eso. En el final:
Entonces, la única manera para que alguien sepa su contraseña es si la conocen.
%LocalAppData%\Google\Chrome\User Data\Default\Login Data
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.
CryptProtectData
utiliza 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.
Encryptor::EncryptString
no hace nada . Parece que hay código para usar GNOME Keyring y KDE Wallet.
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.
CryptProtectData
es 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.
Google Chrome cifra las contraseñas y las almacena en SQLite DB, pero se pueden ver fácilmente con las aplicaciones especiales de recuperación de contraseña como ChromePass ( http://www.nirsoft.net/utils/chromepass.html ) o SecurePassword Kit ( http: // www.getsecurepassword.com/ )
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.