Private Key Protection in Windows – Sichern der privaten Schlüssel

Private Schlüssel werden, sofern sie nicht auf einer Smartcard abgelegt wurden, verschlüsselt im Application Data Ordner des Benutzerprofil eines Users  bzw. dem All Users Profil des Systems abgelegt (%APPDATA%\Microsoft\Crypto\).

Geschützt werden die Schlüssel durch die Data Protection API im Windows Kernel.

Securing Private Key in WindowsEin privater Schlüssel wird zuerst durch einen symmetrischen Session Key verschlüsselt, der sich wiederum aus einem Encryption Key und dem Master Key ableitet. Der Encryption Key bildet sich aus nicht geheimen Daten des Benutzerprofils und des Systems, die eigentliche Sicherheit entsteht durch den Master Key.

Der Master Key als wichtigster Schlüssel befindet sich unter:

%USERPROFILE%\AppData\Roaming\Microsoft\Protect\{SIDdesUsers}

Der Master Key wiederum wird durch den Master Key Encryption Key  geschützt, der sich aus dem Benutzerpasswort ableitet.  Verwendete Algorithmen sind u.a. 3DES im CBC Mode sowie SHA-1 etc.

Beschädigte Mater Keys können über folgende Verfahren wiederhergestellt werden:

  • Rechner in einer Domäne legen eine mit öffentlichem Schlüssel des Domänencontrollers verschlüsselte Kopie des private Keys im Active Directory ab
  • Credential History erlaubt Zugriff auf alte Master Keys die mit alten User PW verschlüsselt wurden – somit kann auch nach der Änderung des Windows Passworts auf die alten Private Keys zurückgegriffen werden
  • Verwenden einer Windows Password Recovery Disk, die ein neues Benutzerpasswort generiert und den Master Key wiederherstellt: DPAPI generates a 2048-bit RSA public/private key pair, which is the recovery key. The current password is then encrypted with the public key and stored in the user’s profile, while the private key is stored to the PRD, which can actually be any removable media, and then removed from memory. The private key is only stored on the PRD, and nowhere else, so it is important for a user to keep the PRD in a safe place“

Enable Strong Private Key Protection

Da alle Anwendungen die im Benutzerkontext laufen unkontrolliert auf die privaten Schlüssel des Benutzers zugreifen könnten, kann ein Zertifikat so ausgestellt werden, dass bei jedem Schlüsseleinsatz des privaten Schlüssels eine zusätzliche Benutzerinteraktion oder eine Passworteingabe erforderlich ist. Dies erhöht den Schutzlevel des private Keys und verhindert ungewollte Aktionen z.B. das Anstoßen von CodeSigning durch Malware. Für noch höhere Sicherheit empfiehlt sich aber eine hardwarebasierte Ablage der Schlüssel durch bspw. Token, Smartcards oder HSMs.

Setzen Strong Private Key Protection:

  • Im Certificate Template
  • Im  Zertifikatsimport Wizard
enableStrongProtection im Import Wizard

Auswahl von „Medium“ (nur Zustimmung des Nutzers) oder „High“ (zusätzlich PW Eingabe) möglich

Auswirkung Stong Private Key Protection

Strong Private Key Protection - Medium

Vgl. De Clercq, Jan.: „Windows Server 2003 Security Infrastructures“, K. 13.4.4 – 13.4.5.

Vgl. NAI Labs, Network Associates, Inc.: „Windows Data Protection“ http://msdn.microsoft.com/en-us/library/ms995355.aspx (abgerufen am 26. November 2014).

Vgl. Radutskiy, Alex [MSFT] : „What is a strong key protection in Windows?“ http://blogs.technet.com/b/pki/archive/2009/06/17/what-is-a-strong-key-protection-in-windows.aspx (abgerufen am 26. November 2014).

Dieser Beitrag wurde unter PKI: Komponenten und Prozesse, PKI: Kryptografische Grundlagen veröffentlicht. Setze ein Lesezeichen auf den Permalink.

3 Antworten auf Private Key Protection in Windows – Sichern der privaten Schlüssel

  1. Matthias sagt:

    Werden die Zertifkate (in Registry und Festplatte) auch mit dem Session-Key verschlüsselt oder geschieht das auf anderen Wegen? Habe versucht mittel JDPAPI (Java Wrapper für DPAPI) ein Zertifikat aus der Registry mittels CryptUnprotectData() zu entschlüsseln. Leider kommt es hierzu einer Fehlermeldung.

    Leider wurde das Buch von De Clerq noch nicht geliefert, so dass ich hier noch nicht nachschauen konnte. Daher die Frage an dich 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.