@@ -0,0 +1,77 @@
|
||||
# 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.
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user