Eles são criptografados em disco? Quão? Eles são seguros, por exemplo, no caso de alguém inicializar a partir de um Live CD e montar o disco rígido?
Como é gerada a chave de criptografia? É diferente no Windows e Linux?
Eles são criptografados em disco? Quão? Eles são seguros, por exemplo, no caso de alguém inicializar a partir de um Live CD e montar o disco rígido?
Como é gerada a chave de criptografia? É diferente no Windows e Linux?
Respostas:
Você parece curioso especificamente sobre a chave usada para criptografar as senhas no Chrome.
A resposta é:
Toda senha é criptografada com uma chave aleatória diferente.
E a senha criptografada é armazenada no arquivo de banco de dados SQLite:
%LocalAppData%\Google\Chrome\User Data\Default\Login Data
Você pode usar algo como o SQLite Database Browser ou o SQLite Maestro para visualizá-lo. Aqui está um trecho do meu Login Data
arquivo:
origin_url username_value password_value
======================================== ============== ========================
http://thepiratebay.org/register JolineBlomqvist@example.com 01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA
Você notará que a senha é um blob de dados criptografado. O algoritmo aproximado para criptografar uma nova senha é:
E o Chrome salva esse blob no banco de dados SQLite.
Mas, para responder à sua pergunta: De onde vem a chave de criptografia?
Cada senha é criptografada com uma chave gerada aleatoriamente diferente
Claro que deixei de fora os detalhes técnicos. O Chrome não criptografa suas senhas. O Chrome não possui uma chave mestra usada para criptografar nada. O Chrome não faz a criptografia. Windows faz.
Existe uma função do Windows, CryptProtectData
usada para criptografar quaisquer dados arbitrários que você desejar. Os detalhes de chamá-lo são menos importantes. Mas se eu inventar uma pseudo-linguagem que possa ser decifrável à medida que qualquer programação fica lenta, o Chrome chama:
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
Então a senha:
correct battery horse staple
01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA
Você notará que eu nunca precisei fornecer uma senha. Isso ocorre porque o Windows cuida de tudo isso. No final:
Portanto, a única maneira de alguém saber sua senha é se ela souber.
%LocalAppData%\Google\Chrome\User Data\Default\Login Data
As senhas são criptografadas e armazenadas em um banco de dados SQLite:
A parte importante aqui é
CryptProtectData
, que é uma função da API do Windows para criptografar dados. Os dados criptografados com esta função são bastante sólidos. Ele só pode ser descriptografado na mesma máquina e pelo mesmo usuário que a criptografou em primeiro lugar.
CryptProtectData
usa suas credenciais do Windows (não a senha, mas alguns outros dados) como chave. AFAIK, é a mesma função usada para proteger seus certificados, credenciais de rede e tudo mais.
Encryptor::EncryptString
não faz nada . Parece haver um código para usar o GNOME Keyring e o KDE Wallet.
Eles são "criptografados", mas é uma criptografia reversível. O Chrome precisa enviar a senha bruta para o site para o qual foi armazenada; portanto, se o Chrome pode descriptografar e usá-lo, o mesmo acontece com outras pessoas. O armazenamento de senhas nunca é 100% seguro.
CryptProtectData
é uma API do Windows, o Windows realmente faz toda a criptografia e recuperação, a chave de criptografia depende da sua conta e sistema de usuário.
O Google Chrome criptografa senhas e as armazena no SQLite DB, mas elas podem ser facilmente visualizadas com aplicativos especiais de recuperação de senhas, como ChromePass ( http://www.nirsoft.net/utils/chromepass.html ) ou SecurePassword Kit ( http: // www.getsecurepassword.com/ )
No Mac, o equivalente à função CryptProtectData no Windows é acessar a senha do "Armazenamento Seguro do Chrome" no Keychain do OS X.