Partager via


NCryptImportKey, fonction (ncrypt.h)

La fonction NCryptImportKey importe une clé d’API de chiffrement : nouvelle génération (CNG) à partir d’un objet BLOB de mémoire.

Syntaxe

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
);

Paramètres

[in] hProvider

Handle du fournisseur de stockage de clés.

[in, optional] hImportKey

Handle de la clé de chiffrement avec laquelle les données de clé dans l’objet BLOB de clé importée ont été chiffrées. Il doit s’agir d’un handle de la clé qui a été passée dans le paramètre hExportKey de la fonction NCryptExportKey . Si ce paramètre a la valeur NULL, l’objet BLOB de clé est supposé ne pas être chiffré.

[in] pszBlobType

Chaîne Unicode terminée par null qui contient un identificateur qui spécifie le format de l’objet BLOB de clé. Ces formats sont spécifiques à un fournisseur de stockage de clés particulier. Pour connaître les formats BLOB pris en charge par les fournisseurs Microsoft, consultez Remarques.

[in, optional] pParameterList

Adresse d’une structure NCryptBufferDesc qui pointe vers un tableau de mémoires tampons qui contiennent des informations de paramètre pour la clé.

[out] phKey

Adresse d’une variable NCRYPT_KEY_HANDLE qui reçoit le handle de la clé. Une fois que vous avez terminé d’utiliser ce handle, relâchez-le en le transmettant à la fonction NCryptFreeObject .

[in] pbData

Adresse d’une mémoire tampon qui contient l’objet BLOB de clé à importer. Le paramètre cbData contient la taille de cette mémoire tampon.

[in] cbData

Taille, en octets, de la mémoire tampon pbData .

[in] dwFlags

Indicateurs qui modifient le comportement de la fonction. Il peut s’agir de zéro ou d’une combinaison d’une ou plusieurs des valeurs suivantes. L’ensemble d’indicateurs valides est spécifique à chaque fournisseur de stockage de clés.

Valeur Signification
NCRYPT_SILENT_FLAG Demande que le fournisseur de services de clé (KSP) n’affiche aucune interface utilisateur. Si le fournisseur doit afficher l’interface utilisateur pour fonctionner, l’appel échoue et le KSP doit définir le code d’erreur NTE_SILENT_CONTEXT comme dernière erreur.
NCRYPT_REQUIRE_VBS_FLAG Indique qu’une clé doit être protégée avec la sécurité basée sur la virtualisation (VBS). Par défaut, cela crée une clé persistante de démarrage croisé stockée sur le disque qui persiste entre les cycles de redémarrage.

L’opération échoue si VBS n’est pas disponible. (*Voir remarques)
NCRYPT_PREFER_VBS_FLAG Indique qu’une clé doit être protégée avec la sécurité basée sur la virtualisation (VBS). Par défaut, cela crée une clé persistante de démarrage croisé stockée sur le disque qui persiste entre les cycles de redémarrage.

L’opération génère une clé isolée du logiciel si VBS n’est pas disponible. (*Voir remarques)
NCRYPT_USE_PER_BOOT_KEY_FLAG Indicateur supplémentaire qui peut être utilisé avec NCRYPT_REQUIRE_VBS_FLAG ou NCRYPT_PREFER_VBS_FLAG. Demande à la sécurité basée sur la virtualisation (VBS) de protéger la clé client avec une clé par démarrage qui est stockée sur le disque mais qui ne peut pas être réutilisée entre les cycles de démarrage. (*Voir remarques)

Valeur retournée

Retourne un code d’état qui indique la réussite ou l’échec de la fonction.

Les codes de retour possibles incluent, sans s’y limiter, les suivants :

Code de retour Description
ERROR_SUCCESS La fonction a réussi.
NTE_BAD_FLAGS Le paramètre dwFlags contient une valeur qui n’est pas valide.
NTE_EXISTS Une clé portant le nom spécifié existe déjà et le NCRYPT_OVERWRITE_KEY_FLAG n’a pas été spécifié.
NTE_INVALID_HANDLE Le paramètre hProvider n’est pas valide.
NTE_INVALID_PARAMETER Un ou plusieurs paramètres ne sont pas valides.
NTE_NO_MEMORY Un échec d’allocation de mémoire s’est produit.
NTE_VBS_UNAVAILABLE VBS n’est pas disponible.
NTE_VBS_CANNOT_DECRYPT_KEY Échec de l’opération de déchiffrement VBS.

Remarques

Important

Les informations relatives aux indicateurs VBS concernent le produit de préversion qui peut être sensiblement modifié avant sa commercialisation. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.

Un service ne doit pas appeler cette fonction à partir de sa fonction StartService. Si un service appelle cette fonction à partir de sa fonction StartService , un blocage peut se produire et le service peut cesser de répondre.

Les sections suivantes décrivent les comportements spécifiques aux fournisseurs de stockage de clés Microsoft :

  • Microsoft Software KSP
  • Carte à puce Microsoft KSP

Microsoft Software KSP

Les constantes suivantes sont prises en charge par le logiciel Microsoft KSP pour le paramètre pszBlobType .

Si aucun nom de clé n’est fourni, microsoft Software KSP traite la clé comme éphémère et ne la stocke pas de manière permanente. Pour le type NCRYPT_OPAQUETRANSPORT_BLOB , le nom de clé est stocké dans l’objet BLOB lors de son exportation. Pour d’autres formats BLOB, le nom peut être fourni dans un paramètre de mémoire tampon NCRYPTBUFFER_PKCS_KEY_NAME dans le paramètre pParameterList .

Sur Windows Server 2008 et Windows Vista, seules les clés importées en tant que BLOB d’enveloppe PKCS #7 (NCRYPT_PKCS7_ENVELOPE_BLOB) ou PKCS #8 (NCRYPT_PKCS8_PRIVATE_KEY_BLOB) peuvent être conservées à l’aide de la méthode ci-dessus. Pour conserver les clés importées via d’autres types d’objets blob sur ces plateformes, utilisez la méthode documentée dans Key Import and Export.

Les indicateurs suivants sont pris en charge par ce KSP.

Terme Description
NCRYPT_NO_KEY_VALIDATION Ne validez pas la partie publique de la paire de clés. Cet indicateur s’applique uniquement aux paires de clés publiques/privées.
NCRYPT_DO_NOT_FINALIZE_FLAG Ne finalisez pas la clé. Cette option est utile lorsque vous devez ajouter ou modifier des propriétés de la clé après l’avoir importée. Vous devez finaliser la clé avant de pouvoir l’utiliser en passant le handle de clé à la fonction NCryptFinalizeKey . Cet indicateur est pris en charge pour les clés privées PKCS #7 et PKCS #8, mais pas pour les clés publiques.
NCRYPT_MACHINE_KEY_FLAG La clé s’applique à l’ordinateur local. Si cet indicateur n’est pas présent, la clé s’applique à l’utilisateur actuel.
NCRYPT_OVERWRITE_KEY_FLAG Si une clé existe déjà dans le conteneur avec le nom spécifié, la clé existante est remplacée. Si cet indicateur n’est pas spécifié et qu’une clé portant le nom spécifié existe déjà, cette fonction retourne NTE_EXISTS.
NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG Enregistrez également la clé dans le stockage hérité. Cela permet d’utiliser la clé avec cryptoAPI. Cet indicateur s’applique uniquement aux clés RSA.

Carte à puce Microsoft KSP

L’ensemble de formats et d’indicateurs d’objets blob clés pris en charge par ce KSP est identique à l’ensemble pris en charge par microsoft Software KSP.

Sur Windows Server 2008 et Windows Vista, la carte à puce Microsoft KSP importe toutes les clés dans le KSP Microsoft Software. Par conséquent, les clés ne peuvent pas être conservées sur une carte à puce à l’aide de cette API, et les conseils de la section ci-dessus s’appliquent lors de la tentative de conservation des clés dans le KSP microsoft Software.

Sur Windows Server 2008 R2 et Windows 7, le fournisseur de stockage de clés de carte à puce Microsoft peut importer une clé privée dans une carte à puce, à condition que les conditions suivantes soient remplies :

  • Le nom du conteneur de clé sur la carte est valide.
  • L’importation de clés privées est prise en charge par la carte à puce.
  • Les deux clés de Registre suivantes sont définies sur un DWORD de 0x1:
    • HKLM\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Microsoft Base Smart Card Crypto Provider\AllowPrivateExchangeKeyImport
    • HKLM\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Microsoft Base Smart Card Crypto Provider\AllowPrivateSignatureKeyImport

Si le nom du conteneur de clé est NULL, la carte à puce Microsoft KSP traite la clé comme éphémère et l’importe dans le KSP Microsoft Software.

Configuration matérielle supplémentaire requise pour les clés VBS

Bien que vous ayez le système d’exploitation approprié installé sur votre ordinateur, les exigences matérielles supplémentaires suivantes doivent être remplies pour utiliser VBS pour générer et protéger des clés.

  • VBS activé (consultez Sécurité basée sur la virtualisation (VBS))
  • TPM activé
    • Pour les environnements nus, TPM 2.0 est requis.
    • Pour les environnements de machine virtuelle, vTPM (TPM virtuel) est pris en charge.
  • Le BIOS doit être mis à niveau vers UEFI avec le profil SecureBoot

Pour plus d’informations sur la configuration matérielle requise :

  • VBS a plusieurs exigences matérielles à exécuter, notamment Hyper-V (hyperviseur Windows), l’architecture 64 bits et la prise en charge de IOMMU. La liste complète de la configuration matérielle requise pour VBS est disponible ici.
  • Vous trouverez les conditions requises pour un appareil hautement sécurisé ici.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête ncrypt.h
Bibliothèque Ncrypt.lib
DLL Ncrypt.dll

Voir aussi

NCryptBuffer

NCryptCreatePersistedKey