L'algoritmo DH (Diffie-Hellman)
Algoritmo DH: demo con N = 47 , generatore = 5
Cifrario Elgamal: demo, cifrario RSA: demo

Questa pagina permette di provare l'algoritmo DH usando inevitabilmente numeri molto più piccoli di quelli usati realmente, per evitare di sovraccaricare il server.

Secondo consuetudine immaginiamo due persone Alice e Bruno, che devono generare una chiave segreta, senza incontrarsi, da remoto.

Nella tabella a destra si leggono i vari passi necessari e nelle ultime due righe la chiave generata.


Inserimento dati
$N$ (Numero primo)
$g$ (Generatore)
Procedura
DescrizioneVariabile/iFormulaValore/i
Alice e Bruno scelgono pubblicamente un numero primo $N = 47$ e un suo generatore $g$N numero primo
g generatore
--- $ \color{green}{N = 47 \\ g =5} $
Alice genera un numero casuale $a$ e lo usa come esponente per calcolare $A$ $a \lt N$ casuale$A = g^a \pmod N$ $\color{red}{a = 42}\\ \color{green}{A =37}$
Bruno genera un numero casuale $b$ e lo usa come esponente per calcolare $B$ $b \lt N$ casuale$B = g^b \pmod N$ $\color{red}{b = 30} \\ \color{green}{B =36}$
Alice, conoscendo $B$ che è pubblico e il suo esponente segreto $a$ può calcolare la chiave $K$ $K_a$ chiave di A$K_a = B^a \pmod N$ $\color{red}{K_a = 2}$
Bruno, conoscendo $A$ che è pubblico e il suo esponente segreto $b$ può calcolare la chiave $K$ $K_b$ chiave di B$K_b = A^b \pmod N$ $K_b = 2$
E naturalmente le due chiavi coincidono! $K$ $K = A^b = g^{ab} = g^{ba} = B^A \pmod N$ $K_a = K_b = 2$
La chiave segreta è $K =2$
Ovviamente, essendo $A = g^a$ ne segue che $a = log_g {A}$ e se qualcuno riuscisse a calcolare questo logaritmo avrebbe scoperto l'esponente $a$ e potrebbe calcolare agevolmente la chiave $k=B^a \pmod N$. La sicurezza del DH poggia tutta sulla difficoltà proibitiva del calcolo del logaritmo discreto in un aritmetica modulare con modulo molto grande.