Schlüssel Storage und Abrufen

Schlüsselarchitektur Storage

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 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 verborgen werden. Die folgende Abbildung zeigt den Entwurf und die Funktion der CNG-Schlüsselisolationsarchitektur.

CNG-Schlüsselspeicheranbieter

Um die Allgemeinen Kriterien (COMMON Criteria, CC) zu erfüllen, müssen die langlebigen Schlüssel isoliert werden, damit sie nie im Anwendungsprozess 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. Darüber hinaus werden KSPs von Drittanbietern nicht in den 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 eines lokalen Remoteprozeduraufrufs (LRPC) aufgerufen. Der Schlüsselspeicherrouter verwendet LRPC beim Aufrufen des Schlüsselisolationsprozesses. Der gesamte Zugriff auf private Schlüssel erfolgt über den Router des privaten Schlüssels 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. Sie umfasst Funktionen zum Ausführen verschiedener Vorgänge mit privaten Schlüsseln sowie Funktionen, die sich auf die Speicherung und Verwaltung von Schlüsseln 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 Key Storage Functions.

Schlüsseltypen

CNG unterstützt die folgenden Schlüsseltypen:

  • Diffie-Hellman öffentlichen und privaten Schlüssel.
  • Öffentliche und private Schlüssel des Digital Signature Algorithm (DSA, FIPS 186-2).
  • Öffentliche und private RSA-Schlüssel (PKCS # 1).
  • Mehrere öffentliche und private Legacyschlüssel (CryptoAPI).
  • Öffentliche und private Schlüssel der Kryptografie für elliptische Kurven.

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 älteren CryptoAPI-CSPs von Microsoft speichern private Schlüssel in den folgenden Verzeichnissen.

Schlüsseltyp Verzeichnisse
Benutzer privat %APPDATA% \ Microsoft Crypto RSA User \ \ \ SID\
%APPDATA% \ Microsoft \ Crypto \ DSS-Benutzer-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 Schlüsselcontainern CryptoAPI und CNG beschrieben.

  • CNG verwendet andere Dateinamen für Schlüsseldateien als Schlüsseldateien, die von den 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. CNG unterstützt beispielsweise öffentliche Exponenten mit einer Länge von mehr als 32 Bits und Schlüssel, bei denen p und q unterschiedliche Längen aufweisen.
  • In CryptoAPI wird die Schlüsselcontainerdatei in einem Verzeichnis gespeichert, dessen Name der Textentsprechung der SID des Benutzers entspricht. Dies ist in CNG nicht mehr der Fall. Dadurch entfällt die Schwierigkeit, Benutzer aus einer Domäne in eine andere zu verschieben, ohne alle ihre privaten Schlüssel zu verlieren.
  • Der CNG-KSP und die Schlüsselnamen sind auf MAX _ PATH Unicode-Zeichen beschränkt. Der CryptoAPI-CSP und die 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 sie 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 von den Legacy-CryptoAPI-CSPs nicht verwendet werden. Die zweite Datei enthält den gleichen privaten Schlüssel im Legacycontainer des CryptoAPI-Schlüssels. Die zweite Datei entspricht dem Von Rsaenh.dll verwendeten Format und Speicherort. Die erstellung 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 fertig zu stellen. 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 Legacy-CryptoAPI-Schlüsselcontainer zu finden.

Wenn Sie CryptoAPI-Schlüssel mit Windows Migrationstool für den Benutzerstatus (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.