if the participants have their own private key and a generated public key
Diffie-Hellman non ha una chiave pubblica e privata. Immaginiamo che tu sia in una stanza con almeno tre persone: Alice, Bob ed Eve. Alice e Bob vogliono parlare in privato (e andare in una stanza diversa è troppo facile), quindi Alice propone di usare Diffie-Hellman:
Alice: Facciamo uno scambio di chiavi DH. Scegli un numero casuale e rilancia 5 alla potenza di quel numero. Dividi il risultato per 23 e dimmi il resto.
Alice sceglie 16, 5**16=152587890625
, e il resto se diviso per 23 è 3.
Mario prende 25, 5**25=298023223876953125
, e il resto se diviso per 23 è 10.
Bob: 10.
Alice: ho ottenuto 3. Ora alza il mio numero al potere di quel numero ancora, e dividi per 23 di nuovo, e prendi il resto.
Alice aumenta Bob's 10 alla potenza 16, 10**16=10000000000000000
, e prende il resto quando divide per 23, 10000000000000000%23=4
Bob aumenta Alice 3 alla potenza 25, 3**25=847288609443
, e prende il resto quando divide per 23, 847288609443%23=4
Hanno ottenuto lo stesso risultato. Hanno un numero comune che Eva non sa. Eve ha solo sentito che Alice ha mandato 3 a Bob e che Bob ha inviato 10 a Alice. Non è in grado di calcolare il numero 4.
Alice: ora usa questa chiave per AES e parliamo di crittografia!
Naturalmente, nel mondo reale, i numeri sono tutti molto più grandi. Indovinare che la password per AES sia "4" non è molto difficile.
Do we need to specify it, put a digital signature in the messages or can we assume authentication whenever there is a public key involved?
Nell'esempio precedente, Alice e Bob potevano vedersi. Se Alice parlava, Bob poteva vedere che era Alice. Su Internet, questo non è il caso. È più come comunicare per lettera: chiunque consegna posta potrebbe iniettare lettere false.
Quindi hai ancora bisogno di firmare digitalmente questo scambio, per essere sicuro che un (wo) uomo nel mezzo non inietti nulla nella conversazione. Diffie-Hellman non può farlo, quindi è necessario un algoritmo aggiuntivo: uno che usi le chiavi pubbliche e private. I sistemi più popolari per farlo sono l'algoritmo RSA e la crittografia a curve ellittiche.
Il modo in cui funzionano le firme digitali viene spiegato abbondantemente altrove. Basta applicare le firme digitali alla conversazione sopra (dove Alice fornisce i parametri 5 e 23, dove Bob dice 10 e dove dice Alice 3) e hai un protocollo di scambio delle chiavi autenticato.
Ma per scambiare le chiavi pubbliche, hai lo stesso problema: come fai a sapere che nessuno nel mezzo ha cambiato la vera chiave pubblica per la propria chiave pubblica? Questo è ciò per cui vengono utilizzate le autorità di certificazione (CA): sono una terza parte attendibile e mettono una firma digitale sulla chiave pubblica. Un altro modo per risolverlo è TOFU: Trust On First Use. Questo ha lo svantaggio che, se la tua prima comunicazione fosse già stata intercettata, la tua comunicazione è stata compromessa. Ma ha il vantaggio che non è necessario alcun sistema CA e quindi non c'è CA che possa essere compromessa.