Share via


Stockage et récupération des clés

Architecture de stockage de clés

CNG fournit un modèle de stockage de clés privées qui permet de s’adapter aux demandes actuelles et futures de création d’applications qui utilisent des fonctionnalités de chiffrement telles que le chiffrement à clé publique ou privée, ainsi qu’aux exigences du stockage de matériel de clé. Le routeur de stockage de clés est la routine centrale dans ce modèle et est implémenté dans Ncrypt.dll. Une application accède aux fournisseurs de stockage de clés (KSP) sur le système via le routeur de stockage de clés, qui masque les détails, tels que l’isolation des clés, de l’application et du fournisseur de stockage lui-même. L’illustration suivante montre la conception et la fonction de l’architecture d’isolation de clé CNG.

fournisseur de stockage de clés cng

Pour répondre aux exigences des critères communs (CC), les clés à longue durée de vie doivent être isolées afin qu’elles ne soient jamais présentes dans le processus de demande. CNG prend actuellement en charge le stockage des clés privées asymétriques à l’aide du KSP logiciel Microsoft fourni avec Windows Server 2008 et Windows Vista et installé par défaut.

L’isolation des clés est activée par défaut dans Windows Server 2008 et Windows Vista. La fonctionnalité d’isolation de clé n’est pas disponible sur les plateformes antérieures à celles-ci. En outre, les fournisseurs de services clés tiers ne sont pas chargés dans le service d’isolation de clé (processus LSA). Seul le KSP Microsoft est chargé dans le service d’isolation de clé.

Le processus LSA est utilisé comme processus d’isolation de clé pour optimiser les performances. Tous les accès aux clés privées passent par le routeur de stockage de clés, qui expose un ensemble complet de fonctions pour la gestion et l’utilisation de clés privées.

CNG stocke la partie publique de la clé stockée séparément de la partie privée. La partie publique d’une paire de clés est également conservée dans le service d’isolation de clé et est accessible à l’aide d’un appel de procédure distante locale (LRPC). Le routeur de stockage de clés utilise LRPC lors de l’appel du processus d’isolation de clé. Tous les accès aux clés privées passent par le routeur de clé privée et sont audités par CNG.

Comme décrit ci-dessus, un large éventail de périphériques de stockage matériels peut être pris en charge. Dans chaque cas, l’interface de tous ces périphériques de stockage est identique. Il inclut des fonctions permettant d’effectuer diverses opérations de clé privée, ainsi que des fonctions relatives au stockage et à la gestion des clés.

CNG fournit un ensemble d’API utilisées pour créer, stocker et récupérer des clés de chiffrement. Pour obtenir la liste de ces API, consultez Fonctions de stockage de clés CNG.

Types de clés

CNG prend en charge les types de clés suivants :

  • Diffie-Hellman clés publiques et privées.
  • Clés publiques et privées d’algorithme de signature numérique (DSA, FIPS 186-2).
  • Clés publiques et privées RSA (PKCS #1).
  • Plusieurs clés publiques et privées héritées (CryptoAPI).
  • Clés publiques et privées de chiffrement de courbe elliptique.

Algorithmes pris en charge

CNG prend en charge les algorithmes de clé suivants.

Algorithm Clé/longueur de hachage (bits)
RSA 512 à 16384, par incréments de 64 bits
DH 512 à 16384, par incréments de 64 bits
DSA 512 à 1024, par incréments de 64 bits
ECDSA P-256, P-384, P-521 (courbes NIST)
ECDH P-256, P-384, P-521 (courbes NIST)
MD2 128
MD4 128
MD5 128
SHA-1 160
SHA-256 256
SHA-384 384
SHA-512 512

Répertoires et fichiers de clés

Les fournisseurs de services cloud CryptoAPI hérités de Microsoft stockent les clés privées dans les répertoires suivants.

Type de clé Répertoires
Utilisateur privé %APPDATA%\Microsoft\Crypto\RSA\User SID\
%APPDATA%\Microsoft\Crypto\DSS\USER SID\
Système local privé %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-18\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-18\
Service local privé %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-19\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-19\
Service réseau privé %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-20\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-20\
Privé partagé %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\MachineKeys

CNG stocke les clés privées dans les répertoires suivants.

Type de clé Répertoire
Utilisateur privé %APPDATA%\Microsoft\Crypto\Keys
Système local privé %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\SystemKeys
Service local privé %WINDIR%\ServiceProfiles\LocalService
Service réseau privé %WINDIR%\ServiceProfiles\NetworkService
Privé partagé %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys

Voici quelques-unes des différences entre les conteneurs de clés CryptoAPI et CNG.

  • CNG utilise des noms de fichiers différents pour les fichiers clés que les fichiers de clés créés par le Rsaenh.dll et Dssenh.dll fournisseurs de services cloud hérités. Les fichiers de clé hérités ont également l’extension .key, mais les fichiers de clé CNG n’ont pas l’extension .key.
  • CNG prend entièrement en charge les noms de conteneurs de clés Unicode ; CNG utilise un hachage du nom du conteneur Unicode, tandis que CryptoAPI utilise un hachage du nom du conteneur ANSI.
  • CNG est plus flexible en ce qui concerne les paires de clés RSA. Par exemple, CNG prend en charge les exposants publics d’une longueur supérieure à 32 bits, et il prend en charge les clés dont p et q ont des longueurs différentes.
  • Dans CryptoAPI, le fichier conteneur de clé est stocké dans un répertoire dont le nom est l’équivalent textuel du SID de l’utilisateur. Ce n’est plus le cas dans CNG, ce qui supprime la difficulté de déplacer les utilisateurs d’un domaine à un autre sans perdre toutes leurs clés privées.
  • Le KSP CNG et les noms de clé sont limités aux caractères Unicode MAX_PATH . Les noms de clé et de MAX_PATH csp CryptoAPI sont limités aux caractères ANSI MAX_PATH.
  • CNG offre la possibilité de propriétés de clé définies par l’utilisateur. Les utilisateurs peuvent créer et associer des propriétés personnalisées à des clés, et les stocker avec des clés persistantes.

Lors de la conservation d’une clé, CNG peut créer deux fichiers. Le premier fichier contient la clé privée dans le nouveau format CNG et est toujours créé. Ce fichier n’est pas utilisable par les csp CryptoAPI hérités. Le deuxième fichier contient la même clé privée dans le conteneur de clés CryptoAPI hérité. Le deuxième fichier est conforme au format et à l’emplacement utilisés par Rsaenh.dll. La création du deuxième fichier se produit uniquement si l’indicateur NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG est spécifié lorsque la fonction NCryptFinalizeKey est appelée pour finaliser une clé RSA. Cette fonctionnalité n’est pas prise en charge pour les clés DSA et DH.

Lorsqu’une application tente d’ouvrir une clé persistante existante, CNG tente d’abord d’ouvrir le fichier CNG natif. Si ce fichier n’existe pas, CNG tente de localiser une clé correspondante dans le conteneur de clés CryptoAPI hérité.

Lorsque vous déplacez ou copiez des clés CryptoAPI d’un ordinateur source vers un ordinateur cible avec l’outil de migration de l’état utilisateur Windows (USMT), CNG ne parvient pas à accéder aux clés de l’ordinateur cible. Pour accéder à ces clés migrées, vous devez utiliser cryptoAPI.