Grundlagen: Cryptographic Service Provider (CSP) und Key Storage Provider (KSP)

Seit Windows NT 4.0 gibt es im Rahmen der CryptoAPI die Cryptographic Service Provider (CSP).

Sinn ist, dass sich eine Anwendung nicht um die konkrete Implementierung der Schlüsselverwaltung kümmern muss, sondern dies generischen Betriebssystem-Schnittstellen überlassen kann. Ebenso soll hiermit vermieden werden, dass kryptographische Schlüssel im Sicherheitskontext des Benutzers/der verwendenen Anwendung in den Arbeitsspeicher geladen werden (ein fataler Sicherheitsvorfall, der genau auf diesem Problem basierte war der Heartbleed Vorfall).

Beispielsweise spielt es für die Zertifizierungsstellen-Software technisch keine Rolle, wie ihr privater Schlüssel geschützt ist – ob in Software oder beispielsweise mit einem Hardware Security Modul (HSM). Der Aufruf des privaten Schlüssel ist für die Zertifizierungsstelle immer identisch.

Mit Windows Vista und der Einführung der Cryptography Next Generation (CNG) als Ablöser für die CryptoAPI wurden die Key Storage Provider (KSP) eingeführt.

Einleitung

Zu den Vorteilen von Key Storage Providern zählen unter Anderem:

  • Schlüsselisolation. Schlüssel können verwendet werden, ohne dass sie den KSP verlassen (wichtig für Verwendung von in Hardware gespeicherten Schlüsseln).
  • Auditierbarkeit von Schlüsselzugriffen (siehe Ereignis Nr. 5058 und 5059).
  • Unterstützung für moderne Algorithmen wie SHA2 und auf elliptischen Kurven basierende Schlüssel.

Hardware-Hersteller können eigene CSP oder KSP entwickeln, um den Zugriff auf ihre Produkte zu ermöglichen. Dies ist häufig bei Hardware Security Modulen (HSM, etwa von SafeNet oder Utimaco) oder Smartcards (etwa von Yubico) der Fall.

Speicherorte

Hiermit sind die Speicherorte der privaten Schlüssel gemeint. Öffentliche Schlüssel sind Bestandteil der dazugehörigen Zertifikate.

BereichCryptoAPI / CSPCNG / KSP
Benutzer%AppData%\Microsoft\Crypto\RSA\<Benutzer-SID>
%AppData%\Microsoft\Crypto\DSA\<Benutzer-SID>
%AppData%\Microsoft\Crypto\Keys
Lokales System%AllUsersProfile%\Application Data\Microsoft\Crypto\RSA\S-1-5-18
%AllUsersProfile%\Application Data\Microsoft\Crypto\DSA\S-1-5-18
%AllUsersProfile%\Application Data\Microsoft\Crypto\SystemKeys
Lokaler Dienst%AllUsersProfile%\Application Data\Microsoft\Crypto\RSA\S-1-5-19
%AllUsersProfile%\Application Data\Microsoft\Crypto\DSA\S-1-5-19
%WinDir%\ServiceProfiles\LocalService
Netzwerkdienst%AllUsersProfile%\Application Data\Microsoft\Crypto\RSA\S-1-5-20
%AllUsersProfile%\Application Data\Microsoft\Crypto\DSA\S-1-5-20
%WinDir%\ServiceProfiles\NetworkService
Alle Benutzer%AllUsersProfile%\Application Data\Microsoft\Crypto\RSA\MachineKeys
%AllUsersProfile%\Application Data\Microsoft\Crypto\DSA\MachineKeys
%AllUsersProfile%\Application Data\Microsoft\Crypto\Keys
Quelle: Microsoft Windows Server 2008 PKI- und Zertifikat-Sicherheit. Brian Komar, 2008

Übersicht über die im Windows System vorhandenen Provider

Nachfolgend eine Übersicht über auf einem modernen Windows-System vorhandene KSP und CSP.

Key Storage Provider

ProviderAnmerkungen
Microsoft Passport Key Storage ProviderWird u.A. von Windows Hello for Business verwendet. Kann Schlüssel transparent entweder in Software, oder (sofern vorhanden) in einem Trusted Platform Modul (TPM) speichern.
Microsoft Platform Crypto ProviderKann Schlüssel in einem Trusted Platform Module (TPM) speichern. Unterstützt nicht alle CNG-Algorithmen aufgrund Einschränkungen im jeweiligen TPM-Standard. ECC-Schlüssel bei Beantragung über eine Zertifikatvorlage erst ab Windows 10 21H2 oder Windows 11 möglich.
Microsoft Smart Card Key Storage ProviderGenerischer Provider, um Schlüssel in einer Smartcard zu speichern. Wird von vielen Smartcard-Herstellern unterstützt. Die Unterstützung für bestimmte Algorithmen hängt von der verwendeten Smartcard ab, z.B. unterstützt die Microsoft virtuelle Smartcard keine ECC-Schlüssel.
Microsoft Software Key Storage ProviderGenerischer Provider, um Schlüssel in Software zu speichern. Unterstützt alle im Windows Ökosystem vorhandenen Algorithmen für Zertifikate. Sollte der Mindest-Standard sein.

Cryptographic Service Provider

Unter den gelisteten CSP können die folgenden für die Erzeugung von RSA-Schlüsseln bis 16384 Bit Schlüsselgröße verwendet werden:

  • Microsoft Base Cryptographic Provider v1.0
  • Microsoft Base Smart Card Crypto Provider (maximal 2048 Bit Schlüsselgröße)
  • Microsoft Enhanced Cryptographic Provider v1.0
  • Microsoft Enhanced RSA and AES Cryptographic Provider
  • Microsoft RSA SChannel Cryptographic Provider (nicht für reine Signaturschlüssel)
  • Microsoft Strong Cryptographic Provider
ProviderAnmerkungen
Microsoft Base Cryptographic Provider v1.0Sollte nach Möglichkeit nicht mehr verwendet werden.
Microsoft Base DSS and Diffie-Hellman Cryptographic ProviderNicht für die Erzeugung von RSA Schlüsseln verwendbar.
Sollte nach Möglichkeit nicht mehr verwendet werden.
Microsoft Base DSS Cryptographic ProviderNicht für die Erzeugung von RSA Schlüsseln verwendbar.
Microsoft Base Smart Card Crypto ProviderGenerischer Provider, um Schlüssel in einer Smartcard zu speichern.
Maximale Schlüssellänge auf 2048 Bit begrenzt.
Sollte nach Möglichkeit nicht mehr verwendet werden.
Microsoft DH SChannel Cryptographic ProviderNicht für die Erzeugung von RSA Schlüsseln verwendbar.
Microsoft Enhanced Cryptographic Provider v1.0Sollte nach Möglichkeit nicht mehr verwendet werden.
Microsoft Enhanced DSS and Diffie-Hellman Cryptographic ProviderNicht für die Erzeugung von RSA Schlüsseln verwendbar.
Microsoft Enhanced RSA and AES Cryptographic ProviderSollte nach Möglichkeit nicht mehr verwendet werden.
Microsoft RSA SChannel Cryptographic ProviderUnterstützt das SChannel Security Package und AES mit bis zu 256 Bit Schlüssellänge. Sollte deshalb für TLS/SSL (z.B. Webserver, Remotedesktop) verwendet werden, wenn kein Key Storage Provider möglich ist. Standardeinstellung für Webserver und CEP Encryption Zertifikatvorlagen.
Microsoft Strong Cryptographic ProviderSollte nach Möglichkeit nicht mehr verwendet werden.

Verwendung von Key Storage Providern

Die Verwendbarkeit von Key Storage Providern in einer Zertifikatvorlage wird dadurch freigegeben, dass die Kompatibilität von Zertifizierungsstelle und beantragenden Clients auf mindestens Windows Vista / Windows Server 2008 gestellt wird. Hierdurch wird die Zertifkatvorlage auf die Version 3 angehoben und kann nicht mehr durch ältere Betriebssysteme verwendet werden.

Siehe hierzu auch folgende Artikel:

Bin ich bei der Konfiguration meiner Zertifikatvorlage frei in der Wahl des Providers?

Nein, die Verwendung des Providers hängt neben dessen kryptographischen Fähigkeiten auch davon ab, ob die Anwendung ihn verwenden kann. Beispielsweise sind Betriebssysteme vor Windows Vista nicht in der Lage, Key Storage Provider einzusetzen. Der Microsoft Platform Crypto Provider unterstützt beispielsweise nicht alle Algorithmen.

Ebenfalls sind einige Anwendungen bis heute auf die Verwendung eines CSP angewiesen. Ein prominentes Beispiel ist der Registrierungsdienst für Netzwerkgeräte (NDES), sowie der dazugehörige Connector für Microsoft InTune.

Siehe hierzu auch folgende Artikel:

Muss ich unbedingt einen Key Storage Provider verwenden?

Es kann als Best Practice angesehen werden, überall wo es möglich ist einen Key Storage Provider anstelle eines Cryptographic Service Provider einzusetzen und dafür zu sorgen, dass selbst entwickelte Anwendungen zu diesen kompatibel sind.

Wie kann ich die auf dem System installierten Provider anzeigen?

Die auf einem System vorhandenen Provider können mit folgendem Befehl aufgelistet werden:

certutil -csplist

Über die Windows PowerShell ist das Auflisten über das ICSPInformations COM Objekt möglich:

$KspList = New-Object -ComObject 'X509Enrollment.CCspInformations'
$KspList.AddAvailableCsps()
$KspList | Select-Object -Property Name

Wie kann ich herausfinden, welchen Provider ein bestimmtes Zertifikat verwendet?

Hierfür gibt es einen "certutil"-Befehl. Das entsprechende Zertifikat wird anhand seiner SHA1-Prüfsumme (auch Thumbprint genannt) identifiziert.

Für den Computer-Zertifikatspeicher:

certutil -verifystore my <Thumbprint>

Für den Zertifikatspeicher des aktuell angemeldeten Benutzers:

certutil -user -verifystore my <Thumbprint>

Wie kann ich die durch einen bestimmten Provider geschützte Schlüssel auflisten?

Auch hierfür gibt es einen "certutil"-Befehl:

Für den Computer-Zertifikatspeicher:

certutil -csp "<CSPName>" -key

Für den Zertifikatspeicher des aktuell angemeldeten Benutzers:

certutil -user -csp "<CSPName>" -key

Weiterführende Links:

Externe Quellen

21 Gedanken zu „Grundlagen: Cryptographic Service Provider (CSP) und Key Storage Provider (KSP)“

Kommentare sind geschlossen.