Blog.

Cos’è lo scambio di chiavi Diffie-Hellman (DH)? | Privacy Preserving


Autore
Andrea Provino
Data
Tempo di lettura
5 minuti
Categoria
Data Science, Privacy Preserving

diffie-hellman-key-exchange-protocol-scambio-di-chiavi-diffie-hellman

Lo scambio di chiavi Diffie-Hellman (DH, Diffie-Hellman key exchange) è un protocollo crittografico attraverso cui due entità sono in grado di condividere le proprie chiavi segrete su un canale di comunicazione pubblico, quindi considerato insicuro.

Ora, abbandoniamo per qualche secondo la definizione concisa per una presentazione più leggera.

Seguimi.

Adottando l’approccio problema – soluzione, capiremo perché sia necessario lo scambio di chiavi Diffie-Hellman e come funzioni!

Prima però, lascia che ti spieghi una cosa.

Ho pensato questo post affinché possa essere capito anche da chi non ha alcuna pregressa conoscenza in materia.

Mi perdonerai quindi se alcune spiegazioni ti appariranno banali: sopportale, e ricorda che c’è sempre qualcuno che ne sa meno di te!

Introduzione

Per capire in modo concettuale lo scambio di chiavi Diffie-Hellman, intendo presentarti un semplice problema.

Consideriamo due sconosciuti, Alice (si legge Alis) e Bob, che vogliano scambiarsi un messaggio criptato usando uno schema di crittografia simmetrico (symmetric encryption scheme).

Devi sapere che uno schema di criptazione simmetrico impiega la medesima chiave crittografica sia per la criptazione del testo in chiaro (plaintext) che per la decifrazione del testo cifrato (ciphertext).

Per questa ragione, Alice e Bob hanno bisogno di condividere la chiave per la criptazione e la decifrazione del testo.

Come possono allora accordarsi sulla chiave da impiegare, evitando che Eve intercetti (eavesdropping) tutte le loro comunicazioni?

Caratteristiche dello scambio chiavi Diffie-Hellman

La soluzione al problema è trovare due funzioni unidirezionali (one-way functions) basate su parametro segreto (secret-based), la cui composizione è cumulativa (cumulative composition).

Questa parte è importante perché contiene i principi su cui si basa lo scambio di chiavi Diffie-Hellman (DH)

Analizziamo insieme ciascuno dei termini.

  • Funzioni unidirezionali: sono funzioni per cui è semplice calcolare l’output dall’input, ma è molto difficile fare il processo opposto. Un esempio è l’impiego di una funzione di hash che aggiunge una parola (salt) a una stringa, rendendo unica la stringa di hash.
  • basate su un parametro segreto: per applicare la funzione a un input è necessario conoscere il parametro segreto.
  • composizione: la composizione di funzioni consiste nel combinare due o più funzioni in una singola funzione (e.g. A(x) = x + 5, B(x) = x * 3, AB(x) = A(B(X))
  • cumulativa: significa che l’ordine non cambia, per cui A(B(x)) produce lo stesso risultato di B(A(x))

Per completezza d’informazione, l’esempio delle funzioni che ti ho proposto non è cumulativo perché aggiungere 5 e moltiplicare per 3 produce un risultato diverso se eseguito in diverso ordine.

Ti faccio inoltre notare che le funzioni di hash sebbene siano unidirezionali, non soddisfano generalmente il requisito di composizione cumulativa.

Ora ci siamo: è arrivato il momento di capire come funzioni lo scambio di chiavi Diffie-Hellman.

Come funziona lo scambio chiavi di Diffie-Hellman (DH)?

La proposta iniziale di Diffie e Hellamn è di usare l’ esponenziazione modulare, un’operazione in grado di calcolare il resto quando un intero b (la base) elevato all’ e-esima potenza (l’esponente) viene diviso per un intero positivo m (il modulo).

Pertanto l’esponenziazione modulare c calcolata sulla base b, l’ esponente e e il modulo m assume la forma di:

c = be mod m

Questa funzione ha la particolarità di rendere complesso il calcolo di b ed e dato solo il risultato del modulo di m.

Prendendo allora due esponenti segreti a e b otteniamo altrettante funzioni unidirezionali, dalla composizione cumulativa:

  • f1 (x) = xa mod p
  • f2 (x) = xb mod p

Per rompere il protocollo sarebbe necessario risolvere il problema del logaritmo discreto, che richiede un tempo computazionale tale per cui il Diffie-Hellman exchange protocol risulti al momento sicuro.

Il protocollo Diffie-Hellman (DH)

Ecco allora le fasi necessarie per l’applicazione del Diffie-Hellman.

  1. Alice genera una chiave privata a e sceglie un numero primo p grande, e un numero g radice primitiva modulo p (i.e. un intero g le cui potenze modulo n sono congruenti con i numeri coprimi a n)
  2. Poi calcola A = ga mod p
  3. Quindi Alice invia p, g e il valore A a Bob.
  4. Bob a sua volta genera casualmente una chiave privata b.
  5. Poi calcola gab mod p calcolando Ab mod p.
  6. Quindi calcola B = gb mod p
  7. Infine Bob invia il valore calcolato B indietro ad Alice.
  8. Alice può ora calcolare gab mod p calcolando Ba mod p.

I due sconosciuti condividono ora una chiave privata gab mod p.

Eve, che ha intercettato le comunicazioni, conosce solo g,p, A e B. Non può derivare la chiave segreta a dal valore A, così come quella b dal valore B senza risolvere il problema del logaritmo discreto che ti accennavo prima.

Senza questi valori non è in grado di calcolare la chiave privata condivisa.

Limitazioni del protocollo Diffie-Hellman (DH)

Purtroppo il protocollo Diffie-Hellman, seppur robusto contro gli eavesdropper, è suscettibile ad attacchi di tipo Man in the middle.

Durante un attacco di questo tipo, un agente terzo sarebbe in grado di falsificare le chiavi pubbliche di Alice e Bob, ingannando le due parti senza che queste possano accorgersene.

Senza dilungarci troppo, una soluzione a questo problema è quella di usare un servizio di autenticazione (i.e. un algoritmo o una Certifiction Authority) per certificare la bontà delle chiavi.

Una variante del protocollo DH, è il DH-EKE che aggiunge un fase di mutua autenticazione, basata su password, allo scambio delle chiavi.

Conclusione

Il protocollo Diffie-Hellman (DH) può essere usato per la creazione di protocolli di Private Set Intersection, una tecnica per calcolare l’intersezione tra dati tutelando la privacy degli stessi.

Questo post è quindi parte della serie sulle tecnologie di Privacy Preserving Machine Learning.

Per il momento è tutto.

Per aspera, ad astra.

Un caldo abbraccio, Andrea

Per approfondire, ti consiglio di dare un’occhiata a questo post.

Taggedprivacyprivacy preserving machine learning


Ultimi post

Patricia Merkle Trie

Il Practical Algorithm To Retrieve Information Coded In Alphanumeric Merkle Trie, o Patricia Merkle Trie è una struttura dati chiave-valore usatada Ethereum e particolarmente efficiente per il salvataggio e la verifica dell’integrità dell’informazione. In questo post ne studieremo le caratteristiche. Prima di procedere, ci conviene ripassare l’introduzione al Merkle Tree nella quale abbiamo chiarito il […]

Andrea Provino
ethereum-patricia-merkle-tree
Tree Data Structure: cos’è un Merkle Tree

Un Merkle Tree è una struttura dati efficiente per verificare che un dato appartenga a un insieme esteso di elementi. È comunemente impiegato nelle Peer to Peer network in cui la generazione efficiente di prove (proof) contribuisce alla scalabilità della rete. Capire i vantaggi di questa struttura ci tornerà utile nel nostro percorso di esplorazione […]

Andrea Provino
merkle-tree-cover
UTXO: come funziona il modello Unspent Transaction Outputs

Per tenere traccia dei bilanci utente, la blockchain di Bitcoin sfrutta un modello di contabilità definito UTXO o Unspent Transaction Outputs. In questo articolo ne esaminiamo le caratteristiche. Ogni blockchain è dotata di un sistema di contabilità, un meccanismo attraverso cui tenere traccia dei bilanci di ciascun utente. I due grandi modelli di riferimento nel […]

Andrea Provino
bitcoin-utxo
Cos’è Ethereum

Possiamo definire Ethereum come una macchina a stati distribuita che traccia le transizioni di un archivio dati general-purpose (i.e. una memoria in grado di registrare qualsiasi dato esprimibile come coppia di chiave e valore o key-value) all’interno della Ethereum Blockchain. È arrivato il momento di esplorare uno dei progetti tecnologici più innovativi e interessanti degli […]

Andrea Provino
ethereum