La parte handshake del protocollo TLS 1.3 ha tre obiettivi:
- scambia i certificati;
- lasciare che il server confermi che il client ha realmente la chiave segreta associata al certificato pubblico fornito, senza scambiare la chiave segreta;
- scambia le chiavi effimere.
Parte 1 - Fiducia del certificato
Il client invia il suo certificato con il messaggio Certificate
.
Il server determina se il certificato proviene da una fonte attendibile. Verifica la firma del certificato del cliente, quindi la firma di ciascun certificato intermedio, fino a quando non trova un certificato attendibile, da un elenco di certificati attendibili sul lato server o da un'autorità di certificazione (CA) attendibile.
pseudo-codice:
- Alice (client) invia il suo certificato pubblico a Bob (server) e alla catena di certificati.
- Bob hash il certificato.
- Bob decrittografa il certificato utilizzando il certificato di livello superiore nella catena.
- Bob confronta i due risultati; se corrispondono, Bob ha la prova che il certificato è stato effettivamente firmato utilizzando il certificato della leva superiore.
- Bob continua attraverso la catena (passaggi 2, 3, 4) finché non trova un certificato attendibile.
Parte 2 - Fiducia del cliente
Il client invia il messaggio Certificate Verify
:
struct {
SignatureScheme algorithm;
opaque signature<0..2^16-1>;
} CertificateVerify;
Il signature scheme
indica la funzione hash utilizzata e l'algoritmo della firma.
Il signature
viene prodotto dal client e verificato dal server. I dati effettivamente firmati sono conosciuti dal client e dal server e quindi non vengono nuovamente inviati (sono spazi, una stringa di contesto, un byte zero e i messaggi precedenti).
pseudo-codice:
- Alice (client) genera una coppia di chiavi asimmetrica.
- Un'autorità fidata firma la sua chiave pubblica, producendo un certificato pubblico.
- Alice ha cancellato i dati.
- Alice crittografa l'hash utilizzando la sua chiave di crittografia (la sua chiave privata).
- Bob (server) conosce, da un messaggio precedente: il certificato pubblico di Alice e la catena di certificati.
- Alice invia a Bob: firma, funzione di hash e algoritmo di firma.
- Bob ha cancellato i dati.
- Bob decrittografa la firma utilizzando il certificato pubblico di Alice.
- Bob confronta i due risultati; se corrispondono, Bob ha la prova che la firma è associata ai dati e la chiave privata di Alice ha generato la firma.
Ora, Alice deve mantenere la sua chiave segreta e i dati devono variare tra le richieste per evitare che Eve riesca a riprodurre la richiesta con gli stessi dati e la stessa firma.
Spero che ti aiuti a capire meglio.
Riferimenti: link
link
link
link