Como o Google Chrome armazena senhas?

28

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?

Óscar
fonte
Observe que o Google se recusou a implementar uma senha mestra (como o Firefox) porque criaria uma falsa sensação de segurança, e existem ferramentas como o Chromepass que podem descriptografar o banco de dados de senhas, desde que o usuário esteja logado.
Dan Dascalescu
Relacionados: askubuntu.com/q/525019/472560
dskrvk

Respostas:

25

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 Dataarquivo:

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

Você notará que a senha é um blob de dados criptografado. O algoritmo aproximado para criptografar uma nova senha é:

  • gerar uma nova chave de sessão aleatória
  • criptografar a senha com a chave da sessão
  • criptografar a chave de sessão com a chave pública RSA do usuário
  • gerar um código de autenticação de mensagem (HMAC) para os dados criptografados
  • concatenar a chave de sessão criptografada, a senha criptografada e o MAC

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

Os detalhes técnicos

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, CryptProtectDatausada 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:

  • Texto simples :correct battery horse staple
  • Criptografado :01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

Você notará que eu nunca precisei fornecer uma senha. Isso ocorre porque o Windows cuida de tudo isso. No final:

  • uma senha aleatória é gerada para criptografar a senha
  • essa senha é criptografada com uma senha aleatória
  • essa senha é criptografada com sua senha do Windows

Portanto, a única maneira de alguém saber sua senha é se ela souber.

Ian Boyd
fonte
Como o chrome conhece a chave para poder usá-la para decriptar a senha armazenada?
Brunoais 18/10/2013
1
@brunoais O Chrome não conhece a chave usada para criptografar senhas. O Chrome não os descriptografa - o Windows sim.
21813 Ian Boyd
Ah ok. Então, se um programa malicioso entrar no computador, as senhas estarão completamente disponíveis para ele, certo?
Brunoais 19/10/2013
1
@brunoais Somente se você digitou sua senha. Infelizmente, essa é uma limitação fundamental da criptografia: uma vez que os dados são descriptografados, eles são descriptografados.
21813 Ian Boyd
Obrigado. O Chrome parou de me lembrar das minhas senhas (ainda oferecia salvá-las, mas nunca as lembrava), imaginei que o banco de dados de senhas estava corrompido. Resolvido excluindo%LocalAppData%\Google\Chrome\User Data\Default\Login Data
Coronel Panic
8

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.

sblair
fonte
Mas como é gerada a chave de criptografia? Dependendo disso, consideraria o esquema mais ou menos seguro. E o Linux?
Óscar
@ Óscar: No Windows, CryptProtectDatausa 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.
grawity
3
@ Óscar: No Linux, Encryptor::EncryptString não faz nada . Parece haver um código para usar o GNOME Keyring e o KDE Wallet.
grawity
Corrigir. No Linux, KDE Wallet, GNOME Keyring ou outro armazenamento de senhas nativo suportado (que eu esqueço de imediato) é usado.
Michael Hampton
1
então ... parece que é possível ter outro aplicativo separado que basicamente bisbilhota suas senhas do Chrome, já que você já está logado e está funcionando como você?
Rogerdpack #
4

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.

BloodPhilia
fonte
Mas qual é a chave de criptografia?
Óscar
2
Verifique a resposta de sblair. Observe que existe a possibilidade de descriptografia, não importa como seja armazenada. Com o software adequado, qualquer pessoa pode descriptografá-lo. Quando você faz login na sua conta do Windows até o momento do logout, suas senhas são completamente utilizáveis ​​e completamente visíveis. Apenas indicando que não existe uma solução 100% segura de armazenamento de senhas do navegador.
BloodPhilia
1
Não, mas se o seu computador for invadido / infectado, as senhas do navegador poderão ser facilmente recuperadas sem você perceber. Mais uma vez, tudo o que estou apontando é que não há armazenamento de senhas 100% à prova de falhas para navegadores ... Basta responder à sua pergunta sobre a segurança deles.
BloodPhilia
1
Não há "senha mestra". 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.
BloodPhilia
1
Isso deve fornecer uma explicação de seu funcionamento: msdn.microsoft.com/en-us/library/ms995355.aspx
BloodPhilia
1

No Mac, o equivalente à função CryptProtectData no Windows é acessar a senha do "Armazenamento Seguro do Chrome" no Keychain do OS X.

Fazal Majid
fonte