Dela via


Nyckellagring och hämtning

Nyckellagringsarkitektur

CNG tillhandahåller en modell för lagring av privata nycklar som gör det möjligt att anpassa sig till de aktuella och framtida kraven på att skapa program som använder kryptografifunktioner som offentlig eller privat nyckelkryptering, samt kraven på lagring av nyckelmaterial. Nyckellagringsroutern är den centrala rutinen i den här modellen och implementeras i Ncrypt.dll. Ett program får åtkomst till nyckellagringsprovidrar (KSP:er) i systemet via nyckellagringsroutern, vilket döljer information, till exempel nyckelisolering, från både programmet och själva lagringsprovidern. Följande bild visar designen och funktionen för CNG-nyckelisoleringsarkitekturen.

cng-nyckellagringsleverantör

För att uppfylla gemensamma kriterier (CC) måste de långlivade nycklarna isoleras så att de aldrig finns i programmet. CNG stöder för närvarande lagring av asymmetriska privata nycklar med hjälp av Microsoft-programvaranSP som ingår i Windows Server 2008 och Windows Vista och installeras som standard.

Nyckelisolering är aktiverat som standard i Windows Server 2008 och Windows Vista. Funktionen för nyckelisolering är inte tillgänglig på plattformar före dessa. Dessutom läses inte tredjeparts-KSP:er in i nyckelisoleringstjänsten (LSA-processen). Endast Microsoft KSP läses in i nyckelisoleringstjänsten.

LSA-processen används som nyckelisoleringsprocess för att maximera prestanda. All åtkomst till privata nycklar går via nyckellagringsroutern, som exponerar en omfattande uppsättning funktioner för att hantera och använda privata nycklar.

CNG lagrar den offentliga delen av den lagrade nyckeln separat från den privata delen. Den offentliga delen av ett nyckelpar underhålls också i nyckelisoleringstjänsten och nås med hjälp av lokalt fjärrproceduranrop (LRPC). Nyckellagringsroutern använder LRPC vid anrop till nyckelisoleringsprocessen. All åtkomst till privata nycklar går via den privata nyckelroutern och granskas av CNG.

Som beskrivs ovan kan ett brett utbud av maskinvarulagringsenheter stödjas. I varje fall är gränssnittet för alla dessa lagringsenheter identiskt. Den innehåller funktioner för att utföra olika privata nyckelåtgärder samt funktioner som gäller nyckellagring och hantering.

CNG tillhandahåller en uppsättning API:er som används för att skapa, lagra och hämta kryptografiska nycklar. En lista över dessa API:er finns i CNG Key Storage Functions.

Nyckeltyper

CNG stöder följande nyckeltyper:

  • Diffie-Hellman offentliga och privata nycklar.
  • Digitala signaturalgoritmer (DSA, FIPS 186-2) offentliga och privata nycklar.
  • Offentliga och privata RSA-nycklar (PKCS #1).
  • Flera äldre offentliga och privata nycklar (CryptoAPI).
  • Elliptisk kurvkryptografi offentliga och privata nycklar.

Algoritmer som stöds

CNG stöder följande nyckelalgoritmer.

Algoritm Nyckel-/hashlängd (bitar)
RSA 512 till 16384, i steg om 64 bitar
DH 512 till 16384, i steg om 64 bitar
DSA 512 till 1024, i steg om 64 bitar
ECDSA P-256, P-384, P-521 (NIST-kurvor)
ECDH P-256, P-384, P-521 (NIST-kurvor)
MD2 128
MD4 128
MD5 128
SHA-1 160
SHA-256 256
SHA-384 384
SHA-512 512

Viktiga kataloger och filer

Microsofts äldre CryptoAPI-CSP:er lagrar privata nycklar i följande kataloger.

Nyckeltyp Kataloger
Privat användare %APPDATA%\Microsoft\Crypto\RSA\användar-SID\
%APPDATA%\Microsoft\Crypto\DSS\användar-SID\
Lokalt system privat %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-18\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-18\
Privat lokal tjänst %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-19\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-19\
Privat nätverkstjänst %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-20\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-20\
Delad privat %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\MachineKeys

CNG lagrar privata nycklar i följande kataloger.

Nyckeltyp Katalog
Privat användare %APPDATA%\Microsoft\Crypto\Keys
Lokalt privat system %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\SystemKeys
Privat lokal tjänst %WINDIR%\ServiceProfiles\LocalService
Privat nätverkstjänst %WINDIR%\ServiceProfiles\NetworkService
Delad privat %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys

Följande är några av skillnaderna mellan CryptoAPI- och CNG-nyckelcontainrarna.

  • CNG använder olika filnamn för nyckelfiler än nyckelfiler som skapas av Rsaenh.dll och Dssenh.dll äldre CSP:er. De äldre nyckelfilerna har också tillägget .key, men CNG-nyckelfilerna har inte tillägget .key.
  • CNG har fullt stöd för Unicode-nyckelcontainernamn. CNG använder en hash av Unicode-containernamnet, medan CryptoAPI använder en hash av ANSI-containernamnet.
  • CNG är mer flexibelt när det gäller RSA-nyckelpar. CNG stöder till exempel offentliga exponenter som är större än 32 bitar och stöder nycklar där p och q är olika längder.
  • I CryptoAPI lagras nyckelcontainerfilen i en katalog vars namn är den textmässiga motsvarigheten till användarens SID. Detta är inte längre fallet i CNG, vilket tar bort svårigheten att flytta användare från en domän till en annan utan att förlora alla sina privata nycklar.
  • CNG KSP och nyckelnamn är begränsade till MAX_PATH Unicode-tecken. Csp-filen CryptoAPI och nyckelnamnen är begränsade till MAX_PATH ANSI-tecken.
  • CNG erbjuder funktionen för användardefinierade nyckelegenskaper. Användare kan skapa och associera anpassade egenskaper med nycklar och lagra dem med sparade nycklar.

När du sparar en nyckel kan CNG skapa två filer. Den första filen innehåller den privata nyckeln i det nya CNG-formatet och skapas alltid. Den här filen kan inte användas av äldre CryptoAPI-CSP:er. Den andra filen innehåller samma privata nyckel i den äldre CryptoAPI-nyckelcontainern. Den andra filen överensstämmer med formatet och platsen som används av Rsaenh.dll. Det går bara att skapa den andra filen om flaggan NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG anges när funktionen NCryptFinalizeKey anropas för att slutföra en RSA-nyckel. Den här funktionen stöds inte för DSA- och DH-nycklar.

När ett program försöker öppna en befintlig bevarad nyckel försöker CNG först öppna den interna CNG-filen. Om den här filen inte finns försöker CNG hitta en matchande nyckel i den äldre CryptoAPI-nyckelcontainern.

När du flyttar eller kopierar CryptoAPI-nycklar från en källdator till en måldator med Windows User State Migration Tool (USMT) kommer CNG inte att komma åt nycklarna på måldatorn. Om du vill komma åt sådana migrerade nycklar måste du använda CryptoAPI.

CNG-nyckellagringsfunktioner

Egenskapsidentifierare för nyckellagring

NCryptFinalizeKey