Primitive di crittografia

L'API CNG fornisce un set di funzioni che eseguono operazioni di crittografia di base, ad esempio la creazione di hash o la crittografia e la decrittografia dei dati. Per altre informazioni su queste funzioni, vedere Funzioni primitive di crittografia CNG.

CNG implementa numerosi algoritmi di crittografia. Ogni algoritmo o classe di algoritmi espone la propria API primitiva. È possibile installare più implementazioni di un determinato algoritmo contemporaneamente; Tuttavia, solo un'implementazione sarà l'impostazione predefinita in qualsiasi momento.

Ogni classe di algoritmo in CNG è rappresentata da un router primitivo. Le applicazioni che usano le funzioni primitive CNG si collegeranno al file binario del router Bcrypt.dll in modalità utente o Ksecdd.sys in modalità kernel prima di chiamare le funzioni. Varie routine router gestiscono tutte le primitive dell'algoritmo. Questi router tengono traccia di ogni implementazione dell'algoritmo installata nel sistema e instradano ogni chiamata di funzione al modulo del provider primitivo appropriato.

CNG fornisce primitive per le classi di algoritmi seguenti.

Classe algorithm Descrizione
Generatore di numeri casuali
Generazione di numeri casuali collegabili (RNG).
Hash
Algoritmi usati per l'hashing, ad esempio SHA1 e SHA2.
Crittografia simmetrica
Algoritmi usati per la crittografia simmetrica, ad esempio AES, 3DES e RC4.
Crittografia asimmetrica
Algoritmi asimmetrici (chiave pubblica) che supportano la crittografia, ad esempio RSA.
Firma
Algoritmi di firma come DSA ed ECDSA. Questa classe può essere usata anche con RSA.
Contratto segreto
Algoritmi di accordo segreto, ad esempio Diffie-Hellman (DH) e curva ellittica Diffie-Hellman (ECDH).

La figura seguente illustra la progettazione e la funzione delle primitive di crittografia CNG.

progettazione e funzione delle primitive crittografiche cng

Il file di intestazione Bcrypt.h definisce la costante MS_PRIMITIVE_PROVIDER come "Microsoft Primitive Provider". Per usare microsoft Primitive Provider, passare questo valore a BCryptOpenAlgorithmProvider.