Ci sono molti passaggi necessari per comprendere le ragioni e cercherò di guidarti attraverso ciascuna.
1) Usa la crittografia correttamente ...
With RSA algorithm, Alice and Bob can just share their public keys
(public_a, public_b) and keep their private keys (private_a,
private_b). Alice can just send Bob the messages which are encrypted
by private_a, and Bob can decrypted it by public_a. They can still
communicate over an insecure network, without Diffie–Hellman key
exchange at all.
Questa parte è semplicemente sbagliata. Quello che stai facendo in questa parte è la firma, non la crittografia. Dato che public_key_a è pubblico, i tuoi messaggi non saranno affatto crittografati. Invece di farlo, A dovrebbe cifrare i messaggi con public_key_b e poi B decodificarli con private_key_b. Poiché private_key_b è noto solo a B, A sa che solo B può decrittografarlo.
La firma digitale dimostra che un messaggio proviene da una determinata persona. La crittografia dimostra che solo tu, il portatore di chiavi e la persona che ha crittografato il messaggio, il mittente del messaggio, conosci il messaggio. È necessario disporre di crittografia e firma quando si utilizza la crittografia asimmetrica. Crittografia per proteggere la riservatezza del messaggio e della firma per dimostrare che tu sei quello che ha inviato questo messaggio.
Ma c'è ancora dell'altro ... Ad esempio, devi ancora proteggerti dagli attacchi di replay.
2) Bob di solito non ha una chiave pubblica
Diciamo che Alice (A) è il server e Bob (B) è il client. Di solito il client non ha una chiave pubblica. Ad esempio, conosci una chiave pubblica? La risposta è molto probabilmente NO. Quindi, Bob può ricevere messaggi da Alice e verificare che vengano davvero da Alice, ma Alice non può essere certo che tutto ciò che riceve da Bob provenga davvero da Bob.
Questo problema è una delle cause principali del perché abbiamo aggiunto il protocollo di scambio di chiavi come Diffie-Hellman.
3) RSA è limitato a un blocco.
Esiste una tecnica utilizzata per crittografare un messaggio lungo che si chiama cifratura dei blocchi di cifratura . Purtroppo, questa tecnica non può essere utilizzata con RSA. Non è che sia totalmente impossibile, ma piuttosto che nessuno sa se è davvero sicuro se lo facciamo. Quindi limita la crittografia RSA a un blocco. D'altra parte, gli algoritmi di crittografia simmetrica come AES funzionano come un incantesimo con il concatenamento dei blocchi ed è la ragione per cui li usiamo.
Ulteriori letture: link
4) Diffie-Hellman è un protocollo di scambio di chiavi
Diffie-Hellman è solo un modo per "creare e condividere" una chiave che può quindi essere utilizzata per la crittografia simmetrica. Il
La forza di Diffie-Hellman è che tutta la conversazione per creare questa chiave può avvenire in testo semplice e la chiave
sarebbe ancora privato.
Nota : Diffie-Hellman non risolve il problema degli attacchi MitM perché non può autenticare le parti che comunicano tra loro. Questo problema viene invece risolto con firma digitale .
5) Ephemeral Diffie-Hellman fornisce un segreto perfetto in avanti
Ephemeral Diffie-Hellman è solo un nome di fantasia per dire che stai generando una nuova coppia di chiavi Diffie-Hellman ogni sessione e non le memorizzi. Poiché non li memorizzi mai, un utente malintenzionato non può mai recuperarli.
Vedi questa ottima risposta per maggiori dettagli: link
6) Effimero Diffie-Hellman ti protegge dall'attacco di replay
Un effetto collaterale molto buono dell'uso di Effemerale Diffie-Hellman è che ti protegge anche dall'attacco di replay. Poiché il server e il client scelgono una nuova chiave DH privata a caso ogni sessione, non è possibile riprodurre il messaggio da un'altra sessione per impersonare il server o il client.
Conclusione
Questa è una breve panoramica di come funziona TLS e tutte quelle parti sono necessarie per fornire una connessione sicura. Senza la crittografia simmetrica non è possibile crittografare un messaggio lungo e senza crittografia asimmetrica non è possibile condividere la chiave di crittografia e fornire una perfetta segretezza in avanti.