Condividi tramite


Archiviazione e recupero delle chiavi

Architettura di archiviazione delle chiavi

CNG fornisce un modello per l'archiviazione di chiavi private che consente di adattarsi alle esigenze attuali e future di creazione di applicazioni che usano funzionalità di crittografia come la crittografia a chiave 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. La figura seguente illustra il design e la funzione dell'architettura di isolamento chiave CNG.

provider di archiviazione chiavi cng

Per soddisfare i Criteri Comuni (CC), le chiavi a lunga durata devono essere mantenute isolate affinché 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 della chiave è 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 il KSP Microsoft 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 ed è accessibile tramite una chiamata di procedura remota locale (LRPC). Il router di archiviazione delle chiavi utilizza LRPC quando chiama il processo di isolamento delle chiavi. Tutto l'accesso alle chiavi private passa attraverso il router della chiave privata ed è 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 relative all'archiviazione e alla 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 delle 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 crittografia a curva ellittica.

Algoritmi supportati

CNG supporta gli algoritmi chiave seguenti.

Algoritmo Lunghezza della chiave o dell'hash (bit)
RSA Da 512 a 16384, con incrementi di 64 bit
DH Da 512 a 16384, in incrementi di 64 bit
DSA Da 512 a 1024, in incrementi di 64 unità
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 principali

I CSP CryptoAPI legacy di Microsoft archiviano le chiavi private nelle seguenti directory.

Tipo di chiave Le directory
Utente privato %APPDATA%\Microsoft\Crypto\RSA\User SID\
%APPDATA%\Microsoft\Crypto\DSS\sid utente\
Sistema locale privato %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-18\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-18\
Servizio locale privato %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-19\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-19\
Servizio di rete privato %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-20\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-20\
Privato condiviso %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
%ALLUSERSPROFILE%\Application Data\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%\Application Data\Microsoft\Crypto\SystemKeys
Servizio locale privato %WINDIR%\ServiceProfiles\LocalService
Servizio di rete privato %WINDIR%\ServiceProfiles\NetworkService
Spazio privato condiviso %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys

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

  • CNG utilizza nomi di file diversi per i file delle chiavi rispetto a quelli creati dai CSP legacy Rsaenh.dll e Dssenh.dll. 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 di chiavi Unicode; CNG usa un hash del nome del contenitore Unicode, mentre CryptoAPI usa un hash del nome del contenitore ANSI.
  • CNG è più flessibile per quanto riguarda le coppie di chiavi RSA. Ad esempio, CNG supporta esponenti pubblici di lunghezza superiore a 32 bit e supporta le chiavi in cui p e q sono lunghezze diverse.
  • In CryptoAPI il file del contenitore di chiavi viene archiviato in una directory il cui nome è l'equivalente testuale del SID dell'utente. Questo non è più il caso in CNG, che elimina la difficoltà di spostare gli utenti da un dominio a un altro senza perdere tutte le chiavi private.
  • I nomi di chiavi e KSP CNG sono limitati ai caratteri Unicode MAX_PATH. I nomi di chiave e CSP 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 archiviarle con chiavi persistenti.

Quando si rende persistente 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 CSP CryptoAPI legacy. Il secondo file contiene la stessa chiave privata nel contenitore di chiavi CryptoAPI legacy. Il secondo file è conforme al formato e al percorso usato da Rsaenh.dll. La creazione del secondo file si verifica solo se il flag 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.

funzioni di archiviazione delle chiavi CNG

Identificatori delle proprietà di archiviazione delle chiavi

NCryptFinalizeKey