Comment Google Chrome stocke-t-il des mots de passe?

Sont-ils cryptés dans un disque? Comment? Sont-ils sûrs, par exemple, dans le cas où quelqu'un démarre à partir d'un Live CD et monte le disque dur?

Comment la clé de cryptage est-elle générée? Est-ce différent dans Windows et Linux?

Vous semblez être particulièrement intéressé par la clé utilisée pour chiffrer les mots de passe dans Chrome.

La réponse est:

Chaque mot de passe est crypté avec une touche aléatoire différente.

Ensuite, le mot de passe crypté est stocké dans le fichier de base de données SQLite:

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

Vous pouvez utiliser quelque chose comme SQLite Database Browser ou SQLite Maestro pour le visualiser. Voici un extrait de mon fichier de Login Data :

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

Vous remarquerez que le mot de passe est un bloc de données chiffré. L'algorithme approximatif pour chiffrer un nouveau mot de passe est:

  • Génère une nouvelle touche de session aléatoire
  • Chiffrer le mot de passe avec la clé de session
  • Chiffrer la clé de session avec la clé publique RSA de l'utilisateur
  • Génère un code d'authentification des messages (HMAC) pour les données chiffrées
  • Concaténer la clé de session chiffrée, le mot de passe crypté et le MAC

Et Chrome enregistre ce blob dans sa base de données SQLite.

Mais pour répondre à votre question: D'où vient la clé de cryptage?

Chaque mot de passe est chiffré avec une autre touche générée au hasard

Les détails techniques

Bien sûr, j'ai laissé de côté les détails techniques. Chrome ne crypte pas vos mots de passe lui-même. Chrome n'a pas de clé principale pour crypter tout. Chrome ne fait pas le cryptage. Windows fait.

Il existe une fonction Windows, CryptProtectData , qui est utilisée pour chiffrer toutes les données arbitraires que vous aimez. Les détails de l'appeler sont moins importants. Mais si j'invente un pseudo-langage qui peut être déchiffrable comme n'importe quel langage de programmation, Chrome appelle:

 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 

Donc, le mot de passe:

  • Texte en texte clair : correct battery horse staple
  • Encrypted: 01000000D08C9DDF0115D1118C7A00C04FC297EB01000000BB0E1F4548ADC84A82EC0873552BCB460000000002000000000003660000C0000000100000006811169334524F33D880DE0C842B9BBB0000000004800000A00000001000000043C8E23979F5CC5499D73610B969A92A08000000EE07953DEC9F7CA01400000098B5F0F01E35B0DC6BBAFC53A9B1254AC999F4FA

Vous remarquerez que je n'ai jamais eu besoin de fournir un mot de passe. C'est parce que Windows s'occupe de tout cela. À la fin:

  • Un mot de passe aléatoire est généré pour chiffrer le mot de passe
  • Ce mot de passe est crypté avec un mot de passe aléatoire
  • Ce mot de passe est chiffré avec votre mot de passe Windows

Donc, la seule façon pour quelqu'un de connaître votre mot de passe est de savoir si vous connaissez votre mot de passe.

Les mots de passe sont cryptés et stockés dans une base de données SQLite:

La pièce importante ici est CryptProtectData , qui est une fonction API Windows pour le cryptage des données. Les données chiffrées avec cette fonction sont assez solides. Il ne peut être décrypté sur la même machine et par le même utilisateur qui l'a chiffré en premier lieu.

Ils sont "chiffrés" mais c'est un cryptage réversible. Chrome doit envoyer le mot de passe brut au site pour lequel il a été stocké, donc si Chrome peut le décrypter et l'utiliser, d'autres personnes peuvent également l'utiliser. Le stockage des mots de passe n'est jamais 100% sûr.

Google Chrome crypte les mots de passe et les stocke dans SQLite DB, mais ils peuvent être facilement visualisés avec les applications spéciales de récupération de mot de passe telles que ChromePass ( http://www.nirsoft.net/utils/chromepass.html ) ou SecurePassword Kit ( http: // http://Www.getsecurepassword.com/ )

Sur Mac, l'équivalent de la fonction CryptProtectData dans Windows est d'accéder au mot de passe pour "Chrome Safe Storage" dans le porte-clés de OS X.