Condividi tramite


Archiviazione e recupero delle chiavi

Architettura dell'archiviazione delle chiavi

CNG offre un modello per l'archiviazione delle chiavi private che consente di adattarsi alle esigenze correnti e future della creazione di applicazioni che usano funzionalità di crittografia, ad esempio crittografia pubblica o privata, nonché le richieste di archiviazione del materiale della chiave. Il router di archiviazione delle chiavi è la routine centrale in questo modello e viene implementato in Ncrypt.dll. Un'applicazione accede ai provider di archiviazione delle chiavi (KSP) nel sistema tramite il router di archiviazione delle chiavi, che nasconde i dettagli, ad esempio l'isolamento delle chiavi, sia dall'applicazione che dal provider di archiviazione stesso. Nella figura seguente viene illustrata la progettazione e la funzione dell'architettura di isolamento delle chiavi CNG.

Provider di archiviazione delle chiavi cng

Per rispettare i requisiti comuni (CC), le chiavi di lunga durata devono essere isolate in modo che non siano mai presenti nel processo dell'applicazione. CNG supporta attualmente l'archiviazione di chiavi private asimmetriche usando il KSP software Microsoft incluso in Windows Server 2008 e Windows Vista e installato per impostazione predefinita.

L'isolamento delle chiavi è abilitato per impostazione predefinita in Windows Server 2008 e Windows Vista. La funzionalità di isolamento chiave non è disponibile nelle piattaforme precedenti a queste. Inoltre, i KSP di terze parti non vengono caricati nel servizio di isolamento delle chiavi (processo LSA). Solo microsoft KSP viene caricato nel servizio di isolamento delle chiavi.

Il processo LSA viene usato come processo di isolamento chiave per ottimizzare le prestazioni. Tutto l'accesso alle chiavi private passa attraverso il router di archiviazione delle chiavi, che espone un set completo di funzioni per la gestione e l'uso di chiavi private.

CNG archivia la parte pubblica della chiave archiviata separatamente dalla parte privata. La parte pubblica di una coppia di chiavi viene gestita anche nel servizio di isolamento delle chiavi e viene accessibile tramite la chiamata di procedura remota locale (LRPC). Il router di archiviazione delle chiavi usa LRPC quando si chiama nel processo di isolamento delle chiavi. Tutto l'accesso alle chiavi private passa attraverso il router della chiave privata e viene controllato da CNG.

Come descritto in precedenza, è possibile supportare un'ampia gamma di dispositivi di archiviazione hardware. In ogni caso, l'interfaccia a tutti questi dispositivi di archiviazione è identica. Include funzioni per eseguire varie operazioni di chiave privata, nonché funzioni che riguardano l'archiviazione e la gestione delle chiavi.

CNG fornisce un set di API usate per creare, archiviare e recuperare chiavi crittografiche. Per un elenco di queste API, vedere Funzioni di archiviazione chiavi CNG.

Tipi di chiave

CNG supporta i tipi di chiave seguenti:

  • Diffie-Hellman chiavi pubbliche e private.
  • Algoritmo di firma digitale (DSA, FIPS 186-2) chiavi pubbliche e private.
  • Chiavi pubbliche e private RSA (PKCS #1).
  • Diverse chiavi legacy (CryptoAPI) pubbliche e private.
  • Chiavi pubbliche e private della curva ellittica.

Algoritmi supportati

CNG supporta gli algoritmi chiave seguenti.

Algoritmo Lunghezza chiave/hash (bit)
RSA Da 512 a 16384, in incrementi a 64 bit
DH Da 512 a 16384, in incrementi a 64 bit
DSA Da 512 a 1024, in incrementi a 64 bit
ECDSA P-256, P-384, P-521 (curve NIST)
ECDH P-256, P-384, P-521 (curve NIST)
MD2 128
MD4 128
MD5 128
SHA-1 160
SHA-256 256
SHA-384 384
SHA-512 512

Directory e file chiave

I provider di servizi di rete CryptoAPI legacy microsoft archiviano le chiavi private nelle directory seguenti.

Tipo di chiave Directory
Utente privato %APPDATA%\Microsoft\Crypto\RSA\User SID\
%APPDATA%\Microsoft\Crypto\DSS\User SID\
Sistema locale privato %ALLUSERSPROFILE%\Dati applicazione\Microsoft\Crypto\RSA\S-1-5-18\
%ALLUSERSPROFILE%\Dati applicazione\Microsoft\Crypto\DSS\S-1-5-18\
Servizio locale privato %ALLUSERSPROFILE%\Dati applicazione\Microsoft\Crypto\RSA\S-1-5-19\
%ALLUSERSPROFILE%\Dati applicazione\Microsoft\Crypto\DSS\S-1-5-19\
Servizio di rete privato %ALLUSERSPROFILE%\Dati applicazione\Microsoft\Crypto\RSA\S-1-5-20\
%ALLUSERSPROFILE%\Dati applicazione\Microsoft\Crypto\DSS\S-1-5-20\
Privato condiviso %ALLUSERSPROFILE%\Dati applicazione\Microsoft\Crypto\RSA\MachineKeys
%ALLUSERSPROFILE%\Dati applicazione\Microsoft\Crypto\DSS\MachineKeys

CNG archivia le chiavi private nelle directory seguenti.

Tipo di chiave Directory
Utente privato %APPDATA%\Microsoft\Crypto\Keys
Sistema locale privato %ALLUSERSPROFILE%\Dati applicazione\Microsoft\Crypto\SystemKeys
Servizio locale privato %WINDIR%\ServiceProfiles\LocalService
Servizio di rete privato %WINDIR%\ServiceProfiles\NetworkService
Privato condiviso %ALLUSERSPROFILE%\Dati applicazione\Microsoft\Crypto\Keys

Di seguito sono riportate alcune delle differenze tra i contenitori di chiavi CryptoAPI e CNG.

  • CNG usa nomi di file diversi per i file chiave rispetto ai file chiave creati dal Rsaenh.dll e Dssenh.dll provider di servizi di configurazione legacy. I file di chiave legacy hanno anche l'estensione .key, ma i file di chiave CNG non hanno l'estensione .key.
  • CNG supporta completamente i nomi dei contenitori chiave Unicode; CNG usa un hash del nome del contenitore Unicode, mentre CryptoAPI usa un hash del nome del contenitore ANSI.
  • CNG è più flessibile rispetto alle coppie di chiavi RSA. Ad esempio, CNG supporta esponenti pubblici maggiori di 32 bit in lunghezza e supporta chiavi in cui p e q sono lunghezze diverse.
  • In CryptoAPI il file del contenitore chiave viene archiviato in una directory il cui nome è l'equivalente testuale del SID dell'utente. Questo non è più il caso in CNG, che rimuove la difficoltà di spostare gli utenti da un dominio a un altro senza perdere tutte le chiavi private.
  • I nomi di chiave e KSP CNG sono limitati a MAX_PATH caratteri Unicode. Il CSP e i nomi delle chiavi CryptoAPI sono limitati a MAX_PATH caratteri ANSI.
  • CNG offre la funzionalità delle proprietà chiave definite dall'utente. Gli utenti possono creare e associare proprietà personalizzate alle chiavi e le hanno archiviate con chiavi persistenti.

Quando si mantiene una chiave, CNG può creare due file. Il primo file contiene la chiave privata nel nuovo formato CNG e viene sempre creato. Questo file non è utilizzabile dai provider di servizi di crittografia legacy. Il secondo file contiene la stessa chiave privata nel contenitore di chiavi CryptoAPI legacy. Il secondo file è conforme al formato e alla posizione utilizzata da Rsaenh.dll. La creazione del secondo file si verifica solo se il flag di NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG viene specificato quando la funzione NCryptFinalizeKey viene chiamata per finalizzare una chiave RSA. Questa funzionalità non è supportata per le chiavi DSA e DH.

Quando un'applicazione tenta di aprire una chiave persistente esistente, CNG tenta prima di tutto di aprire il file CNG nativo. Se questo file non esiste, CNG tenta di individuare una chiave corrispondente nel contenitore di chiavi CryptoAPI legacy.

Quando si spostano o si copiano chiavi CryptoAPI da un computer di origine a un computer di destinazione con Windows User State Migration Tool (USMT), CNG non riuscirà ad accedere alle chiavi nel computer di destinazione. Per accedere a tali chiavi migrate, è necessario usare CryptoAPI.