Share via


Schlüsselspeicherung und -abruf

Schlüsselspeicherarchitektur

CNG bietet ein Modell für die Speicherung privater Schlüssel, das es ermöglicht, sich an die aktuellen und zukünftigen Anforderungen der Erstellung von Anwendungen anzupassen, die Kryptografiefeatures wie die Verschlüsselung öffentlicher oder privater Schlüssel verwenden, sowie an die Anforderungen der Speicherung von Schlüsselmaterial. Der Schlüsselspeicherrouter ist die zentrale Routine in diesem Modell und wird in Ncrypt.dll implementiert. Eine Anwendung greift über den Schlüsselspeicherrouter auf die Schlüsselspeicheranbieter (Key Storage Providers, KSPs) auf dem System zu, wodurch Details wie die Schlüsselisolation sowohl von der Anwendung als auch vom Speicheranbieter selbst verdeckt werden. Die folgende Abbildung zeigt den Entwurf und die Funktion der Architektur der CNG-Schlüsselisolation.

cng-Schlüsselspeicheranbieter

Um common criteria (CC)-Anforderungen zu erfüllen, müssen die langlebigen Schlüssel isoliert werden, sodass sie nie im Bewerbungsprozess vorhanden sind. CNG unterstützt derzeit die Speicherung asymmetrischer privater Schlüssel mithilfe des Microsoft-Software-KSP, der in Windows Server 2008 und Windows Vista enthalten und standardmäßig installiert ist.

Die Schlüsselisolation ist in Windows Server 2008 und Windows Vista standardmäßig aktiviert. Das Schlüsselisolationsfeature ist auf Plattformen vor diesen nicht verfügbar. Außerdem werden KSPs von Drittanbietern nicht im Schlüsselisolationsdienst (Key Isolation Service, LSA-Prozess) geladen. Nur der Microsoft KSP wird in den Schlüsselisolationsdienst geladen.

Der LSA-Prozess wird als Schlüsselisolationsprozess verwendet, um die Leistung zu maximieren. Der gesamte Zugriff auf private Schlüssel erfolgt über den Schlüsselspeicherrouter, der einen umfassenden Satz von Funktionen zum Verwalten und Verwenden privater Schlüssel verfügbar macht.

CNG speichert den öffentlichen Teil des gespeicherten Schlüssels getrennt vom privaten Teil. Der öffentliche Teil eines Schlüsselpaars wird auch im Schlüsselisolationsdienst verwaltet und mithilfe des lokalen Remoteprozeduraufrufs (Local Remote Procedure Call, LRPC) zugegriffen. Der Schlüsselspeicherrouter verwendet LRPC beim Aufrufen des Schlüsselisolationsvorgangs. Der gesamte Zugriff auf private Schlüssel erfolgt über den Router für private Schlüssel und wird von CNG überwacht.

Wie oben beschrieben, kann eine vielzahl von Hardwarespeichergeräten unterstützt werden. In jedem Fall ist die Schnittstelle zu allen diesen Speichergeräten identisch. Es enthält Funktionen zum Ausführen verschiedener Vorgänge mit privaten Schlüsseln sowie Funktionen, die sich auf die Schlüsselspeicherung und -verwaltung beziehen.

CNG stellt eine Reihe von APIs bereit, die zum Erstellen, Speichern und Abrufen kryptografischer Schlüssel verwendet werden. Eine Liste dieser APIs finden Sie unter CNG-Schlüsselspeicherfunktionen.

Schlüsseltypen

CNG unterstützt die folgenden Schlüsseltypen:

  • Diffie-Hellman öffentliche und private Schlüssel.
  • Digitaler Signaturalgorithmus (DSA, FIPS 186-2) öffentliche und private Schlüssel.
  • RSA (PKCS #1) öffentliche und private Schlüssel.
  • Mehrere legacy (CryptoAPI) öffentliche und private Schlüssel.
  • Kryptografie für öffentliche und private Schlüssel mit elliptischer Kurve.

Unterstützte Algorithmen

CNG unterstützt die folgenden Schlüsselalgorithmen.

Algorithmus Schlüssel-/Hashlänge (Bits)
RSA 512 bis 16384, in 64-Bit-Schritten
DH 512 bis 16384, in 64-Bit-Schritten
DSA 512 bis 1024, in 64-Bit-Schritten
ECDSA P-256, P-384, P-521 (NIST-Kurven)
ECDH P-256, P-384, P-521 (NIST-Kurven)
MD2 128
MD4 128
MD5 128
SHA-1 160
SHA-256 256
SHA-384 384
SHA-512 512

Schlüsselverzeichnisse und -dateien

Die Microsoft-Legacy-CryptoAPI-CSPs speichern private Schlüssel in den folgenden Verzeichnissen.

Schlüsseltyp Verzeichnisse
Benutzer privat %APPDATA%\Microsoft\Crypto\RSA\User SID\
%APPDATA%\Microsoft\Crypto\DSS\User SID\
Privates lokales System %ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\RSA\S-1-5-18\
%ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\DSS\S-1-5-18\
Lokaler Dienst privat %ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\RSA\S-1-5-19\
%ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\DSS\S-1-5-19\
Privater Netzwerkdienst %ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\RSA\S-1-5-20\
%ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\DSS\S-1-5-20\
Freigegeben privat %ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\RSA\MachineKeys
%ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\DSS\MachineKeys

CNG speichert private Schlüssel in den folgenden Verzeichnissen.

Schlüsseltyp Verzeichnis
Benutzer privat %APPDATA%\Microsoft\Crypto\Keys
Privates lokales System %ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\SystemKeys
Lokaler Dienst privat %WINDIR%\ServiceProfiles\LocalService
Privater Netzwerkdienst %WINDIR%\ServiceProfiles\NetworkService
Freigegeben privat %ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\Keys

Im Folgenden sind einige der Unterschiede zwischen den CryptoAPI- und CNG-Schlüsselcontainern aufgeführt.

  • CNG verwendet andere Dateinamen für Schlüsseldateien als Schlüsseldateien, die vom Rsaenh.dll und Dssenh.dll Legacy-CSPs erstellt werden. Die Legacyschlüsseldateien verfügen auch über die Erweiterung .key, aber CNG-Schlüsseldateien verfügen nicht über die Erweiterung .key.
  • CNG unterstützt vollständig Unicode-Schlüsselcontainernamen. CNG verwendet einen Hash des Unicode-Containernamens, während CryptoAPI einen Hash des ANSI-Containernamens verwendet.
  • CNG ist flexibler in Bezug auf RSA-Schlüsselpaare. Beispielsweise unterstützt CNG öffentliche Exponenten, die größer als 32 Bit sind, und es werden Schlüssel unterstützt, bei denen p und q unterschiedliche Längen aufweisen.
  • In CryptoAPI wird die Schlüsselcontainerdatei in einem Verzeichnis gespeichert, dessen Name die Textäquivalente der SID des Benutzers ist. Dies ist in CNG nicht mehr der Fall, wodurch die Schwierigkeit beseitigt wird, Benutzer von einer Domäne in eine andere zu verschieben, ohne alle ihre privaten Schlüssel zu verlieren.
  • Die CNG-KSP- und -Schlüsselnamen sind auf MAX_PATH Unicode-Zeichen beschränkt. Die CryptoAPI-CSP- und Schlüsselnamen sind auf MAX_PATH ANSI-Zeichen beschränkt.
  • CNG bietet die Möglichkeit benutzerdefinierter Schlüsseleigenschaften. Benutzer können benutzerdefinierte Eigenschaften erstellen und Schlüsseln zuordnen und diese mit persistenten Schlüsseln speichern lassen.

Beim Beibehalten eines Schlüssels kann CNG zwei Dateien erstellen. Die erste Datei enthält den privaten Schlüssel im neuen CNG-Format und wird immer erstellt. Diese Datei kann nicht von den Legacy-CryptoAPI-CSPs verwendet werden. Die zweite Datei enthält denselben privaten Schlüssel im Legacycontainer CryptoAPI-Schlüssel. Die zweite Datei entspricht dem Von Rsaenh.dll verwendeten Format und Speicherort. Das Erstellen der zweiten Datei erfolgt nur, wenn das flag NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG angegeben wird, wenn die NCryptFinalizeKey-Funktion aufgerufen wird, um einen RSA-Schlüssel abzuschließen. Dieses Feature wird für DSA- und DH-Schlüssel nicht unterstützt.

Wenn eine Anwendung versucht, einen vorhandenen persistenten Schlüssel zu öffnen, versucht CNG zunächst, die native CNG-Datei zu öffnen. Wenn diese Datei nicht vorhanden ist, versucht CNG, einen übereinstimmenden Schlüssel im Legacycontainer CryptoAPI-Schlüssel zu suchen.

Wenn Sie CryptoAPI-Schlüssel mit dem Windows User State Migration Tool (USMT) von einem Quellcomputer auf einen Zielcomputer verschieben oder kopieren, kann CNG nicht auf die Schlüssel auf dem Zielcomputer zugreifen. Um auf solche migrierten Schlüssel zuzugreifen, müssen Sie die CryptoAPI verwenden.