Diffie-Hellman
Il sistema si basa sull’idea che due interlocutori possono generare congiuntamente una chiave condivisa senza che un intruso, che sta ascoltando le comunicazioni, sia in grado di ottenerla.
Per questo vengono scelti due numeri pubblici e, ogni interlocutore, un numero segreto. Utilizzando una formula matematica, che include l’esponenziazione, ogni interlocutore effettua una serie di operazioni con i due numeri pubblici e il loro numero segreto. Quindi gli interlocutori si scambiano i risultati pubblicamente. In teoria, invertire questa funzione è difficile come calcolare un logaritmo discreto (un sestiglione volte più costoso dell’esponenziazione utilizzata per trasformare i numeri). Ecco perché si dice che questo numero è il risultato dell’applicazione di una funzione unidirezionale al numero segreto.
Quindi entrambi gli interlocutori usano separatamente una formula matematica che combina i due numeri trasformati con il loro numero segreto e alla fine i due arrivano allo stesso numero di risultato, che sarà la chiave condivisa.
Descrizione dettagliatamodifica
Per due parti Alice e Bob, che stanno cercando di stabilire una chiave segreta, e un avversario Mallory, la versione base è la seguente:
- imposta un cugino p {\displaystyle p}
e un generatore g Z Z p {{\displaystyle g \ in \ mathbf {Z} _ {p}^{*}}
(). Questi sono pubblici, noti non solo alle parti Alice e Bob ma anche all’avversario Mallory.
- Alice sceglie un ∈ Z p − 1 {\displaystyle a\in \mathbf {Z} _{p-1}}
in modo casuale, calcola A = g mod p {\displaystyle A=g^{a}\;{\bmod {\;}}p}
, e invia Un {\displaystyle A}
Bob
- Bob sceglie b ∈ Z p − 1 {\displaystyle b\in \mathbf {Z} _{p-1}}
casuale calcola B = g b mod p {\displaystyle B=g^{b}\;{\bmod {\;}}p}
, e le invia a B {\displaystyle B}
Alice
Nota che entrambi A e B può essere calcolato il valore K = g ⋅ b mod p {\displaystyle K=g^{a\cdot b}\;{\bmod {\;}}p}
. En efecto, lo podemos demostrar usando las propiedades del grupo Z p ∗ {\displaystyle \mathbf {Z} _{p}^{*}}
: Para Alice: B a mod p = ( g b mod p ) a mod p = ( ( g b mod p ) ( g b mod p ) ⋯ ( g b mod p ) ⏞ a ) mod p = g b ⋅ a mod p = g a ⋅ b mod p = K {\displaystyle B^{a}\;\;{\bmod {\;}}\;p=(g^{b}\;{\bmod {\;}}p)^{a}\;{\bmod {\;}}p=(\overbrace {(g^{b}\;{\bmod {\;}}p)(g^{b}\;{\bmod {\;}}p)\cdots (g^{b}\;{\bmod {\;}}p)} ^{a})\;{\bmod {\;}}p=g^{b\cdot a}\;{\bmod {\;}}p=g^{a\cdot b}\;{\bmod {\;}}p=K}
Para Bob: A b mod p = ( g a mod p ) b mod p = ( ( g a mod p ) ( g a mod p ) ⋯ ( g a mod p ) ⏞ b ) mod p = g a ⋅ b mod p = K {\displaystyle A^{b}\;{\bmod {\;}}p=(g^{a}\;{\bmod {\;}}p)^{b}\;{\bmod {\;}}p=(\overbrace {(g^{a}\;{\bmod {\;}}p)(g^{a}\;{\bmod {\;}}p)\cdots (g^{a}\;{\bmod {\;}}p)} ^{b})\;{\bmod {\;}}p=g^{a\cdot b}\;{\bmod {\;}}p=K}
Quanto entrambe le parti sono in grado di calcolare un K {\displaystyle K}
, quindi si può usare come una chiave condivisa.
attacksEdit
attacksEdit passivi
Un avversario di Mallory, in possesso di p, g, A e B, poteva calcolare il segreto condiviso se aveva anche uno dei valori privati (a o b). Ottenere un a o b o B retromarcia funzione ( a = l o g o d i s c i p ( A ) {\displaystyle a=\operatorname {log\;disc} _{p}(A)}
e b = l o g o d i s c i p ( B ) {\displaystyle b=\operatorname {log\;disc} _{p}(B)}
) è il problema del logaritmo discreto in Z p ∗ {\displaystyle \mathbf {Z} _{p}^{*}}
, un problema che si crede computazionalmente intrattabile quando p è un numero primo maggiore di 200 o più cifre, e che non rispondono a determinate caratteristiche debilitante.
Attacchi attivimodifica
Il protocollo è sensibile agli attacchi Man-in-the-middle attivi. Se la comunicazione viene intercettata da una terza parte, questa può essere passata come mittente di fronte al destinatario e viceversa, poiché non è disponibile alcun meccanismo per convalidare l’identità dei partecipanti alla comunicazione. Pertanto, l ‘”uomo nel mezzo” potrebbe concordare una chiave con ciascun partecipante e trasmettere i dati tra di loro, ascoltando la conversazione in entrambe le direzioni. Una volta stabilita la comunicazione simmetrica, l’attaccante deve continuare a intercettare e modificare il traffico nel mezzo in modo che non se ne accorga. Si noti che affinché l’attacco sia operativo, l’attaccante deve conoscere il metodo di crittografia simmetrica che verrà utilizzato. Basandosi sulla occultamento di algoritmo di crittografia simmetrica non è conforme ai principi di Kerckhoffs (l’efficacia del sistema non dovrebbe dipendere dal suo design rimanendo segreto).
Per evitare questo tipo di attacco, vengono solitamente utilizzate una o più delle seguenti tecniche:
- Controllo del tempo.
- Pre-autenticazione delle parti. Ad esempio, utilizzare nell’autenticazione del protocollo di livello sottostante. Potremmo prima stabilire una connessione TLS e applicare l’algoritmo Diffie-Hellman su quel livello.
- Autenticazione del contenuto. Ad esempio, potremmo usare MAC sul contenuto dei messaggi.
- Crittografia delle chiavi pubbliche con un algoritmo di chiave pubblica (asimmetrico), evitando il problema Man-in-the-middle e, a sua volta, controllando che la chiave pubblica sia diversa da 0 e 1.
- Utilizzo di una terza parte (Carol) con cui Alice o Bob mantengono un canale sicuro. Questa terza parte può rilevare il man-in-the-middle
se Alice o Bob vengono ascoltati / modificati, semplicemente sfidando entrambi a un test che implica in detto test la chiave pubblica del otro.Si Mallory travisa la comunicazione Alice-Bob, e anche l’Alice-Carol, non può travisare il canale sicuro Bob-Carol e verrà rilevato.E se travisa l’Alice-Bob e il Bob-Carol, non può travisare l’Alice-Carol (per definizione ci deve essere un canale sicuro tra due dei tre, anche se gli altri due canali sono travisati da Mallory). Ciò significa che il metodo Diffie-Hellman può creare reti multi-nodo sicure al 100%, a partire da due nodi precedentemente protetti. Questo metodo viene utilizzato anche per testare i canali che si sospetta non siano sicuri.
EjemploEditar
|
|
|
Esempio con encryption implementationEdit
La necessità di questo esempio è: Bob deve inviare un testo cifrato ad Alice ma senza condividere la chiave di crittografia. Come fa?
- Alice sceglie un numero segreto a = 6, il numero primo p = 23 e la base g = 5. Quindi invia la chiave pubblica di Bob Alice (ga mod p), p e g:
- 56 mod 23 = 8.
- 23
- 5
- Bob sceglie un numero segreto b=15, quindi Bob calcola la chiave di crittografia comune (ga mod p) b mod p
- 815 mod 23 = 2.
- Bob crittografa, con un cifrario simmetrico come AES, il testo in chiaro utilizzando la chiave di crittografia generata.
- Encrypted text = Symmetric Cipher (Plaintext, 2)
- Bob invia ad Alice il testo crittografato e la chiave pubblica di Bob (gb mod p)
- 515 mod 23 = 19.
- Testo cifrato
- Alice calcola (gb mod p) a mod p
- 196 mod 23 = 2.
- Alice utilizza quella chiave di crittografia generata per decifrare i dati inviati da Bob
- Cleartext = Symmetric Decryptor (testo crittografato, 2 )
Sarebbero necessari valori molto più grandi di a, b e p per rendere sicuro questo esempio. Dal momento che è molto semplice testare tutti i valori possibili di gab mod 23 (ci saranno, al massimo, 22 valori, anche se a e b sono numeri grandi).
Ovviamente la necessità di Alice di inviare a Bob le informazioni crittografate è anche coperta dall’implementazione.
Leave a Reply