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

28

Sont-ils chiffrés sur disque? Comment? Sont-ils sûrs, par exemple, si 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 sous Windows et Linux?

Oscar
la source
Notez que Google a refusé d'implémenter un mot de passe principal (comme Firefox) car cela créerait un faux sentiment de sécurité, et il existe des outils comme Chromepass qui peuvent décrypter la base de mots de passe, à condition que l'utilisateur soit connecté.
Dan Dascalescu
EN RELATION
dskrvk

Réponses:

25

Vous semblez être curieux de savoir spécifiquement la clé utilisée pour crypter les mots de passe dans Chrome.

La réponse est:

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

Et puis le mot de passe chiffré 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 l'afficher. Voici un extrait de mon Login Datafichier:

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

Vous remarquerez que le mot de passe est une goutte de données chiffrée. L'algorithme approximatif pour crypter un nouveau mot de passe est:

  • générer une nouvelle clé de session aléatoire
  • crypter le mot de passe avec la clé de session
  • crypter la clé de session avec la clé publique RSA de l'utilisateur
  • générer un code d'authentification de message (HMAC) pour les données chiffrées
  • concaténer la clé de session chiffrée, le mot de passe chiffré 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 chiffrement?

Chaque mot de passe est crypté avec une clé différente générée aléatoirement

Les détails techniques

Bien sûr, j'ai omis les détails techniques. Chrome ne chiffre pas lui-même vos mots de passe. Chrome n'a pas de clé principale utilisée pour chiffrer quoi que ce soit. Chrome ne fait pas le cryptage. Windows le fait.

Il existe une fonction Windows CryptProtectData, qui est utilisée pour crypter toutes les données arbitraires que vous aimez. Les détails de l'appel sont moins importants. Mais si j'invente un pseudo-langage qui peut être déchiffrable comme n'importe quelle langue 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 clair :correct battery horse staple
  • Crypté :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 crypter le mot de passe
  • ce mot de passe est crypté avec un mot de passe aléatoire
  • ce mot de passe est crypté avec votre mot de passe Windows

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

Ian Boyd
la source
Comment Chrome connaît-il la clé pour pouvoir l'utiliser pour décrypter le mot de passe stocké?
brunoais
1
@brunoais Chrome ne connaît pas la clé utilisée pour crypter les mots de passe. Chrome ne les déchiffre pas - Windows le fait.
Ian Boyd
Ah ok. Donc, si un programme malveillant pénètre dans l'ordinateur, les mots de passe sont entièrement disponibles pour ce programme, non?
brunoais
1
@brunoais Uniquement si vous avez tapé votre mot de passe. Malheureusement, il s'agit d'une limitation fondamentale du cryptage: une fois les données décryptées, elles sont décryptées.
Ian Boyd
Merci. Chrome a arrêté de me souvenir de mes mots de passe (il proposait toujours de les enregistrer, mais ne les a jamais rappelés), j'ai pensé que la base de données de mots de passe était corrompue. Résolu en supprimant%LocalAppData%\Google\Chrome\User Data\Default\Login Data
Colonel Panic
8

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

L'élément important ici est CryptProtectData, qui est une fonction API Windows pour crypter les données. Les données chiffrées avec cette fonction sont assez solides. Il ne peut être décrypté que sur la même machine et par le même utilisateur qui l'a crypté en premier lieu.

sblair
la source
Mais comment la clé de cryptage est-elle générée? En fonction de cela, je considérerais le système plus ou moins sûr. Et qu'en est-il de Linux?
Óscar
@ Óscar: Sous Windows, CryptProtectDatautilise vos informations d'identification Windows (pas le mot de passe, mais d'autres données) comme clé. AFAIK, c'est la même fonction utilisée pour protéger vos certificats, vos informations d'identification réseau et tout ça.
grawity
3
@ Óscar: Sous Linux, Encryptor::EncryptString ne fait rien . Il semble y avoir du code pour utiliser le porte-clés GNOME et le portefeuille KDE.
grawity
Correct. Sous Linux, KDE Wallet, GNOME Keyring ou un autre magasin de mots de passe natif pris en charge (que j'oublie par la main) est utilisé à la place.
Michael Hampton
1
alors ... il semble qu'il soit possible d'avoir une autre application distincte qui essentiellement fouine vos mots de passe Chrome, étant donné que vous êtes déjà connecté et qu'il fonctionne comme vous?
rogerdpack
4

Ils sont "crypté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, les autres personnes aussi. Le stockage des mots de passe n'est jamais sûr à 100%.

BloodPhilia
la source
Mais quelle est la clé de cryptage?
Óscar
2
Vérifiez la réponse de sblair. Notez qu'il existe une possibilité de décryptage, quel que soit le mode de stockage. Avec le bon logiciel, n'importe qui pourrait le décrypter. Lorsque vous vous êtes connecté à votre compte Windows jusqu'au moment de votre déconnexion, vos mots de passe sont complètement utilisables et entièrement visibles. Juste pour indiquer qu'il n'y a pas de solution 100% sûre pour stocker les mots de passe du navigateur.
BloodPhilia
1
Non, mais si votre ordinateur est piraté / infecté, les mots de passe du navigateur peuvent facilement être récupérés sans que vous vous en rendiez compte. Encore une fois, tout ce que je signale, c'est qu'il n'y a pas de stockage de mot de passe à 100% pour les navigateurs ... Il suffit de répondre à votre question sur leur sécurité.
BloodPhilia
1
Il n'y a pas de "mot de passe principal". CryptProtectDataest une API Windows, Windows fait tout le cryptage et la récupération, la clé de cryptage dépend de votre compte utilisateur et de votre système.
BloodPhilia
1
Cela devrait vous fournir une explication de son fonctionnement: msdn.microsoft.com/en-us/library/ms995355.aspx
BloodPhilia
1

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

Fazal Majid
la source