In che modo Google Chrome memorizza le password?


28

Sono crittografati su disco? Come? Sono sicuri, ad esempio, nel caso in cui qualcuno si avvii da un Live CD e monti il ​​disco rigido?

Come viene generata la chiave di crittografia? È diverso in Windows e Linux?


Nota che Google ha rifiutato di implementare una password principale (come Firefox) perché creerebbe un falso senso di sicurezza e ci sono strumenti come Chromepass che possono decrittografare il database delle password, a condizione che l'utente abbia effettuato l'accesso.
Dan Dascalescu

Risposte:


25

Sembra che tu sia curioso in particolare della chiave utilizzata per crittografare le password in Chrome.

La risposta è:

Ogni password è crittografata con una chiave casuale diversa.

E quindi la password crittografata viene archiviata nel file di database SQLite:

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

È possibile utilizzare qualcosa come SQLite Database Browser o SQLite Maestro per visualizzarlo. Ecco uno snippet dal mio Login Datafile:

origin_url                                username_value               password_value
========================================  ==============               ========================
http://thepiratebay.org/register          JolineBlomqvist@example.com  01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

Noterai che la password è un BLOB crittografato di dati. L'algoritmo approssimativo per crittografare una nuova password è:

  • genera una nuova chiave di sessione casuale
  • crittografare la password con la chiave di sessione
  • crittografare la chiave di sessione con la chiave pubblica RSA dell'utente
  • generare un codice di autenticazione dei messaggi (HMAC) per i dati crittografati
  • concatena la chiave di sessione crittografata, la password crittografata e il MAC

E Chrome salva quel BLOB nel suo database SQLite.

Ma per rispondere alla tua domanda: da dove viene la chiave di crittografia?

Ogni password è crittografata con una diversa chiave generata casualmente

I dettagli tecnici

Naturalmente ho lasciato fuori i dettagli tecnici. Chrome non crittografa le tue password. Chrome non ha una chiave master utilizzata per crittografare nulla. Chrome non esegue la crittografia. Windows lo fa.

C'è una funzione di Windows CryptProtectData, che viene utilizzata per crittografare qualsiasi dato arbitrario che ti piace. I dettagli della sua chiamata sono meno importanti. Ma se invento uno pseudo-linguaggio che in qualche modo può essere decifrabile come qualsiasi lingua di programmazione, Chrome chiama:

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

Quindi la password:

  • Testo normale :correct battery horse staple
  • Crittografato :01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

Noterai che non ho mai avuto bisogno di fornire una password. Questo perché Windows si occupa di tutto ciò. Alla fine:

  • viene generata una password casuale per crittografare la password
  • quella password è crittografata con una password casuale
  • quella password è crittografata con la tua password di Windows

Quindi l'unico modo per qualcuno di conoscere la tua password è se conoscono la tua password.


In che modo Chrome conosce la chiave per poterla utilizzare per decriptare la password memorizzata?
brunoais,

1
@brunoais Chrome non conosce la chiave utilizzata per crittografare le password. Chrome non li decodifica, come fa Windows.
Ian Boyd,

Ah ok. Quindi se un programma dannoso entra nel computer le password sono completamente disponibili per quel programma, giusto?
brunoais,

1
@brunoais Solo se hai inserito la password. Sfortunatamente questa è una limitazione fondamentale della crittografia: una volta decifrati i dati vengono decifrati.
Ian Boyd,

Grazie. Chrome ha smesso di ricordare le mie password (offriva comunque di salvarle, ma non le ha mai ricordate), ho pensato che il database delle password fosse corrotto. Risolto da cancellazione%LocalAppData%\Google\Chrome\User Data\Default\Login Data
Colonnello Panic

8

Le password sono crittografate e archiviate in un database SQLite:

Il pezzo importante qui è CryptProtectData, che è una funzione API di Windows per la crittografia dei dati. I dati crittografati con questa funzione sono piuttosto solidi. Può essere decrittografato solo sullo stesso computer e dallo stesso utente che lo ha crittografato in primo luogo.


Ma come viene generata la chiave di crittografia? A seconda di ciò, considererei lo schema più o meno sicuro. E che dire di Linux?
Óscar,

@ Óscar: su Windows, CryptProtectDatautilizza le credenziali di Windows (non la password, ma alcuni altri dati) come chiave. AFAIK, è la stessa funzione utilizzata per proteggere i certificati, le credenziali di rete e tutto il resto.
gravità

3
@ Óscar: su Linux, Encryptor::EncryptString non fa nulla . Sembra che ci sia un codice per usare GNOME Keyring e KDE Wallet.
gravità

Corretta. Su Linux, invece, viene utilizzato KDE Wallet, GNOME Keyring o un altro archivio di password nativo supportato (che dimentico di persona).
Michael Hampton,

1
quindi ... sembra che sia possibile avere un'altra app separata che sostanzialmente fa lo snoop delle tue password di Chrome, dato che sei già connesso e funziona come te?
rogerdpack,

4

Sono "crittografati" ma è una crittografia reversibile. Chrome deve inviare la password non elaborata al sito per cui è stata archiviata, quindi se Chrome può decrittografarla e utilizzarla, così possono fare anche altre persone. La memorizzazione delle password non è mai sicura al 100%.


Ma qual è la chiave di crittografia?
Óscar,

2
Controlla la risposta di sblair. Si noti che esiste una possibilità di decrittografia, indipendentemente da come è memorizzata. Con il software adeguato, chiunque potrebbe decifrarlo. Quando hai effettuato l'accesso al tuo account Windows fino al momento della disconnessione, le tue password sono completamente utilizzabili e completamente visualizzabili. Indico solo che non esiste una soluzione sicura al 100% per l'archiviazione delle password del browser.
BloodPhilia,

1
No, ma se il tuo computer è stato dirottato / infetto, le password del browser potrebbero essere facilmente recuperate senza che te ne accorgessi. Ancora una volta, tutto ciò che sto sottolineando è che non esiste un archivio di password a prova di errore al 100% per i browser ... Rispondi solo alla tua domanda sulla loro sicurezza.
BloodPhilia,

1
Non esiste una "password principale". CryptProtectDataè un'API di Windows, Windows esegue effettivamente tutta la crittografia e il recupero, la chiave di crittografia dipende dall'account utente e dal sistema.
BloodPhilia,

1
Questo dovrebbe fornire una spiegazione del suo funzionamento: msdn.microsoft.com/en-us/library/ms995355.aspx
BloodPhilia


1

Su Mac, l'equivalente della funzione CryptProtectData in Windows è accedere alla password per "Chrome Safe Storage" nel portachiavi di OS X.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.