browserforensics
Retour à tous les articles

Comment Chromium chiffre les cookies sous Windows

2026-06-17 · 4 min

La base Cookies vous indique quels cookies ont existé et quand. Elle ne vous donne pas, à elle seule, leurs valeurs : sous Windows, Chromium stocke la colonne encrypted_value sous forme chiffrée depuis la v80. Récupérer le clair est un problème à deux clés : une clé AES propre au profil qui réside dans Local State, encapsulée par une clé d'utilisateur Windows que vous devez désencapsuler avec DPAPI. Cet article couvre la première moitié — les formats. La chaîne DPAPI hors ligne couvre la seconde.

La clé réside dans Local State

Chromium génère une clé AES-256 par profil et la stocke, encodée en base64, dans le fichier Local State parent du profil (JSON) :

%LOCALAPPDATA%\Google\Chrome\User Data\Local State
%LOCALAPPDATA%\Microsoft\Edge\User Data\Local State
{
  "os_crypt": {
    "encrypted_key": "RFBBUEkBAAAA0Iyd3wEV0RGM...",
    "app_bound_encrypted_key": "QVBQQgEAAADQ..."
  }
}

Décodez encrypted_key depuis le base64 et les cinq premiers octets sont le tag ASCII DPAPI. Retirez-le et ce qui reste est un blob DPAPI — la clé AES chiffrée sous les identifiants Windows de l'utilisateur. Vous ne pouvez pas lire la clé directement depuis Local State ; elle doit d'abord être désencapsulée.

Le format des valeurs de cookies

Chaque encrypted_value est un blob autodescriptif. La disposition moderne est la suivante :

OctetsSignification
0..3tag de version — ASCII v10 ou v20
3..15nonce AES-GCM de 12 octets
15..n-16texte chiffré
n-16..ntag d'authentification GCM de 16 octets

Le déchiffrement est donc de l'AES-256-GCM avec la clé os_crypt, le nonce embarqué et le tag final. La disposition sur disque (texte chiffré suivi du tag) correspond exactement à ce qu'attend la fonction decrypt de WebCrypto, ce qui explique pourquoi le déchiffreur dans le navigateur peut le faire sans réassemblage supplémentaire.

Deux tags de version comptent :

  • v10 — le schéma classique. La clé issue de Local State déchiffre la valeur directement. Le clair est la valeur du cookie telle quelle.
  • v20 — le chiffrement app-bound (Chrome 127+). Le clair déchiffré est préfixé d'un hash de domaine SHA-256 de 32 octets que vous retirez pour obtenir la valeur. Les valeurs v20 sont chiffrées avec la clé app-bound (app_bound_encrypted_key), et non avec la clé encrypted_key ordinaire.

Les valeurs écrites avant la v80 n'ont pas de tag de version — elles commencent par la magie DPAPI 01 00 00 00 et étaient chiffrées valeur par valeur avec CryptProtectData. Celles-ci nécessitent le même désencapsulage DPAPI, appliqué à chaque valeur plutôt qu'à une clé partagée.

Ce que vous pouvez déchiffrer hors ligne

SchémaSource de la cléHors ligne depuis les fichiers ?
v10encrypted_key (encapsulée par DPAPI)Oui — avec la masterkey + le secret utilisateur
Pré-v80 par valeurDPAPI par valeurOui — mêmes entrées, par valeur
v20 (app-bound)app_bound_encrypted_keyPartiellement — voir ci-dessous

Pour le v10, tout est récupérable depuis les fichiers acquis : la clé de Local State, la masterkey DPAPI de l'utilisateur, et son hash NT ou son mot de passe. C'est le cas courant et celui que l'outil automatise.

Le v20 ajoute une seconde couche. La clé app-bound est encapsulée avec le DPAPI système puis passée par un service app-bound qui la lie à la machine. La couche DPAPI système est récupérable hors ligne (la clé machine sort de la ruche SECURITY), mais l'étape app-bound n'est pas de la cryptographie pure basée sur les fichiers sur les versions actuelles. Si vous détenez déjà la clé v20 désencapsulée, déchiffrer les valeurs est du GCM trivial ; dériver cette clé à partir des seuls fichiers est la partie qui ne se réduit pas encore entièrement à des calculs hors ligne.

Les autres plateformes, brièvement

C'est une histoire Windows. Sous macOS, la clé os_crypt réside dans le Keychain de session (Chrome Safe Storage), déverrouillé avec le mot de passe utilisateur. Sous Linux, c'est soit une clé peanuts codée en dur, soit un secret dans GNOME Keyring / KWallet. Firefox ne chiffre pas du tout les valeurs de cookies, et les binarycookies de Safari sont en clair — voir les cookies de navigateur en forensique.

Pour aller plus loin