Fonction NCryptCreatePersistedKey (ncrypt.h)

La fonction NCryptCreatePersistedKey crée une clé et la stocke dans le fournisseur de stockage de clés spécifié. Après avoir créé une clé à l’aide de cette fonction, vous pouvez utiliser la fonction NCryptSetProperty pour définir ses propriétés ; toutefois, la clé ne peut pas être utilisée tant que la fonction NCryptFinalizeKey n’est pas appelée.

Syntaxe

SECURITY_STATUS NCryptCreatePersistedKey(
  [in]           NCRYPT_PROV_HANDLE hProvider,
  [out]          NCRYPT_KEY_HANDLE  *phKey,
  [in]           LPCWSTR            pszAlgId,
  [in, optional] LPCWSTR            pszKeyName,
  [in]           DWORD              dwLegacyKeySpec,
  [in]           DWORD              dwFlags
);

Paramètres

[in] hProvider

Handle du fournisseur de stockage de clés dans lequel créer la clé. Ce handle est obtenu à l’aide de la fonction NCryptOpenStorageProvider .

[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 . Pour supprimer le fichier de clé sur le disque, passez le handle à la fonction NCryptDeleteKey . Cela libère également le handle. Les applications peuvent donc passer le handle à NCryptFreeObject ou À NCryptDeleteKey, mais pas aux deux.

[in] pszAlgId

Pointeur vers une chaîne Unicode terminée par null qui contient l’identificateur de l’algorithme de chiffrement pour créer la clé. Il peut s’agir de l’un des identificateurs d’algorithme CNG standard ou de l’identificateur d’un autre algorithme inscrit.

[in, optional] pszKeyName

Pointeur vers une chaîne Unicode terminée par null qui contient le nom de la clé. Si ce paramètre a la valeur NULL, cette fonction crée une clé éphémère qui n’est pas persistante.

[in] dwLegacyKeySpec

Identificateur hérité qui spécifie le type de clé. Il peut s’agir de l’une des valeurs suivantes :

Valeur Signification
AT_KEYEXCHANGE La clé est une clé d’échange de clé.
AT_SIGNATURE La clé est une clé de signature.
0 La clé n’est pas des types ci-dessus.

[in] dwFlags

Ensemble d’indicateurs qui modifient le comportement de cette fonction. Il peut s’agir de zéro ou d’une combinaison d’une ou plusieurs des valeurs suivantes :

Valeur Signification
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_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é 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.

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.

Si vous créez une paire de clés RSA, vous pouvez également avoir la clé stockée dans le stockage hérité afin qu’elle puisse être utilisée avec cryptoAPI en passant l’indicateur NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG à la fonction NCryptFinalizeKey lorsque la clé est finalisée.

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.

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

NCryptDeleteKey

NCryptFinalizeKey

NCryptImportKey