Sto presumendo che tu stia parlando di questi nel contesto di TLS, in particolare delle crittografie TLS. Sembra che ci sia una certa confusione intorno a ciò che ciascun componente fa. È tutto più facile capire se vedi l'intera immagine così qui è.
Durante un handshake TLS accadono le seguenti cose: autenticazione, scambio di chiavi. I dettagli su questi dipendono dalla cosiddetta suite di cifratura. Ecco un esempio.
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
Questo in pratica dice quanto segue.
- Il server pubblicherà un certificato, che contiene una chiave pubblica RSA . Questo sarà usato per l'autenticazione.
- Lo scambio delle chiavi avverrà utilizzando ECDHE .
- Il codice simmetrico utilizzato dopo lo scambio di chiavi sarà AES-GCM con una chiave di bit 128 .
- Il PRF (funzione pseudo-casuale) da utilizzare durante lo scambio è SHA256 (potrebbe anche indicare il MAC con versioni precedenti di TLS).
Guarda attentamente e vedrai come tutti questi sono rappresentati nella suite di crittografia.
Ora vediamo cosa potrebbero significare: ECDHE-RSA , DH statico , RSA
ECDHE-RSA = server randomly generate a DH-key pair because the
certificate has no sufficient information to send over to client for
master secret generation. The DH public key is sent in "server key
exchange" packet. The secret will never be sent in the wire. The "RSA"
in the cipher suite refers to the random DH public key signature, but
not the certificate signature
Sei sulla strada giusta qui, e ora, con la conoscenza dell'intero quadro, è più facile capirlo. Durante uno scambio di chiavi "classico", la chiave pubblica nel certificato (e la sua coppia privata) viene utilizzata per concordare una chiave simmetrica. Questo, tuttavia, crea problemi se la chiave del server viene mai compromessa. Se la chiave privata corrispondente alla chiave pubblica nel certificato viene persa, il traffico precedentemente registrato può essere decodificato a proprio agio.
Questo è qualcosa che generalmente vogliamo evitare. Inserisci Inoltra segretezza . Il protocollo introduce la possibilità di avere uno scambio di chiavi separato che non dipende molto dalla coppia di chiavi RSA. L'algoritmo solitamente usato per questo è chiamato Diffie-Hellman .
Per far funzionare il DH hai bisogno dei cosiddetti parametri DH, che sono fondamentalmente un modulo primario e un generatore. Questi parametri sono pubblici. Questi sono precalcolati durante il tempo di configurazione del server e condivisi con ciascun client durante lo scambio di chiavi. I client in collaborazione con il server utilizzano quindi questi parametri per concordare una chiave senza effettivamente inviarla via cavo, proprio come hai detto tu. Ecco un ottimo video di questo dall'Accademia Khan. La chiave privata della coppia di chiavi DH è essenziale per il numero privato nel video. Mentre la chiave pubblica è ciò che viene inviato sul filo.
Per riassumere, ECDHE è la Curva ellittica effimera Diffie-Hellman, che è DH sulle curve ellittiche. La parte effimera si riferisce al fatto che ogni connessione utilizza una coppia di tasti DH.
Static DH = server has a fix DH public key in the certificate, it will
be used by the client for share secret generation. The secret will
never be sent in the wire. Since information is enough, server key
exchange message is not needed
DH statico si riferisce al server che sceglie la stessa coppia di chiavi DH per ogni connessione client (numero privato nel video). Oppure, come hai suggerito, può essere incorporato nel certificato. Ciò consente il monitoraggio passivo delle connessioni TLS. Questo essenzialmente disabilita la segretezza.
RSA = Client will use server's public key to encrypt the PMS and send
over to server, server will decrypt the PMS and generate the same PMS.
The secret is sent in the wire
Esattamente.
Ora arrivo alla tua domanda.
"RSA public key" in the certificate, for TLS-RSA, is used by the
client to encrypt the PMS. It can be seen at "client key exchange"
packet. Then What is its function in the case of TLS-ECDHE-RSA?
Ora, è facile rispondere. Quando esiste un algoritmo di scambio di chiavi esplicito, la chiave nel certificato (chiave pubblica RSA in questo caso) viene utilizzata solo per l'autenticazione. Assicurati di connetterti all'host che intendi convalidando la catena di certificati e verificando che il server contenga la chiave privata per quella pubblica del certificato dato. Firma anche la chiave pubblica DH che invia al client con la sua chiave privata RSA, che il client verifica durante l'handshake.