Cenni preliminari sull'algoritmo ECDH (esempio CNG)
Il protocollo di scambio di chiavi ECDH (Elliptic Curve Diffie-Hellman) consente a due utenti di creare una chiave privata condivisasu un canale pubblico, non protetto, senza essersi scambiati informazioni private in precedenza.La chiave privata condivisa viene in genere utilizzata per derivare il materiale della chiave.Un algoritmo simmetrico, ad esempio AES (Advanced Encryption Standard), può utilizzare il materiale della chiave per crittografare i messaggi successivi.
Nell'esempio di comunicazione protetta tramite Cryptography Next Generation (CNG) vengono illustrate le implementazioni CNG degli algoritmi ECDH e AES.Alice, Bob e Mallory creano chiavi di crittografia nei rispettivi metodi Run quando creano oggetti Communicator.
Calcoli ECDH
Il protocollo ECDH si basa su due parametri pubblici: p e g.Il parametro p è un numero primo elevato, mentre il parametro g è un intero minore di p.Questi due parametri vengono scambiati su una linea non protetta.Una volta ricevuti i due parametri pubblici, Alice e Bob selezionano interi privati.Alice sceglie a e Bob sceglie b.Questi valori vengono definiti chiavi private.
Alice e Bob creano quindi chiavi pubbliche utilizzando i parametri pubblici e le chiavi private.Alice utilizza (g^a) mod p, mentre Bob (g^b) mod p.Si tratta si chiavi asimmetriche perché non corrispondono.
Alice e Bob si scambiano queste chiavi pubbliche e le utilizzano per calcolare la chiave privata condivisa.I calcoli ECDH garantiscono che sia Alice che Bob otterranno la stessa chiave privata condivisa, anche se non conoscono le chiavi private l'una dell'altro.
Nota
Solo i valori a, b e g^ab = g^ba vengono mantenuti segreti.Tutti gli altri valori sono pubblici.
Chiunque intercetti lo scambio sarà in grado di copiare p, g ed entrambe le chiavi pubbliche.Dal punto di vista del calcolo è tuttavia impossibile generare una chiave privata condivisa dai quattro valori pubblici condivisi senza conoscere le chiavi private di Alice e di Bob.
Il tentativo di decrittografare un messaggio crittografato con ECDH tramite forza bruta (ossia provando tutte le chiavi possibili) rientra nello stesso ordine di difficoltà del problema del logaritmo discreto.Tuttavia, l'algoritmo ECDH raggiunge lo stesso grado di sicurezza con chiavi di lunghezza minore, perché si basa su curve ellittiche anziché logaritmiche.
Esempio di ECDH
Nell'esempio seguente vengono utilizzati interi piccoli per illustrare l'algoritmo ECDH.
Alice e Bob concordano di utilizzare un numero primo p e un integer di base g:
p = 83, g = 8
Alice sceglie l'intero segreto a = 9, quindi invia (g^a) mod p a Bob:
(8^9) mod 83 = 5
Bob sceglie l'intero segreto b = 21, quindi invia (g^b) mod p ad Alice:
(8^21) mod 83 = 18
Alice esegue il calcolo ( ( (g^b) mod p)^a) mod p:
(18^9) mod 83 = 24
Bob esegue il calcolo ( ( (g^a) mod p)^b) mod p:
(5^21) mod 83 = 24
Alice e Bob ottengono lo stesso valore (24) dal calcolo, perché g^(ab) = g^(ba).Questo valore corrisponde alla chiave privata condivisa.Alice e Bob utilizzano questo valore per derivare il materiale della chiave utilizzato dall'algoritmo AES per crittografare i loro messaggi.
In questo esempio viene generata una chiave privata condivisa con un valore di 24.Poiché si tratta di un valore piccolo, viene prodotto un messaggio crittografato che potrebbe essere violato in modo semplice tramite un attacco di forza bruta.In uno scenario reale p, g, a e b sarebbero numeri molto più grandi e sarebbe necessario un computer per generare la chiave privata condivisa corrispondente.
Le classi CNG utilizzate nell'esempio di comunicazioni protette eliminano i calcoli complessi.Consentono di concentrarsi sull'implementazione di soluzioni di sicurezza anziché preoccuparsi di moltiplicare numeri elevati.
Limitazioni del protocollo
Il protocollo di scambio di chiavi ECDH non impedisce attacchi di tipo man-in-the-middle, perché non autentica il mittente delle chiavi pubbliche.Se un utente malintenzionato, Mallory in questo caso, intercetta la chiave pubblica di Alice, può sostituirla con la propria chiave pubblica e inviarla a Bob.Mallory può anche intercettare la chiave pubblica di Bob, sostituirla con la propria e inviarla ad Alice.In questo caso può quindi facilmente decrittografare i messaggi scambiati da Alice e Bob.Può modificare i messaggi, ricrittografarli con le proprie chiavi e inviarli ai destinatari.
Per risolvere questo problema, Alice e Bob possono utilizzare firme digitali da applicare alle chiavi pubbliche prima di scambiarle.Questo risultato può essere raggiunto in due modi:
Utilizzare un canale sicuro, ad esempio una comunicazione vocale o un corriere di fiducia, per trasmettere la chiave di firma digitale tra le due parti.
Utilizzare un'autorità di certificazione pubblica (CA) per fornire una chiave di firma digitale attendibile a entrambi le parti.
In entrambi casi, è necessario utilizzare uno schema di autenticazione esterno per verificare l'identità dei mittenti delle chiavi pubbliche.Nell'esempio CNG viene illustrato quello che può verificarsi se i mittenti delle chiavi non vengono autenticati.L'esempio è stato scritto appositamente per consentire una violazione della sicurezza.
Chiavi simmetriche e asimmetriche
I sistemi asimmetrici come ECDH sono estremamente lenti.Pertanto, non vengono utilizzati per crittografare messaggi di grandi dimensioni.In questi casi vengono invece utilizzati sistemi simmetrici, come AES, che sono molto più veloci.
In una tipica soluzione di crittografia si utilizza un sistema asimmetrico per derivare una chiave privata condivisa simmetrica.La chiave privata condivisa viene quindi utilizzata per derivare il materiale della chiave utilizzato da un algoritmo simmetrico per crittografare un messaggio.
Nell'esempio di comunicazione protetta tramite CNG, questo comportamento viene modellato come segue:
Viene utilizzato un algoritmo asimmetrico, l'implementazione CNG dell'algoritmo ECDH (la classe ECDiffieHellmanCng) per derivare una chiave di crittografia simmetrica (la chiave privata condivisa).
Questa chiave viene quindi utilizzata dal metodo ECDiffieHellmanCng.DeriveKeyMaterial CNG per derivare il materiale della chiave.L'implementazione CNG dell'algoritmo AES simmetrico (la classe Aes) utilizza il materiale della chiave per crittografare i messaggi.
Vedere anche
Concetti
Esempio di comunicazione protetta tramite Cryptography Next Generation (CNG)