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 :
| Octets | Signification |
|---|---|
0..3 | tag de version — ASCII v10 ou v20 |
3..15 | nonce AES-GCM de 12 octets |
15..n-16 | texte chiffré |
n-16..n | tag 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 deLocal Statedé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_keyordinaire.
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éma | Source de la clé | Hors ligne depuis les fichiers ? |
|---|---|---|
| v10 | encrypted_key (encapsulée par DPAPI) | Oui — avec la masterkey + le secret utilisateur |
| Pré-v80 par valeur | DPAPI par valeur | Oui — mêmes entrées, par valeur |
| v20 (app-bound) | app_bound_encrypted_key | Partiellement — 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.