Ho una domanda riguardante l'handshake TLS. Dalla mia lettura ho scoperto che master_secret
sarà derivato da pre_master_secret
condivisa dal client come segue:
-
master_secret = PRF(pre_master_secret, "master secret", lientHello.random + ServerHello.random)
-
Da questo
master_secret
sono derivate le chiavi della sessione sottostante. -
Sul lato client:
client_write_MAC_secret[SecurityParameters.hash_size] client_write_key[SecurityParameters.key_material_length] client_write_IV[SecurityParameters.IV_size]
-
Sul lato server:
server_write_MAC_secret[SecurityParameters.hash_size] server_write_key[SecurityParameters.key_material_length] server_write_IV[SecurityParameters.IV_size]
Quando queste chiavi di sessione vengono generate separatamente sul client e sul server e non vengono mai scambiate e trasmesse tra loro, come decrittografa il messaggio crittografato del client e viceversa?
Oppure tutte e 6 le chiavi di sessione vengono create sia sul client che sul server singolarmente e sperano che siano simili. Se questo è vero, sia il client che il server possono decrittografare l'un l'altro i messaggi crittografati.