DPAPI Windows hors ligne : désencapsuler la clé os_crypt
2026-06-17 · 4 min
La clé de cookies de Chromium est
un blob DPAPI : une clé AES-256 chiffrée sous les identifiants de
l'utilisateur Windows. La manière naïve de la désencapsuler consiste à appeler
CryptUnprotectData en étant connecté en tant que cet utilisateur. Sur une
image acquise, vous n'avez pas ce luxe — mais DPAPI est entièrement réversible
hors ligne si vous disposez des bonnes entrées. Voici toute la chaîne.
Avec quoi DPAPI protège
DPAPI ne chiffre jamais vos données directement avec votre mot de passe. Il utilise une masterkey — un secret de 64 octets stocké, lui-même chiffré, dans :
%APPDATA%\Microsoft\Protect\<SID>\<GUID>
Un fichier par masterkey, nommé par GUID ; le dossier est nommé par le SID de l'utilisateur. Un blob DPAPI enregistre, dans son en-tête, le GUID de la masterkey qui l'a scellé — le blob vous indique donc de quel fichier masterkey vous avez besoin.
Pour déchiffrer un blob, il vous faut par conséquent trois éléments sur disque plus un secret :
- le blob (ici, l'
encrypted_keydeLocal State), - le fichier masterkey pour le GUID que le blob désigne,
- le SID de l'utilisateur (le nom du dossier
\Protect\), - le hash NT ou le mot de passe de l'utilisateur.
Étape 1 — déchiffrer la masterkey
Le fichier masterkey est chiffré avec une clé dérivée du secret utilisateur et
du SID. La fonction deriveKeysFromUserkey d'impacket fait référence :
preKey = HMAC-SHA1( NT_hash, UTF16LE(sid + "\0") )
(À partir d'un mot de passe à la place, l'équivalent utilise SHA1(password)
et MD4(password) — et MD4(password) est le hash NT, ce qui explique
pourquoi le hash seul suffit.) Ce preKey alimente ensuite la dérivation de
masterkey de Microsoft, qui n'est pas du PBKDF2 standard — elle accumule
par XOR PRF(P, derived) plutôt que PRF(P, U_prev). Si vous vous trompez de
boucle, tout ce qui suit n'est que déchets.
Les octets dérivés se scindent en une clé AES-256 et un IV, déchiffrent le corps de la masterkey en AES-CBC, et — point crucial — le résultat porte un HMAC que vous vérifiez. Cette autovérification est ce qui rend le DPAPI hors ligne digne de confiance : un mauvais SID ou un mauvais hash échoue au HMAC, de sorte qu'un déchiffrement réussi est prouvablement correct. Il n'y a pas de mode d'échec « ça paraît plausible ».
Les masterkeys modernes de Windows 10/11 utilisent AES-256 avec un PRF HMAC-SHA1 ou HMAC-SHA512. Les plus anciennes utilisaient 3DES ; ce chemin est rare et ne vaut pas la peine d'être porté pour une clé de cookies.
Étape 2 — déchiffrer le blob
Avec la masterkey de 64 octets en main, le blob encrypted_key se déchiffre
selon ses propres termes :
keyHash = SHA1(masterkey)
sessionKey = HMAC-SHA512(keyHash, blob.salt)
plaintext = AES-256-CBC-decrypt(blob.data, key = sessionKey[:32], iv = 0)
Retirez le padding PKCS#7 et vous obtenez la clé AES de 32 octets — la même
clé qui
déchiffre toutes les valeurs de cookies v10
du profil. Chrome appelle CryptProtectData sans entropie, il n'y a donc pas
de secret supplémentaire à fournir.
D'où provient le hash NT
La chaîne nécessite le hash NT de l'utilisateur (ou son mot de passe). Sur une
image disque, vous le récupérez de la même manière que pour n'importe quel
travail sur identifiants : depuis la ruche SAM, déchiffrée avec la boot key
issue de SYSTEM. C'est exactement ce que produit un outil de type
secretsdump. L'enchaînement pratique est donc :
SYSTEM+SAM→ hash NT de l'utilisateur,Local State+ fichier masterkey + SID + ce hash NT → clé AES Chrome,- clé AES +
Cookies→ clair.
Pour un compte de domaine dont vous n'avez pas le mot de passe, le mot de passe en clair de l'utilisateur (s'il est connu) fonctionne directement ; sinon, la masterkey peut être récupérable via la clé de sauvegarde du domaine — hors du périmètre ici.
Une note sur les clés app-bound (v20)
Tout ce qui précède désencapsule l'encrypted_key v10 classique.
L'app_bound_encrypted_key v20 ajoute une couche DPAPI système (récupérable
depuis la clé machine de la ruche SECURITY) plus une étape de service
app-bound qui n'est pas de la cryptographie hors ligne pure. Considérez le v20
comme partiellement hors ligne jusqu'à ce que l'outillage rattrape son retard.
Le faire sans machine Windows
Rien de tout cela ne nécessite la machine d'origine — ce sont du HMAC, du SHA, de l'AES-CBC et un KDF particulier. C'est précisément pour cela que cela peut s'exécuter entièrement dans un onglet de navigateur, sans qu'aucun mot de passe ni aucune clé ne quitte jamais la page.