TLS-RSA vs TLS-ECDHE-RSA rispetto a static DH

1

Capisco che ci sono molti articoli che lo spiegano e prima di pubblicare la mia domanda, questa è la mia attuale comprensione di questi:

ECDHE-RSA = server genera in modo casuale una coppia di chiavi DH perché il certificato non ha informazioni sufficienti da inviare al client per la generazione del segreto master. La chiave pubblica DH viene inviata nel pacchetto "scambio chiavi del server". Il segreto non verrà mai inviato nel filo. La "RSA" nella suite di crittografia si riferisce alla firma della chiave pubblica DH casuale, ma non alla firma del certificato

DH statico = il server ha una chiave pubblica DH fissa nel certificato, verrà utilizzata dal client per la generazione segreta di condivisione. Il segreto non verrà mai inviato nel filo. Poiché le informazioni sono sufficienti, il messaggio di scambio chiavi del server non è necessario

RSA = Il client utilizzerà la chiave pubblica del server per crittografare il PMS e inviarlo al server, il server decodificherà il PMS e genererà lo stesso PMS. Il segreto viene inviato nel filo

Metti da parte il DH statico perché non è comunemente usato su Internet - non riesco a trovarne uno nel wirehark.

Questa è la mia domanda:

Confronto il pcap tra TLS-RSA e TLS-ECDHE-RSA, trovo che

  • nel certificato presentato dal server, entrambi contengono una chiave pubblica RSA (chiave pubblica dell'oggetto) e il certificato ha una firma RSA (Sha256withRSAencryption)

  • Nel pacchetto di scambio chiavi del server per TLS-ECDHE-RSA, c'è una chiave DH con firma RSA

La firma RSA per "chiave dh" e "certificato" vengono utilizzati a scopo di autenticazione / firma digitale per il server per rivendicare la loro identità.

"Chiave pubblica RSA" nel certificato, per TLS-RSA, viene utilizzato dal client per crittografare il PMS. Può essere visto nel pacchetto "client key exchange". Allora Qual è la sua funzione nel caso di TLS-ECDHE-RSA?

Apprezzo i consigli o indica ovunque che ho capito male

    
posta Nelson Gee 26.07.2017 - 12:29
fonte

2 risposte

5

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.

  1. Il server pubblicherà un certificato, che contiene una chiave pubblica RSA . Questo sarà usato per l'autenticazione.
  2. Lo scambio delle chiavi avverrà utilizzando ECDHE .
  3. Il codice simmetrico utilizzato dopo lo scambio di chiavi sarà AES-GCM con una chiave di bit 128 .
  4. 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.

    
risposta data 25.08.2017 - 22:38
fonte
1

"RSA" in the cipher suite refers to the random DH public key signature, but not the certificate signature

"RSA" si riferisce sia alla firma della chiave DH che alla chiave pubblica del certificato del server.

Le chiavi utilizzate per firmare / verificare la chiave pubblica DH provengono dallo scambio di certificati, oppure non possiamo assicurarci di utilizzare la chiave pubblica effettiva del server.

the certificate has an RSA signature (Sha256withRSAencryption)

Come per l'algoritmo di firma del certificato (Sha256withRSAencryption), spetta all'emittente del certificato del server e viene utilizzato per verificare il certificato del server. Non prende parte allo scambio di dati effettivo ed è irrilevante qui.

Then What is its function in the case of TLS-ECDHE-RSA?

Come hai sottolineato, "ECDHE" si assicura che la chiave segreta simmetrica non sia inviata sul filo. Pertanto, anche se la chiave segreta del certificato del server dovesse compromettere un giorno, la chiave segreta precedentemente scambiata non verrà decrittografata e i dati inviati in precedenza rimarranno sicuri. È noto come "segreto diretto".

    
risposta data 26.07.2017 - 18:17
fonte