Lo scambio di chiavi Diffie-Hellman è stato uno dei più importanti sviluppi della crittografia a chiave pubblica ed è ancora oggi frequentemente implementato in una serie di diversi protocolli di sicurezza. In questo articolo, spiegheremo a cosa serve, come funziona passo dopo passo, le sue diverse varianti, così come le considerazioni sulla sicurezza che devono essere fatte per implementarlo in modo sicuro.
Che cos’è lo scambio di chiavi Diffie-Hellman?
Lo scambio di chiavi Diffie-Hellman è stato il primo metodo ampiamente utilizzato per sviluppare e scambiare chiavi in modo sicuro su un canale non sicuro.
Può non sembrare così eccitante o rivoluzionario nei termini di cui sopra, quindi facciamo un esempio che spiega perché lo scambio di chiavi Diffie-Hellman è stato una pietra miliare così importante nel mondo della crittografia, e perché è ancora così frequentemente usato oggi.
Diciamo che sei una spia top secret e devi inviare alcune informazioni importanti al tuo quartier generale. Come impedirebbe ai suoi nemici di entrare in possesso del messaggio?
La soluzione più comune sarebbe quella di criptare il messaggio con un codice. Il modo più semplice è quello di predisporre in anticipo il tipo di codice e la chiave che hai intenzione di usare, o di farlo su un canale di comunicazione sicuro.
Diciamo che sei una spia particolarmente cattiva, e tu e il tuo quartier generale decidete di usare uno shift-cipher debole per codificare i tuoi messaggi. In questo codice, ogni “a” diventa “b”, ogni “b” diventa “c”, ogni “c” diventa “d”, e così via, fino alla “z” che diventa una “a”.
Con questo cifrario a turni, il messaggio “Andiamo a cena” diventa “Mfu’t hfu ejoofs”. Per fortuna, nella nostra situazione ipotetica, i vostri avversari sono incompetenti quanto voi e non sono in grado di decifrare un codice così semplice, il che impedisce loro di accedere al contenuto del messaggio.
Ma cosa succede se non siete riusciti a concordare un codice con il vostro destinatario in anticipo?
Diciamo che volete comunicare con una spia di una nazione alleata che non avete mai incontrato prima. Non avete un canale sicuro su cui parlare con loro. Se non cifrate il vostro messaggio, qualsiasi avversario che lo intercetti sarà in grado di leggerne il contenuto. Se lo crittografate senza dire il codice all’alleato, allora il nemico non sarà in grado di leggerlo, ma nemmeno l’alleato.
Questo problema era uno dei più grandi enigmi della crittografia fino agli anni ’70:
Come potete scambiare informazioni in modo sicuro con qualcuno se non avete avuto l’opportunità di condividere la chiave in anticipo?
Lo scambio di chiavi Diffie-Hellman fu il primo meccanismo usato pubblicamente per risolvere questo problema. L’algoritmo permette a coloro che non si sono mai incontrati prima di creare in modo sicuro una chiave condivisa, anche su un canale insicuro che gli avversari potrebbero monitorare.
La storia dello scambio di chiavi Diffie-Hellman
Lo scambio di chiavi Diffie-Hellman affonda le sue radici negli anni 70. Mentre il campo della crittografia si era sviluppato in modo significativo durante i primi anni del ventesimo secolo, questi progressi erano principalmente concentrati nell’area della crittografia a chiave simmetrica.
Non è stato fino al 1976 che gli algoritmi a chiave pubblica sono emersi nella sfera pubblica, quando Whitfield Diffie e Martin Hellman hanno pubblicato il loro documento, New Directions in Cryptography. La collaborazione delineò i meccanismi dietro un nuovo sistema, che sarebbe diventato noto come lo scambio di chiavi Diffie-Hellman.
Il lavoro fu in parte ispirato da precedenti sviluppi fatti da Ralph Merkle. I cosiddetti Merkle’s Puzzles prevedono che una parte crei e invii all’altra una serie di puzzle crittografici. Questi puzzle richiederebbero una moderata quantità di risorse computazionali per risolverli.
Il destinatario sceglierebbe casualmente un puzzle da risolvere e poi spenderebbe lo sforzo necessario per completarlo. Una volta che il puzzle è risolto, un identificatore e una chiave di sessione sono rivelati al destinatario. Il destinatario quindi trasmette l’identificatore al mittente originale, che gli permette di sapere quale puzzle è stato risolto.
Siccome il mittente originale ha creato i puzzle, l’identificatore gli permette di sapere quale chiave di sessione il destinatario ha scoperto, e le due parti possono usare questa chiave per comunicare in modo più sicuro. Se un aggressore sta ascoltando l’interazione, avrà accesso a tutti i puzzle, così come all’identificatore che il destinatario trasmette al mittente originale.
L’identificatore non dice all’aggressore quale chiave di sessione è in uso, quindi il miglior approccio per decifrare le informazioni è quello di risolvere tutti i puzzle per scoprire la chiave di sessione corretta. Poiché l’aggressore dovrà risolvere in media la metà dei puzzle, finisce per essere molto più difficile per lui scoprire la chiave che per il destinatario.
Questo approccio fornisce più sicurezza, ma è lontano da una soluzione perfetta. Lo scambio di chiavi Diffie-Hellman ha preso alcune di queste idee e le ha rese più complesse per creare un metodo sicuro di crittografia a chiave pubblica.
Anche se è diventato noto come scambio di chiavi Diffie-Hellman, Martin Hellman ha proposto che l’algoritmo sia chiamato invece scambio di chiavi Diffie-Hellman-Merkle, per riflettere il lavoro che Ralph Merkle ha messo nella crittografia a chiave pubblica.
Si pensava pubblicamente che Merkle, Hellman e Diffie fossero stati i primi a sviluppare la crittografia a chiave pubblica fino al 1997, quando il governo britannico ha declassificato il lavoro fatto nei primi anni ’70 da James Ellis, Clifford Cox e Malcolm Williamson.
Si è scoperto che il trio ha elaborato il primo schema di crittografia a chiave pubblica tra il 1969 e il 1973, ma il loro lavoro è stato riservato per due decenni. Fu condotto sotto il Government Communication Headquarters (GCHQ), un’agenzia di intelligence britannica.
La loro scoperta fu in realtà l’algoritmo RSA, quindi Diffie, Hellman e Merkle furono ancora i primi a sviluppare lo scambio di chiavi Diffie-Hellman, ma non più i primi inventori della crittografia a chiave pubblica.
Dove viene usato lo scambio di chiavi Diffie-Hellman?
Lo scopo principale dello scambio di chiavi Diffie-Hellman è quello di sviluppare in modo sicuro segreti condivisi che possono essere usati per ricavare chiavi. Queste chiavi possono poi essere utilizzate con algoritmi a chiave simmetrica per trasmettere informazioni in modo protetto. Gli algoritmi simmetrici tendono ad essere usati per criptare la maggior parte dei dati perché sono più efficienti degli algoritmi a chiave pubblica.
Tecnicamente, lo scambio di chiavi Diffie-Hellman può essere usato per stabilire chiavi pubbliche e private. Tuttavia, in pratica, RSA tende ad essere usato al suo posto. Questo perché l’algoritmo RSA è anche in grado di firmare certificati a chiave pubblica, mentre lo scambio di chiavi Diffie-Hellman no.
L’algoritmo ElGamal, che è stato usato pesantemente in PGP, è basato sullo scambio di chiavi Diffie-Hellman, quindi qualsiasi protocollo che lo usa sta effettivamente implementando una sorta di Diffie-Hellman.
Come uno dei metodi più comuni per la distribuzione sicura delle chiavi, lo scambio di chiavi Diffie-Hellman è spesso implementato in protocolli di sicurezza come TLS, IPsec, SSH, PGP, e molti altri. Questo lo rende parte integrante delle nostre comunicazioni sicure.
Come parte di questi protocolli, lo scambio di chiavi Diffie-Hellman è spesso usato per rendere sicura la tua connessione a un sito web, per accedere da remoto a un altro computer, e per inviare email criptate
Come funziona lo scambio di chiavi Diffie-Hellman?
Lo scambio di chiavi Diffie-Hellman è complesso e può essere difficile capire come funziona. Utilizza numeri molto grandi e molta matematica, qualcosa che molti di noi ancora temono da quelle lunghe e noiose lezioni di scuola superiore.
Per rendere le cose un po’ più facili da capire, inizieremo spiegando lo scambio di chiavi Diffie-Hellman con un’analogia. Una volta che avrete un’idea generale di come funziona, passeremo ad una descrizione più tecnica dei processi sottostanti.
La migliore analogia per lo schema Diffie-Hellman è pensare a due persone che mescolano la vernice. Usiamo lo standard della crittografia e diciamo che i loro nomi sono Alice e Bob. Entrambi sono d’accordo su un colore casuale con cui iniziare. Diciamo che si mandano un messaggio e decidono il giallo come colore comune, proprio come nel diagramma qui sotto:
Loro impostano il proprio colore. Non dicono all’altra parte la loro scelta. Diciamo che Alice sceglie il rosso, mentre Bob sceglie un blu leggermente verdastro.
Il passo successivo è che sia Alice che Bob mescolino il loro colore segreto (rosso per Alice, blu-verdastro per Bob) con il giallo che hanno deciso di comune accordo. Secondo il diagramma, Alice finisce con un mix arancione, mentre il risultato di Bob è un blu più profondo.
Una volta che hanno finito la miscelazione, inviano il risultato all’altra parte. Alice riceve il blu più profondo, mentre a Bob viene inviata la vernice arancione.
Una volta che hanno ricevuto il risultato miscelato dal loro partner, vi aggiungono il loro colore segreto. Alice prende il blu più profondo e aggiunge la sua vernice rossa segreta, mentre Bob aggiunge il suo blu-verde segreto alla miscela arancione che ha appena ricevuto.
Il risultato? Entrambi escono con lo stesso colore, che in questo caso è un marrone disgustoso. Potrebbe non essere il tipo di colore con cui vorresti dipingere il tuo salotto, ma è comunque un colore condiviso. Questo colore condiviso è indicato come il segreto comune.
La parte critica dello scambio di chiavi Diffie-Hellman è che entrambe le parti finiscono con lo stesso risultato, senza mai aver bisogno di inviare l’intero segreto comune attraverso il canale di comunicazione. Scegliere un colore comune, i propri colori segreti, scambiare il mix e poi aggiungere il proprio colore ancora una volta, dà ad entrambe le parti un modo per arrivare allo stesso segreto comune senza dover mai inviare il tutto.
Se un attaccante sta ascoltando lo scambio, tutto ciò a cui può accedere è il colore giallo comune con cui Alice e Bob iniziano, così come i colori misti che vengono scambiati. Dal momento che questo viene fatto con numeri enormi invece che con colori, queste informazioni non sono sufficienti all’attaccante per discernere né i colori segreti iniziali, né il segreto comune (tecnicamente è possibile calcolare il segreto comune da queste informazioni, ma in un’implementazione sicura dello scambio di chiavi Diffie-Hellman, ci vorrebbe una quantità non fattibile di tempo e risorse computazionali per farlo).
Questa struttura dello scambio di chiavi Diffie-Hellman è ciò che lo rende così utile. Permette alle due parti di comunicare su una connessione potenzialmente pericolosa e di ottenere comunque un segreto condiviso che possono usare per creare chiavi di crittografia per le loro future comunicazioni. Non importa se qualche aggressore è in ascolto, perché il segreto condiviso completo non viene mai inviato sulla connessione.
I dettagli tecnici dello scambio di chiavi Diffie-Hellman
È ora di fare un po’ di matematica…
Non preoccupatevi, ci andremo piano e cercheremo di rendere l’intero processo il più facile possibile da capire. Segue una premessa simile all’analogia mostrata sopra, ma invece di mescolare e inviare colori, lo schema Diffie-Hellman fa effettivamente dei calcoli basati su numeri primi eccezionalmente grandi, poi li invia.
Per garantire la sicurezza, si raccomanda che il primo (p) sia lungo almeno 2048 bit, che è l’equivalente binario di un numero decimale di circa questa dimensione:
415368757628736598425938247569843765827634879128375827365928736 84273684728938572983759283475934875938475928475928739587249587 29873958729835792875982795837529876348273685729843579348795827 93857928739548772397592837592478593867045986792384737826735267 3547623568734869386945673456827659498063849024875809603947902 7945982730187439759284620950293759287049502938058920983945872 0948602984912837502948019371092480193581037995810937501938507913 95710937597019385089103951073058710393701934701938091803984091804 98109380198501398401983509183501983091079180395810395190395180935 8109385019840193580193840198340918093851098309180019
Per evitare che la testa di qualcuno esploda, eseguiremo questa spiegazione con numeri molto più piccoli. Sappiate che lo scambio di chiavi Diffie-Hellman sarebbe insicuro se usasse numeri così piccoli come quelli del nostro esempio. Stiamo usando numeri così piccoli solo per dimostrare il concetto in modo più semplice.
Nella forma più elementare dello scambio di chiavi Diffie-Hellman, Alice e Bob iniziano decidendo reciprocamente due numeri con cui iniziare, al contrario del singolo colore comune nell’esempio precedente. Questi sono il modulo (p) e la base (g).
Nell’uso pratico, il modulo (p) è un numero primo molto grande, mentre la base (g) è relativamente piccola per semplificare i calcoli. La base (g) è derivata da un gruppo ciclico (G) che è normalmente generato ben prima che gli altri passi abbiano luogo.
Per il nostro esempio, diciamo che il modulo (p) è 17, mentre la base (g) è 4.
Una volta che hanno deciso insieme questi numeri, Alice stabilisce un numero segreto (a) per se stessa, mentre Bob sceglie il suo numero segreto (b). Diciamo che scelgono:
a = 3
b = 6
Alice esegue quindi il seguente calcolo per ottenere il numero che invierà a Bob:
A = ga mod p
Nel calcolo di cui sopra, mod significa un’operazione modulo. Questi sono essenzialmente calcoli per capire il resto dopo aver diviso la parte sinistra per la destra. Come esempio:
15 mod 4 = 3
Se hai capito come funzionano le operazioni modulo, puoi farle da solo nei seguenti calcoli, altrimenti puoi usare una calcolatrice online.
Mettiamo quindi i nostri numeri nella formula:
A = 43 mod 17
A = 64 mod 17
A = 13
Facendo lo stesso per Bob, otteniamo:
B = 46 mod 17
B = 4096 mod 17
B = 16
Alice invia quindi il suo risultato (A) a Bob, mentre Bob invia la sua cifra (B) ad Alice. Alice calcola poi il segreto condiviso (s) usando il numero che ha ricevuto da Bob (B) e il suo numero segreto (a), usando la seguente formula:
s = Ba mod p
s = 163 mod 17
s = 4,096 mod 17
s = 16
Bob esegue poi quello che è essenzialmente lo stesso calcolo, ma con il numero che Alice gli ha inviato (A), così come il suo numero segreto (b):
s = Ab mod p
s = 136 mod 17
s = 4,826.809 mod 17
s = 16
Come potete vedere, entrambe le parti hanno ottenuto lo stesso risultato per s, 16. Questo è il segreto condiviso, che solo Alice e Bob conoscono. Possono quindi usarlo per impostare una chiave per la crittografia simmetrica, permettendo loro di inviare in modo sicuro informazioni tra di loro in modo che solo loro possano accedervi.
Nota che anche se B e s sono gli stessi nell’esempio sopra, questa è solo una coincidenza basata sui piccoli numeri che sono stati scelti per questa illustrazione. Normalmente, questi valori non sarebbero gli stessi in un’implementazione reale dello scambio di chiavi Diffie-Hellman.
Anche se molti dei dati di cui sopra sono inviati attraverso il canale in chiaro (p, g, A e B) e possono essere letti da potenziali attaccanti, il segreto condiviso (s) non viene mai trasmesso. Non sarebbe pratico per un attaccante calcolare il segreto condiviso (s) o uno dei numeri segreti (a e b) dalle informazioni inviate in chiaro.
Naturalmente, questo presuppone che lo scambio di chiavi Diffie-Hellman sia implementato correttamente e che vengano usati numeri sufficientemente grandi. Finché queste disposizioni sono rispettate, lo scambio di chiavi Diffie-Hellman è considerato un modo sicuro per stabilire un segreto condiviso che può essere usato per proteggere le comunicazioni future.
Stabilire una chiave condivisa tra più parti
Lo scambio di chiavi Diffie-Hellman può anche essere usato per stabilire una chiave condivisa con un numero maggiore di partecipanti. Funziona allo stesso modo, tranne che sono necessari ulteriori giri di calcolo per ogni parte per aggiungere il proprio numero segreto e finire con lo stesso segreto condiviso.
Proprio come nella versione a due parti dello scambio di chiavi Diffie-Hellman, alcune parti delle informazioni sono inviate attraverso canali insicuri, ma non abbastanza perché un attaccante sia in grado di calcolare il segreto condiviso.
Perché lo scambio di chiavi Diffie-Hellman è sicuro?
A livello matematico, lo scambio di chiavi Diffie-Hellman si basa su funzioni unidirezionali come base della sua sicurezza. Questi sono calcoli che sono semplici da fare in un modo, ma molto più difficili da calcolare al contrario.
Più specificamente, si basa sul problema Diffie-Hellman, che assume che sotto i giusti parametri, è impossibile calcolare gab dai valori separati di g, ga e gb. Attualmente non c’è un modo pubblicamente noto per trovare facilmente gab dagli altri valori, ed è per questo che lo scambio di chiavi Diffie-Hellman è considerato sicuro, nonostante il fatto che gli attaccanti possano intercettare i valori p, g, A e B.
Autenticazione & lo scambio di chiavi Diffie-Hellman
Nel mondo reale, lo scambio di chiavi Diffie-Hellman è raramente usato da solo. La ragione principale è che non fornisce alcuna autenticazione, il che lascia gli utenti vulnerabili agli attacchi man-in-the-middle.
Questi attacchi possono avvenire quando lo scambio di chiavi Diffie-Hellman è implementato da solo, perché non ha mezzi per verificare se l’altra parte in una connessione è davvero chi dice di essere. Senza alcuna forma di autenticazione, gli utenti possono effettivamente connettersi con gli aggressori quando pensano di comunicare con una parte fidata.
Per questa ragione, lo scambio di chiavi Diffie-Hellman è generalmente implementato insieme a qualche mezzo di autenticazione. Questo spesso comporta l’uso di certificati digitali e un algoritmo a chiave pubblica, come RSA, per verificare l’identità di ogni parte.
Variazioni dello scambio di chiavi Diffie-Hellman
Lo scambio di chiavi Diffie-Hellman può essere implementato in molti modi diversi, e ha anche fornito la base per molti altri algoritmi. Alcune di queste implementazioni forniscono l’autorizzazione, mentre altre hanno varie caratteristiche crittografiche come la perfetta segretezza in avanti.
Elliptic-curve Diffie-Hellman
Elliptic-curve Diffie-Hellman sfrutta la struttura algebrica delle curve ellittiche per permettere alle sue implementazioni di raggiungere un simile livello di sicurezza con una chiave più piccola. Una chiave a curva ellittica da 224 bit fornisce lo stesso livello di sicurezza di una chiave RSA da 2048 bit. Questo può rendere gli scambi più efficienti e ridurre i requisiti di memorizzazione.
A parte la minore lunghezza della chiave e il fatto che si basa sulle proprietà delle curve ellittiche, elliptic-curve Diffie-Hellman funziona in modo simile allo scambio di chiavi standard Diffie-Hellman.
TLS
TLS, che è un protocollo usato per proteggere gran parte di internet, può usare lo scambio Diffie-Hellman in tre modi diversi: anonimo, statico ed effimero. In pratica, solo Diffie-Hellman effimero dovrebbe essere implementato, perché le altre opzioni hanno problemi di sicurezza.
- Diffie-Hellman anonimo – Questa versione dello scambio di chiavi Diffie-Hellman non utilizza alcuna autenticazione, lasciandolo vulnerabile agli attacchi man-in-the-middle. Non dovrebbe essere usata o implementata.
- Diffie-Hellman statico – Diffie-Hellman statico usa certificati per autenticare il server. Non autentica il client per impostazione predefinita, né fornisce la segretezza in avanti.
- Ephemeral Diffie-Hellman – Questa è considerata l’implementazione più sicura perché fornisce una perfetta segretezza in avanti. È generalmente combinata con un algoritmo come DSA o RSA per autenticare una o entrambe le parti nella connessione. Diffie-Hellman effimero usa coppie di chiavi diverse ogni volta che il protocollo viene eseguito. Questo dà alla connessione una perfetta segretezza in avanti, perché anche se una chiave è compromessa in futuro, non può essere usata per decifrare tutti i messaggi passati.
ElGamal
ElGamal è un algoritmo a chiave pubblica costruito sullo scambio di chiavi Diffie-Hellman. Come Diffie-Hellman, non contiene disposizioni per l’autenticazione da solo, ed è generalmente combinato con altri meccanismi per questo scopo.
ElGamal è stato usato principalmente in PGP, GNU Privacy Guard e altri sistemi perché il suo principale rivale, RSA, era brevettato. Il brevetto di RSA è scaduto nel 2000, il che ha permesso di implementarlo liberamente dopo quella data. Da allora, ElGamal non è stato implementato così frequentemente.
STS
Il protocollo Station-to-Station (STS) è anche basato sullo scambio di chiavi Diffie-Hellman. È un altro schema di accordo chiave, tuttavia fornisce protezione contro gli attacchi man-in-the-middle così come una perfetta segretezza in avanti.
Richiede che entrambe le parti nella connessione abbiano già una coppia di chiavi, che è usata per autenticare ogni parte. Se le parti non sono già note l’una all’altra, allora i certificati possono essere usati per convalidare l’identità di entrambe le parti.
Lo scambio di chiavi Diffie-Hellman & RSA
Come abbiamo discusso prima, lo scambio di chiavi Diffie-Hellman è spesso implementato insieme a RSA o altri algoritmi per fornire l’autenticazione della connessione. Se avete familiarità con RSA, potreste chiedervi perché qualcuno dovrebbe preoccuparsi di usare anche lo scambio di chiavi Diffie-Hellman, dato che RSA permette a parti che non si sono mai incontrate prima di comunicare in modo sicuro.
RSA permette ai suoi utenti di criptare i messaggi con la chiave pubblica del loro corrispondente, in modo che possano essere decriptati solo dalla chiave privata corrispondente. Tuttavia, in pratica, l’RSA non viene usato per criptare la totalità delle comunicazioni – sarebbe troppo inefficiente.
Invece, l’RSA è spesso usato solo come mezzo per autenticare entrambe le parti. Lo fa con i certificati digitali di ogni parte, che saranno stati verificati da un’autorità di certificazione per provare che il proprietario di un certificato è veramente chi dice di essere, e che la chiave pubblica sul certificato gli appartiene veramente.
Per l’autenticazione reciproca, ogni parte firmerà un messaggio usando la sua chiave privata e poi lo invierà al suo partner di comunicazione. Ogni destinatario può quindi verificare l’identità dell’altra parte controllando i messaggi firmati con la chiave pubblica sul certificato digitale del loro partner di comunicazione (vedi il già citato articolo su RSA per maggiori dettagli su come funziona, in particolare la sezione Firma dei messaggi).
Ora che entrambe le parti sono state autenticate, è tecnicamente possibile continuare ad usare RSA per inviare in modo sicuro messaggi criptati tra di loro, tuttavia finirebbe per essere troppo inefficiente.
Per aggirare questa inefficienza, molti protocolli di sicurezza usano un algoritmo come lo scambio di chiavi Diffie-Hellman per ottenere un segreto comune che può essere usato per stabilire una chiave simmetrica condivisa. Questa chiave simmetrica viene poi utilizzata in un algoritmo a chiave simmetrica, come AES, per crittografare i dati che le due parti intendono inviare in modo sicuro tra loro.
Può sembrare un processo complesso e contorto, ma finisce per essere molto più veloce e meno esigente in termini di risorse rispetto all’utilizzo di un algoritmo a chiave pubblica per l’intero scambio. Questo perché la crittografia a chiave simmetrica è ordini di grandezza più efficiente della crittografia a chiave pubblica.
In aggiunta alle inefficienze che abbiamo appena menzionato, ci sono alcuni altri aspetti negativi che derivano dall’uso esclusivo di RSA. RSA ha bisogno di imbottitura per renderlo sicuro, quindi un algoritmo aggiuntivo dovrebbe essere implementato in modo appropriato accanto ad esso per renderlo sicuro.
RSA non fornisce nemmeno una perfetta segretezza in avanti, che è un altro svantaggio rispetto all’effimero scambio di chiavi Diffie-Hellman. Collettivamente, queste ragioni sono il motivo per cui, in molte situazioni, è meglio applicare RSA solo in combinazione con lo scambio di chiavi Diffie-Hellman.
In alternativa, lo scambio di chiavi Diffie-Hellman può essere combinato con un algoritmo come il Digital Signature Standard (DSS) per fornire autenticazione, scambio di chiavi, riservatezza e controllare l’integrità dei dati. In una tale situazione, RSA non è necessario per assicurare la connessione.
Problemi di sicurezza dello scambio di chiavi Diffie-Hellman
La sicurezza dello scambio di chiavi Diffie-Hellman dipende da come è implementato, così come i numeri che sono scelti per esso. Come abbiamo detto sopra, non ha mezzi per autenticare l’altra parte da sola, ma in pratica vengono usati altri meccanismi per assicurare che l’altra parte in una connessione non sia un impostore.
Parametri per la selezione del numero
Se un’implementazione del mondo reale dello scambio di chiavi Diffie-Hellman usasse numeri piccoli come quelli del nostro esempio, renderebbe il processo di scambio banale per un attaccante. Ma non è solo la dimensione dei numeri che conta – i numeri devono anche essere sufficientemente casuali. Se un generatore di numeri casuali produce un output prevedibile, può minare completamente la sicurezza dello scambio di chiavi Diffie-Hellman.
Il numero p dovrebbe essere lungo 2048 bit per garantire la sicurezza. La base, g, può essere un numero relativamente piccolo come 2, ma deve provenire da un ordine di G che ha un grande fattore primo
L’attacco Logjam
Lo scambio di chiavi Diffie-Hellman è stato progettato sulla base del problema del logaritmo discreto difficile da risolvere. Il meccanismo più efficace conosciuto pubblicamente per trovare la soluzione è l’algoritmo del setaccio del campo di numeri.
Le capacità di questo algoritmo sono state prese in considerazione quando lo scambio di chiavi Diffie-Hellman è stato progettato. Nel 1992, si sapeva che per un dato gruppo, G, tre dei quattro passi coinvolti nell’algoritmo potevano potenzialmente essere calcolati in anticipo. Se questo progresso veniva salvato, il passo finale poteva essere calcolato in un tempo relativamente breve.
Questo non era troppo preoccupante finché non ci si è resi conto che una parte significativa del traffico internet utilizza gli stessi gruppi che sono 1024 bit o più piccoli. Nel 2015, un team accademico ha eseguito i calcoli per il più comune primo a 512 bit utilizzato dallo scambio di chiavi Diffie-Hellman in TLS.
Sono stati anche in grado di declassare l’80% dei server TLS che supportavano DHE-EXPORT, in modo che accettassero uno scambio di chiavi Diffie-Hellman a 512 bit per la connessione. Ciò significa che ognuno di questi server è vulnerabile ad un attacco da parte di un avversario ben fornito.
I ricercatori hanno continuato ad estrapolare i loro risultati, stimando che uno stato-nazione potrebbe rompere un prime a 1024 bit. Rompendo il singolo primo a 1024-bit più comunemente usato, il team accademico ha stimato che un avversario potrebbe monitorare il 18% del milione di siti web HTTPS più popolari.
Hanno continuato a dire che un secondo primo permetterebbe all’avversario di decifrare le connessioni del 66% dei server VPN e il 26% dei server SSH. Più avanti nel rapporto, gli accademici hanno suggerito che la NSA potrebbe già avere queste capacità.
“Un’attenta lettura delle fughe di notizie pubblicate dalla NSA mostra che gli attacchi dell’agenzia alle VPN sono coerenti con l’aver raggiunto una tale rottura.”
Nonostante questa vulnerabilità, lo scambio di chiavi Diffie-Hellman può ancora essere sicuro se è implementato correttamente. Finché viene utilizzata una chiave a 2048 bit, l’attacco Logjam non funzionerà. I browser aggiornati sono sicuri anche da questo attacco.
Lo scambio di chiavi Diffie-Hellman è sicuro?
Sebbene lo scambio di chiavi Diffie-Hellman possa sembrare complesso, è una parte fondamentale dello scambio sicuro di dati online. Finché è implementato insieme a un metodo di autenticazione appropriato e i numeri sono stati selezionati correttamente, non è considerato vulnerabile agli attacchi.
Lo scambio di chiavi Diffie-Hellman è stato un metodo innovativo per aiutare due parti sconosciute a comunicare in sicurezza quando è stato sviluppato negli anni ’70. Mentre ora implementiamo versioni più recenti con chiavi più grandi per proteggere dalla tecnologia moderna, il protocollo stesso sembra che continuerà ad essere sicuro fino all’arrivo dell’informatica quantistica e agli attacchi avanzati che ne deriveranno.
Come l’informatica quantistica influenzerà lo scambio di chiavi Diffie-Hellman?
L’informatica quantistica è una branca emergente dell’informatica che continua a fare progressi. Le specifiche di come funzionano i computer quantistici sono complicate e fuori dallo scopo di questo articolo, tuttavia la tecnologia presenta problemi significativi per il campo della crittografia.
La spiegazione semplice è che i computer quantistici dovrebbero essere in grado di risolvere alcuni problemi che attualmente non sono fattibili per i computer classici. Questo aprirà molte porte e porterà nuove possibilità. Computer quantistici sufficientemente potenti saranno in grado di eseguire algoritmi quantistici che possono risolvere più efficacemente vari problemi matematici.
Anche se questo può sembrare fantastico, la sicurezza di molti dei nostri attuali meccanismi crittografici si basa sul fatto che questi problemi siano difficili da risolvere. Se questi problemi matematici diventano più facili da calcolare, diventa anche più facile rompere questi meccanismi crittografici.
Uno di questi algoritmi quantistici è l’algoritmo di Grover. Quando i computer quantistici diventeranno abbastanza potenti, accelereranno gli attacchi contro i cifrari a chiave simmetrica come AES. Tuttavia, può essere facilmente mitigato raddoppiando la dimensione della chiave.
La preoccupazione maggiore è come l’algoritmo di Shor influenzerà la crittografia a chiave pubblica. Questo perché la sicurezza dei più comuni algoritmi a chiave pubblica si basa sull’immensa difficoltà di risolvere uno di questi tre calcoli:
- Il problema del logaritmo discreto
- Il problema della fattorizzazione dei numeri interi
- Il problema del logaritmo discreto a curva ellittica
Le specifiche di ciascuno non sono davvero importanti, ma potete seguire i link se volete ulteriori informazioni. La cosa importante è che quando arriveranno computer quantistici sufficientemente potenti, diventerà molto più pratico risolvere questi problemi con l’algoritmo di Shor. Man mano che questi problemi diventano più facili da risolvere, i sistemi crittografici che si basano su di essi diventeranno meno sicuri.
La crittografia a chiave pubblica gioca un ruolo fondamentale nella protezione delle nostre comunicazioni, ed è per questo che l’informatica quantistica rappresenta una sfida enorme per i crittografi.
Nel caso dello scambio di chiavi Diffie-Hellman, la sua sicurezza si basa sull’impraticabilità di riuscire a risolvere il problema dei logaritmi discreti con la tecnologia e le risorse attuali. Tuttavia, le minacce dell’algoritmo di Shor si avvicinano ad ogni progresso dell’informatica quantistica.
È difficile stabilire una linea temporale approssimativa di quando l’informatica quantistica minaccerà seriamente lo scambio di chiavi Diffie-Hellman perché alcuni ricercatori sono molto più ottimisti di altri. Nonostante questo, si stanno sviluppando dei sostituti per lo scambio di chiavi Diffie-Hellman e altri algoritmi a chiave pubblica per essere sicuri di essere preparati per quando arriverà il momento.
Potenziali sostituti per lo scambio di chiavi Diffie-Hellman
Il pericolo dei computer quantistici non è immediato, quindi la comunità crittografica deve ancora stabilire delle alternative specifiche per lo scambio di chiavi Diffie-Hellman. Tuttavia, si stanno seguendo numerose strade. Queste includono:
- Crittografia basata su lattice
- Crittografia multivariata
- Crittografia isogenica a curva ellittica
Non sappiamo ancora esattamente come sarà il mondo post-quantistico per la crittografia, ma la comunità della sicurezza sta lavorando attivamente sui problemi e sta tenendo il passo con i progressi nel mondo del calcolo quantistico. Anche se ci saranno grandi cambiamenti in futuro, non è niente che la persona media debba temere: probabilmente non noterete nemmeno quando ci saranno dei cambiamenti.