Delen via


Sleutelopslag en ophalen

Architectuur voor sleutelopslag

CNG biedt een model voor opslag van persoonlijke sleutels waarmee u zich kunt aanpassen aan de huidige en toekomstige vereisten voor het maken van toepassingen die gebruikmaken van cryptografiefuncties, zoals versleuteling van openbare of persoonlijke sleutels, evenals de eisen van de opslag van sleutelmateriaal. De sleutelopslagrouter is de centrale routine in dit model en wordt geïmplementeerd in Ncrypt.dll. Een toepassing heeft toegang tot de sleutelopslagproviders (KSP's) op het systeem via de sleutelopslagrouter, die details zoals sleutelisolatie verbergt voor zowel de toepassing als de opslagprovider zelf. In de volgende afbeelding ziet u het ontwerp en de functie van de CNG-sleutelisolatiearchitectuur.

cng-sleutelopslagprovider

Om te voldoen aan algemene criteriavereisten (CC), moeten de langlevende sleutels worden geïsoleerd, zodat ze nooit aanwezig zijn in het toepassingsproces. CNG ondersteunt momenteel de opslag van asymmetrische persoonlijke sleutels met behulp van de Microsoft-software-KSP die is opgenomen in Windows Server 2008 en Windows Vista en standaard is geïnstalleerd.

Sleutelisolatie is standaard ingeschakeld in Windows Server 2008 en Windows Vista. De functie voor sleutelisolatie is niet beschikbaar op platforms vóór deze. KSP's van derden worden ook niet geladen in het LSA-proces (Key Isolation Service). Alleen de Microsoft KSP wordt geladen in de sleutelisolatie-service.

Het LSA-proces wordt gebruikt als het sleutelisolatieproces om de prestaties te maximaliseren. Alle toegang tot persoonlijke sleutels gaat via de sleutelopslagrouter, die een uitgebreide set functies beschikbaar maakt voor het beheren en gebruiken van persoonlijke sleutels.

CNG slaat het openbare gedeelte van de opgeslagen sleutel afzonderlijk op van het privégedeelte. Het openbare gedeelte van een sleutelpaar wordt ook onderhouden in de sleutelisolatieservice en is toegankelijk via lokale remote procedure call (LRPC). De sleutelopslagrouter maakt gebruik van LRPC bij het aanroepen van het sleutelisolatieproces. Alle toegang tot persoonlijke sleutels gaat via de router van de persoonlijke sleutel en wordt gecontroleerd door CNG.

Zoals hierboven beschreven, kan een breed scala aan hardwareopslagapparaten worden ondersteund. In elk geval is de interface voor al deze opslagapparaten identiek. Het omvat functies voor het uitvoeren van verschillende bewerkingen met een persoonlijke sleutel, evenals functies die betrekking hebben op sleutelopslag en -beheer.

CNG biedt een set API's die worden gebruikt voor het maken, opslaan en ophalen van cryptografische sleutels. Zie CNG Key Storage Functionsvoor een lijst met deze API's.

Sleuteltypen

CNG ondersteunt de volgende sleuteltypen:

  • Diffie-Hellman openbare en persoonlijke sleutels.
  • Digital Signature Algorithm (DSA, FIPS 186-2) openbare en persoonlijke sleutels.
  • Openbare en persoonlijke RSA-sleutels (PKCS #1).
  • Verschillende verouderde (CryptoAPI) openbare en persoonlijke sleutels.
  • Openbare en persoonlijke sleutels voor elliptische curvecryptografie.

Ondersteunde algoritmen

CNG ondersteunt de volgende belangrijke algoritmen.

Algoritme Sleutel-/hashlengte (bits)
RSA 512 tot 16384, in stappen van 64 bits
DH 512 tot 16384, in stappen van 64 bits
DSA 512 tot 1024, in stappen van 64 bits
ECDSA P-256, P-384, P-521 (NIST-curven)
ECDH P-256, P-384, P-521 (NIST-curven)
MD2 128
MD4 128
MD5 128
SHA-1 160
SHA-256 256
SHA-384 384
SHA-512 512

Sleutelmappen en bestanden

De verouderde CryptoAPI CSP's van Microsoft slaan persoonlijke sleutels op in de volgende mappen.

Sleuteltype Mappen
Gebruiker privé %APPDATA%\Microsoft\Crypto\RSA\User SID\
%APPDATA%\Microsoft\Crypto\DSS\User SID\
Lokaal systeem privé %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-18\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-18\
Privéservice lokaal %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-19\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-19\
Privénetwerkservice %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-20\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-20\
Gedeelde privéruimte %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\MachineKeys

CNG slaat persoonlijke sleutels op in de volgende mappen.

Sleuteltype Telefoongids
Gebruiker privé %APPDATA%\Microsoft\Crypto\Keys
Lokaal systeem privé %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\SystemKeys
Lokale service privé %WINDIR%\ServiceProfiles\LocalService
Privénetwerkservice %WINDIR%\ServiceProfiles\NetworkService
Gedeeld privé %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys

Hier volgen enkele van de verschillen tussen de CryptoAPI- en CNG-sleutelcontainers.

  • CNG gebruikt verschillende bestandsnamen voor sleutelbestanden dan sleutelbestanden die zijn gemaakt door de Rsaenh.dll en Dssenh.dll verouderde CSP's. De verouderde sleutelbestanden hebben ook de .key extensie, maar CNG-sleutelbestanden hebben niet de .key extensie.
  • CNG biedt volledige ondersteuning voor Unicode-sleutelcontainernamen; CNG maakt gebruik van een hash van de Unicode-containernaam, terwijl CryptoAPI gebruikmaakt van een hash van de ANSI-containernaam.
  • CNG is flexibeler met betrekking tot RSA-sleutelparen. CNG ondersteunt bijvoorbeeld openbare exponenten die groter zijn dan 32 bits en ondersteunt sleutels waarin p en q verschillende lengten hebben.
  • In CryptoAPI wordt het sleutelcontainerbestand opgeslagen in een map waarvan de naam het tekstequivalent is van de SID van de gebruiker. Dit is niet langer het geval in CNG, dat de moeilijkheid verwijdert om gebruikers van het ene domein naar het andere te verplaatsen zonder dat al hun persoonlijke sleutels verloren gaan.
  • De CNG KSP en sleutelnamen zijn beperkt tot MAX_PATH Unicode-tekens. De CryptoAPI CSP en sleutelnamen zijn beperkt tot MAX_PATH ANSI-tekens.
  • CNG biedt de mogelijkheid van door de gebruiker gedefinieerde sleuteleigenschappen. Gebruikers kunnen aangepaste eigenschappen maken en koppelen aan sleutels en ze laten opslaan met persistente sleutels.

Bij het persistent maken van een sleutel kan CNG twee bestanden maken. Het eerste bestand bevat de persoonlijke sleutel in de nieuwe CNG-indeling en wordt altijd gemaakt. Dit bestand kan niet worden gebruikt door de verouderde CryptoAPI CSP's. Het tweede bestand bevat dezelfde persoonlijke sleutel in de verouderde CryptoAPI-sleutelcontainer. Het tweede bestand voldoet aan de indeling en locatie die door Rsaenh.dllwordt gebruikt. Het tweede bestand wordt alleen gemaakt als de vlag NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG wordt opgegeven wanneer de NCryptFinalizeKey functie wordt aangeroepen om een RSA-sleutel te voltooien. Deze functie wordt niet ondersteund voor DSA- en DH-sleutels.

Wanneer een toepassing probeert een bestaande persistente sleutel te openen, probeert CNG eerst het systeemeigen CNG-bestand te openen. Als dit bestand niet bestaat, probeert CNG een overeenkomende sleutel te vinden in de verouderde CryptoAPI-sleutelcontainer.

Wanneer u CryptoAPI-sleutels van een bronmachine verplaatst of kopieert naar een doelcomputer met het Hulpprogramma voor migratie van Windows-gebruikersstatus (USMT), krijgt CNG geen toegang tot de sleutels op de doelcomputer. Als u toegang wilt krijgen tot dergelijke gemigreerde sleutels, moet u de CryptoAPI gebruiken.

CNG-sleutelopslagfuncties

Eigenschappen-id's van sleutelopslag

NCryptFinalizeKey