# L'Algoritmo Diffie And Hellman La crittografia simmetrica come sappiamo aveva un enorme problema: lo scambio sicuro della chiave simmetrica Questo problema, apparentemente impossibile, è stato risolto nel 1976 da Whitfield Diffie e Martin Hellman grazie al loro rivoluzionario **Protocollo di scambio delle chiavi Diffie-Hellman**. --- ## La Base del Funzionamento: il Logaritmo Discreto Nel caso di Diffie-Hellman come funzione si usa l'**elevamento a potenza in aritmetica modulare**. L'operazione matematica unidirezionale alla base di Diffie-Hellman è la seguente: dati un numero base $g$, un esponente $x$ e un modulo primo $p$, è molto facile calcolare: $$Y = g^x \pmod p$$ Tuttavia, se conosciamo solo $Y$, $g$ e $p$, trovare l'esponente $x$ è un problema computazionalmente complesso quando i numeri sono molto elevati. Questo problema prende il nome di **Problema del Logaritmo Discreto**. --- ## Il Funzionamento dell'Algoritmo Vediamo come si svolge lo scambio numerico tra Alice e Bob. ### 1 - Scelta di p e r Vengono scelti due numeri noti a entrambi gli utenti: * $p$: Un numero primo elevato e crittograficamente sicuro. * $g$: Un intero chiamato *generatore* (o base), che è una radice primitiva di $p$. ### 2 - Calcolo della chiavi dell'utente 1 (Alice) * L'utente **Alice** sceglie un numero intero segreto $a$ (la sua chiave privata) e poi calcola la sua chiave pubblica $kpbA$ e la invia a Bob: $$kpb = g^a \pmod p$$ * L'utente **Bob** riceve i dati e sceglie un numero intero segreto $b$ (la sua chiave privata). Poi calcola la sua chiave pubblica $kpbB$ e la invia ad Alice: $$kpb = g^b \pmod p$$ ### Calcolo della chiave condivisa Ciascuno dei due unisce la chiave pubblica ricevuta con la propria chiave privata. * Alice riceve $kpbB$ e calcola la chiave segreta $K$: $$K = B^a \pmod p$$ * Bob riceve $kpbA$ e calcola la chiave segreta $K$: $$K = A^b \pmod p$$ ### Dimostrazione dell'uguaglianza delle chiavi Sostituiamo le definizioni di $A$ e $B$ nelle formule del segreto condiviso: * Per Alice: $K = B^a \pmod p = (g^b)^a \pmod p = g^{ba} \pmod p$ * Per Bob: $K = A^b \pmod p = (g^a)^b \pmod p = g^{ab} \pmod p$ Poiché nell'esponente la proprietà commutativa della moltiplicazione è valida ($ab = ba$), ne consegue che: $$g^{ab} \pmod p = g^{ba} \pmod p$$ Alice e Bob hanno calcolato lo stesso identico numero $K$. Questo numero verrà ora utilizzato come chiave simmetrica per cifrare il resto della loro sessione di comunicazione. --- ## Esempio Didattico con Valori Ristretti Proviamo il protocollo con cifre contenute: 1. **Parametri Pubblici:** Scegliamo il numero primo $p = 23$ e il generatore $g = 5$. 2. **Alice:** * Sceglie il segreto privato $a = 6$. * Calcola la chiave pubblica: $A = 5^6 \pmod{23} = 15625 \pmod{23} = 8$. * Invia $A = 8$ a Bob. 3. **Bob:** * Sceglie il segreto privato $b = 15$. * Calcola la chiave pubblica: $B = 5^{15} \pmod{23} = 19$. * Invia $B = 19$ ad Alice. 4. **Calcolo della chiave comune $K$:** * **Alice** calcola: $K = B^a \pmod{23} = 19^6 \pmod{23} = 2$. * **Bob** calcola: $K = A^b \pmod{23} = 8^{15} \pmod{23} = 2$. Entrambi hanno ottenuto autonomamente il numero **2**. Un malintenzionato che ha ascoltato la conversazione conosce solo $p=23, g=5, A=8, B=19$, ma senza risolvere il logaritmo discreto non può risalire al valore 2. ---