SSL utilizza la crittografia asimmetrica in questo modo:
- Il server invia una copia della sua chiave pubblica asimmetrica.
- Il browser crea una chiave di sessione simmetrica e la crittografa con la chiave pubblica asimmetrica del server.
- Il server decrittografa la chiave pubblica asimmetrica con la sua chiave privata asimmetrica per ottenere la chiave di sessione simmetrica.
- Server e Browser ora crittografano e decodificano tutti i dati trasmessi con la chiave di sessione simmetrica.
Ma cosa succede se qualcuno ascolta questa comunicazione nel "passaggio 1" e lo fa:
- Ascolta le comunicazioni tra server e client nel passaggio 1.
- Quando il server invia una copia della sua chiave pubblica asimmetrica, l'hacker la modifica nella propria chiave pubblica (che ha anche la sua chiave privata) e la invia al client.
- Il client crea una chiave di sessione e la crittografa con la chiave pubblica di hacker.
- Hacker ascolta la linea e ottiene la chiave di sessione e la decrittografa con la sua chiave privata.
Quindi ottiene qui la chiave di sessione. e poi ..
- L'hacker crittografa la chiave di sessione (decrittografata) dall'ultima chiave pubblica (quel server inviato)
- Quindi l'hacker ha ora la chiave di sessione ...
Ho usato questo algoritmo nel mio progetto per la comunicazione tra server e client. non c'è alcuna certificazione tra di loro. è giusto che aggiungo alcuni caratteri in chiave pubblica e il client li controlli e lo renda valido?
Come possiamo risolverlo? qualche idea?