I certificati sono utili perché anche se hai una coppia di chiavi, ciò non significa che puoi semplicemente inviare a qualcuno la tua chiave pubblica e il ricevitore saprà che tu controlli la chiave privata corrispondente. Ci deve essere un modo per il ricevitore di associare quella chiave con la tua identità (il tuo "sé"). In caso contrario, un utente malintenzionato potrebbe semplicemente inviare al server la sua chiave pubblica, sostenendo che è tuo e il messaggio verrà inviato a lui (o, al contrario, potresti ricevere una chiave pubblica da un server falso e ricevere un messaggio correttamente crittografato , firmato, ma non viene da chi pensi che sia arrivato).
Un modo per scambiare le chiavi in sicurezza sarebbe di persona, ma è ingombrante e non sempre fattibile. Un'altra opzione è quella di utilizzare una terza parte fidata nel processo - Persona A firmata le chiavi pubbliche della Persona B e della Persona C e associare ciascuna chiave con l'ID del titolare, quindi finché B ha un copia della chiave pubblica di A può verificare che la chiave di C corrisponda all'ID di C (anche se quella chiave / certificato è stata inviata attraverso un canale non sicuro). Pertanto, B può inviare messaggi confidenziali a C (e, come indicato nella risposta di AJ Henderson , l'opposto è anche necessario se B vuole firmare il messaggio - C deve avere la chiave pubblica di A per verificare l'identità di B).
Quindi, rispondendo alla tua domanda, i certificati hanno un ruolo nel tuo processo nella fase di scambio della chiave pubblica, tutto il resto va come hai descritto. Il contenuto di un certificato è una chiave pubblica associata a un identificatore (che si tratti di un nome di dominio o qualcos'altro che ti identifica in modo univoco e che una terza parte onesta non firmerebbe se non sapesse / si fida di te). E per chi possiede cosa, in genere entrambi possiedono un elenco di terze parti attendibili, utilizzati per la verifica, ma nulla ti impedisce di avere anche un elenco di certificati conosciuti da persone fidate (nel qual caso non importa se un terzo partito li ha firmati).
Aggiornamento: un esempio completo, adattato per adattarsi allo scenario:
Alice (Server A) vuole inviare un messaggio a Bob (Persona B), con l'aiuto della loro conoscenza comune Charles Augustus . Hanno ciascuno una coppia di chiavi, composta da una chiave privata (AA, BA e CA) e una chiave pubblica (AB, BB e CB) e un certificato che associa la loro chiave pubblica ai loro nomi (AC, BC e CC). Charlie ha firmato il proprio certificato (CC $ C) usando la sua chiave privata.
Quando Alice e Charlie si incontrarono di persona, Charlie firmò il certificato di Alice usando la sua chiave privata (AC $ C), dopo aver confermato che Alice controllava la chiave privata corrispondente (AA), che il certificato conteneva il nome di Alice (il nome di dominio del server ) più la chiave pubblica (AB) e che lei non era un impostore. Alice ha anche una copia del certificato di Charlie. Qualche tempo dopo, Bob ha fatto lo stesso (ottenendo BC $ C, usando il suo ID o qualche altra prova di identità, dal momento che le persone non hanno nomi di dominio).
Quando Alice vuole inviare un messaggio a Bob, questo è ciò che accade:
- Bob invia il suo certificato (BC $ C) ad Alice;
- Alice conferma che il certificato ha il nome di Bob e che è stato firmato da Charlie;
- Poiché Alice ha il certificato di Charlie (CC $ C), utilizza la chiave pubblica (CB) in essa contenuta per verificare la firma (realizzata con la chiave privata CA);
- ora si fida che Bob controlli la chiave privata (BA) che accoppia la chiave pubblica (BB) contenuta nel certificato di Bob.
- "Ora firmo il messaggio con la chiave privata AA e lo crittografo con la chiave pubblica BB sul server A. La persona B verifica la firma con la chiave pubblica AB e la decrittografa con la chiave privata BA."
- Ora Bob ha il messaggio, ma ha bisogno di essere sicuro che provenga davvero da Alice. BTW Alice ha anche inviato il suo certificato (AC $ C) insieme al messaggio (ecco come Bob ha ottenuto la chiave pubblica AB);
- Bob conferma che il certificato ha il nome di Alice e che è stato firmato da Charlie;
- Poiché Bob ha il certificato di Charlie (CC $ C), utilizza la chiave pubblica (CB) in esso contenuta per verificare la firma (realizzata con la chiave privata CA);
- ora si fida che Alice controlli la chiave privata (AA) che accoppia la chiave pubblica (AB) contenuta nel certificato di Alice.