Offline Windows DPAPI: den os_crypt-Schlüssel entkapseln
2026-06-17 · 3 min
Chromiums Cookie-Schlüssel ist
ein DPAPI-Blob: ein AES-256-Schlüssel, verschlüsselt unter den
Windows-Anmeldedaten des Benutzers. Der naive Weg, ihn zu entkapseln,
besteht darin, CryptUnprotectData aufzurufen, während man als dieser
Benutzer angemeldet ist. Auf einem erfassten Image haben Sie diesen Luxus
nicht — aber DPAPI ist offline vollständig umkehrbar, wenn Sie die
richtigen Eingaben haben. Hier ist die gesamte Kette.
Womit DPAPI schützt
DPAPI verschlüsselt Ihre Daten nie direkt mit Ihrem Passwort. Es verwendet einen Masterkey — ein 64-Byte-Geheimnis, das selbst verschlüsselt gespeichert ist in:
%APPDATA%\Microsoft\Protect\<SID>\<GUID>
Eine Datei pro Masterkey, benannt nach GUID; der Ordner ist nach der SID des Benutzers benannt. Ein DPAPI-Blob notiert in seinem Header die GUID des Masterkeys, der ihn versiegelt hat — das Blob verrät Ihnen also, welche Masterkey-Datei Sie benötigen.
Um ein Blob zu entschlüsseln, benötigen Sie daher drei Dinge auf der Platte plus ein Geheimnis:
- das Blob (hier
Local Statesencrypted_key), - die Masterkey-Datei für die GUID, die das Blob nennt,
- die SID des Benutzers (der Name des
\Protect\-Ordners), - den NT-Hash oder das Passwort des Benutzers.
Schritt 1 — den Masterkey entschlüsseln
Die Masterkey-Datei ist mit einem Schlüssel verschlüsselt, der aus dem
Benutzergeheimnis und der SID abgeleitet wird. impackets
deriveKeysFromUserkey ist die Referenz:
preKey = HMAC-SHA1( NT_hash, UTF16LE(sid + "\0") )
(Aus einem Passwort heraus verwendet das Äquivalent stattdessen
SHA1(password) und MD4(password) — und MD4(password) ist der
NT-Hash, weshalb der Hash allein genügt.) Dieser preKey speist dann
Microsofts Masterkey-Ableitung, die kein standardmäßiges PBKDF2 ist —
sie XOR-akkumuliert PRF(P, derived) statt PRF(P, U_prev). Macht man
diese Schleife falsch, ist alles Nachgelagerte Müll.
Die abgeleiteten Bytes teilen sich in einen AES-256-Schlüssel und einen IV auf, entschlüsseln den Masterkey-Body per AES-CBC, und — entscheidend — das Ergebnis trägt einen HMAC, den Sie verifizieren. Diese Selbstprüfung macht Offline-DPAPI vertrauenswürdig: Eine falsche SID oder ein falscher Hash lässt den HMAC scheitern, sodass ein erfolgreicher Entschlüsselungsvorgang nachweislich korrekt ist. Es gibt keinen „sieht plausibel aus"-Fehlermodus.
Moderne Windows-10/11-Masterkeys verwenden AES-256 mit einem HMAC-SHA1- oder HMAC-SHA512-PRF. Ältere verwendeten 3DES; dieser Pfad ist selten und für einen Cookie-Schlüssel nicht portierungswert.
Schritt 2 — das Blob entschlüsseln
Mit dem 64-Byte-Masterkey in der Hand entschlüsselt sich das
encrypted_key-Blob nach eigenen Regeln:
keyHash = SHA1(masterkey)
sessionKey = HMAC-SHA512(keyHash, blob.salt)
plaintext = AES-256-CBC-decrypt(blob.data, key = sessionKey[:32], iv = 0)
Entfernen Sie das PKCS#7-Padding, und Sie haben den 32-Byte-AES-Schlüssel
— denselben Schlüssel, der
jeden v10-Cookie-Wert entschlüsselt
im Profil. Chrome ruft CryptProtectData ohne Entropie auf, es gibt also
kein zusätzliches Geheimnis bereitzustellen.
Woher der NT-Hash kommt
Die Kette benötigt den NT-Hash (oder das Passwort) des Benutzers. Auf einem
Datenträger-Image gewinnen Sie ihn genauso wie bei jeder anderen
Credential-Arbeit: aus dem SAM-Hive, entschlüsselt mit dem Bootkey aus
SYSTEM. Genau das produziert ein Tool im secretsdump-Stil. Die praktische
Paarung lautet also:
SYSTEM+SAM→ NT-Hash des Benutzers,Local State+ Masterkey-Datei + SID + dieser NT-Hash → Chrome-AES-Schlüssel,- AES-Schlüssel +
Cookies→ Klartext.
Bei einem Domänenkonto, dessen Passwort Sie nicht haben, funktioniert das Klartext-Passwort des Benutzers (falls bekannt) direkt; andernfalls ist der Masterkey möglicherweise über den Domain-Backup-Key wiederherstellbar — hier nicht im Umfang.
Eine Anmerkung zu app-bound (v20) Schlüsseln
Alles oben Genannte entkapselt den klassischen v10-encrypted_key. Der
v20-app_bound_encrypted_key fügt eine System-DPAPI-Schicht hinzu
(wiederherstellbar aus dem Maschinenschlüssel im SECURITY-Hive) plus
einen app-bound Dienstschritt, der keine reine Offline-Kryptografie ist.
Behandeln Sie v20 als teilweise offline, bis das Tooling aufgeholt hat.
Es ohne eine Windows-Maschine erledigen
Nichts davon benötigt die Originalmaschine — es sind HMAC, SHA, AES-CBC und eine schrullige KDF. Genau deshalb kann es vollständig in einem Browser-Tab laufen, ohne dass jemals ein Passwort oder Schlüssel die Seite verlässt.