Freigeben über


NCryptImportKey-Funktion (ncrypt.h)

Die NCryptImportKey-Funktion importiert einen Kryptografie-API: CNG-Schlüssel (Next Generation) aus einem Speicher-BLOB.

Syntax

SECURITY_STATUS NCryptImportKey(
  [in]           NCRYPT_PROV_HANDLE hProvider,
  [in, optional] NCRYPT_KEY_HANDLE  hImportKey,
  [in]           LPCWSTR            pszBlobType,
  [in, optional] NCryptBufferDesc   *pParameterList,
  [out]          NCRYPT_KEY_HANDLE  *phKey,
  [in]           PBYTE              pbData,
  [in]           DWORD              cbData,
  [in]           DWORD              dwFlags
);

Die Parameter

[in] hProvider

Das Handle des Schlüsselspeicheranbieters.

[in, optional] hImportKey

Das Handle des kryptografischen Schlüssels , mit dem die Schlüsseldaten im importierten Schlüssel-BLOB verschlüsselt wurden. Dies muss ein Handle für denselben Schlüssel sein, der im hExportKey-Parameter der NCryptExportKey-Funktion übergeben wurde. Wenn dieser Parameter NULL ist, wird davon ausgegangen, dass der Schlüssel-BLOB nicht verschlüsselt wird.

[in] pszBlobType

Eine mit Null beendete Unicode-Zeichenfolge, die einen Bezeichner enthält, der das Format des Schlüssel-BLOB angibt. Diese Formate sind spezifisch für einen bestimmten Schlüsselspeicheranbieter. Informationen zu den BLOB-Formaten, die von Microsoft-Anbietern unterstützt werden, finden Sie in den Hinweisen.

[in, optional] pParameterList

Die Adresse einer NCryptBufferDesc-Struktur , die auf ein Array von Puffern verweist, die Parameterinformationen für den Schlüssel enthalten.

[out] phKey

Die Adresse einer NCRYPT_KEY_HANDLE Variablen, die das Handle des Schlüssels empfängt. Wenn Sie mit der Verwendung dieses Handle fertig sind, lassen Sie es los, indem Sie es an die NCryptFreeObject-Funktion übergeben.

[in] pbData

Die Adresse eines Puffers, der den zu importierenden Schlüssel-BLOB enthält. Der cbData-Parameter enthält die Größe dieses Puffers.

[in] cbData

Die Größe des PbData-Puffers in Bytes.

[in] dwFlags

Flags, die das Funktionsverhalten ändern. Dies kann null oder eine Kombination aus einem oder mehreren der folgenden Werte sein. Der Satz gültiger Flags ist spezifisch für jeden Schlüsselspeicheranbieter.

Wert Bedeutung
NCRYPT_SILENT_FLAG Fordert an, dass der Schlüsselspeicheranbieter (Key Storage Provider, KSP) keine Benutzeroberfläche anzeigt. Wenn der Anbieter die Benutzeroberfläche für den Betrieb anzeigen muss, schlägt der Aufruf fehl, und der KSP sollte den NTE_SILENT_CONTEXT Fehlercode als letzten Fehler festlegen.
NCRYPT_REQUIRE_VBS_FLAG Gibt an, dass ein Schlüssel durch virtualisierungsbasierte Sicherheit (VBS) geschützt werden muss. Standardmäßig erstellt dies einen dauerhaften, auf dem Datenträger gespeicherten, quer gestarteten Schlüssel, der über Neustartzyklen hinweg beibehalten wird.

Der Vorgang schlägt fehl, wenn VBS nicht verfügbar ist. (*Siehe Anmerkungen)
NCRYPT_PREFER_VBS_FLAG Gibt an, dass ein Schlüssel durch virtualisierungsbasierte Sicherheit (VBS) geschützt werden soll. Standardmäßig erstellt dies einen dauerhaften, auf dem Datenträger gespeicherten, quer gestarteten Schlüssel, der über Neustartzyklen hinweg beibehalten wird.

Der Vorgang generiert einen softwareisolten Schlüssel, wenn VBS nicht verfügbar ist. (*Siehe Anmerkungen)
NCRYPT_USE_PER_BOOT_KEY_FLAG Ein zusätzliches Kennzeichen, das zusammen mit NCRYPT_REQUIRE_VBS_FLAG oder NCRYPT_PREFER_VBS_FLAG verwendet werden kann. Weist virtualisierungsbasierte Sicherheit (VBS) an, den Clientschlüssel mit einem pro Startschlüssel zu schützen, der auf dem Datenträger gespeichert ist, aber nicht über Startzyklen hinweg wiederverwendet werden kann. (*Siehe Anmerkungen)

Rückgabewert

Gibt einen Statuscode zurück, der den Erfolg oder Fehler der Funktion angibt.

Mögliche Rückgabecodes umfassen, sind jedoch nicht beschränkt auf Folgendes:

Rückgabecode BESCHREIBUNG
ERROR_SUCCESS Die Funktion war erfolgreich.
NTE_BAD_FLAGS Der dwFlags-Parameter enthält einen ungültigen Wert.
NTE_EXISTS Ein Schlüssel mit dem angegebenen Namen ist bereits vorhanden, und die NCRYPT_OVERWRITE_KEY_FLAG wurde nicht angegeben.
NTE_INVALID_HANDLE Der hProvider-Parameter ist ungültig.
NTE_INVALID_PARAMETER Mindestens ein Parameter ist ungültig.
NTE_NO_MEMORY Fehler bei der Speicherzuweisung.
NTE_VBS_UNAVAILABLE VBS ist nicht verfügbar.
NTE_VBS_CANNOT_DECRYPT_KEY VBS konnte den Entschlüsselungsvorgang nicht ausführen.

Bemerkungen

Von Bedeutung

Informationen zu VBS-Flags beziehen sich auf Vorabversionsprodukt, das vor der kommerziellen Veröffentlichung erheblich geändert werden kann. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.

Ein Dienst darf diese Funktion nicht über die StartService-Funktion aufrufen. Wenn ein Dienst diese Funktion über die StartService-Funktion aufruft, kann ein Deadlock auftreten, und der Dienst reagiert möglicherweise nicht mehr.

In den folgenden Abschnitten werden spezifische Verhaltensweisen für die Microsoft-Schlüsselspeicheranbieter beschrieben:

  • Microsoft Software KSP
  • Microsoft Smartcard-KSP

Microsoft Software KSP

Details zu den meisten pszBlobType-Parametern, die vom Microsoft-Software-KSP unterstützt werden, finden Sie unter NCryptImportKey.

Wenn kein Schlüsselname angegeben wird, behandelt der Microsoft Software-KSP den Schlüssel als kurzlebig und speichert ihn nicht dauerhaft. Für den NCRYPT_OPAQUETRANSPORT_BLOB Typ wird der Schlüsselname im BLOB gespeichert, wenn er exportiert wird. Bei anderen BLOB-Formaten kann der Name in einem NCRYPTBUFFER_PKCS_KEY_NAME Pufferparameter innerhalb des pParameterList-Parameters angegeben werden.

Unter Windows Server 2008 und Windows Vista können nur Schlüssel, die als PKCS #7 Envelope BLOBs (NCRYPT_PKCS7_ENVELOPE_BLOB) oder PKCS #8 private Key BLOBs (NCRYPT_PKCS8_PRIVATE_KEY_BLOB) importiert werden, mithilfe der oben genannten Methode beibehalten werden. Verwenden Sie zum Speichern von Schlüsseln, die über andere BLOB-Typen auf diesen Plattformen importiert werden, die in Schlüsselimport und -export dokumentiert ist.

Die folgenden Flags werden von diesem KSP unterstützt.

Begriff BESCHREIBUNG
NCRYPT_NO_KEY_VALIDATION Überprüfen Sie nicht den öffentlichen Teil des Schlüsselpaars. Dieses Kennzeichen gilt nur für Öffentliche/private Schlüsselpaare.
NCRYPT_DO_NOT_FINALIZE_FLAG Schließen Sie den Schlüssel nicht ab. Diese Option ist nützlich, wenn Sie nach dem Importieren Eigenschaften des Schlüssels hinzufügen oder ändern müssen. Sie müssen den Schlüssel abschließen, bevor er verwendet werden kann, indem Sie das Schlüsselhandle an die NCryptFinalizeKey-Funktion übergeben. Dieses Kennzeichen wird für die privaten Schlüssel PKCS #7 und PKCS #8, aber nicht für öffentliche Schlüssel unterstützt.
NCRYPT_MACHINE_KEY_FLAG Der Schlüssel gilt für den lokalen Computer. Wenn dieses Kennzeichen nicht vorhanden ist, gilt der Schlüssel für den aktuellen Benutzer.
NCRYPT_OVERWRITE_KEY_FLAG Wenn bereits ein Schlüssel im Container mit dem angegebenen Namen vorhanden ist, wird der vorhandene Schlüssel überschrieben. Wenn dieses Flag nicht angegeben ist und ein Schlüssel mit dem angegebenen Namen bereits vorhanden ist, gibt diese Funktion NTE_EXISTS zurück.
NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG Speichern Sie auch den Schlüssel im älteren Speicher. Dadurch kann der Schlüssel mit der CryptoAPI verwendet werden. Dieses Kennzeichen gilt nur für RSA-Schlüssel.

Microsoft Smartcard-KSP

Die Gruppe der wichtigsten BLOB-Formate und Flags, die von diesem KSP unterstützt werden, ist identisch mit dem Satz, der vom Microsoft-Software-KSP unterstützt wird.

Unter Windows Server 2008 und Windows Vista importiert der Microsoft Smart Card KSP alle Schlüssel in den Microsoft Software KSP. Daher können Schlüssel nicht mithilfe dieser API auf einer Smartcard beibehalten werden, und die Anleitungen im obigen Abschnitt gelten beim Versuch, Schlüssel innerhalb des Microsoft Software-KSP beizubehalten.

Unter Windows Server 2008 R2 und Windows 7 kann der Microsoft SmartCard Key Storage Provider einen privaten Schlüssel in eine Smartcard importieren, vorausgesetzt, die folgenden Bedingungen sind erfüllt:

  • Der Schlüsselcontainername auf der Karte ist gültig.
  • Das Importieren privater Schlüssel wird von der Smartcard unterstützt.
  • Die folgenden beiden Registrierungsschlüssel werden auf ein DWORD von 0x1:
    • HKLM\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Microsoft Base SmartCard Crypto Provider\AllowPrivateExchangeKeyImport
    • HKLM\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Microsoft Base SmartCard Crypto Provider\AllowPrivateSignatureKeyImport

Wenn der Schlüsselcontainername NULL ist, behandelt der Microsoft Smart Card KSP den Schlüssel als kurzlebig und importiert ihn in den Microsoft Software KSP.

Zusätzliche Hardwareanforderungen für VBS-Schlüssel

Obwohl auf Ihrem Computer möglicherweise das entsprechende Betriebssystem installiert ist, müssen die folgenden zusätzlichen Hardwareanforderungen erfüllt sein, um VBS zum Generieren und Schützen von Schlüsseln zu verwenden.

  • VBS aktiviert (siehe Virtualisierungsbasierte Sicherheit (VBS))
  • TPM aktiviert
    • Für Bare-Metal-Umgebungen ist TPM 2.0 erforderlich.
    • Für VM-Umgebungen wird vTPM (Virtual TPM) unterstützt.
  • BIOS sollte mit SecureBoot-Profil auf UEFI aktualisiert werden

Weitere Informationen zu Hardwareanforderungen:

  • VBS verfügt über mehrere Hardwareanforderungen für die Ausführung, einschließlich Hyper-V (Windows-Hypervisor), der 64-Bit-Architektur und der IOMMU-Unterstützung. Die vollständige Liste der VBS-Hardwareanforderungen finden Sie hier.
  • Anforderungen für ein hochsicheres Gerät finden Sie hier.

Anforderungen

Anforderung Wert
Mindestens unterstützter Client Windows Vista [Desktop-Apps | UWP-Apps]
Mindestanforderungen für unterstützte Server Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Fenster
Überschrift ncrypt.h
Bibliothek Ncrypt.lib
DLL Ncrypt.dll

Siehe auch

NCryptBuffer

NCryptCreatePersistedKey