Spiegazione tecnica di crittografia client-server (TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, chiavi a 128 bit)

21

Ho aperto una pagina Web utilizzando https.

Quando ho guardato le informazioni sulla pagina fornite dal mio browser (Firefox), ho visto quanto segue:

Connection encrypted: High-grade Encryption (TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 128 bit keys).

Ho una domanda: che cosa significa questa tecnica di crittografia? Nel tentativo di capirlo ho deciso di trovare i dati su ciascuna parte di esso:

TLS_ECDHE significa Curva ellittica effimera Diffie-Hellman e come Wikipedia dice consente a due parti di stabilire un segreto condiviso su un canale non sicuro.

RSA viene utilizzato per dimostrare l'identità del server come descritto in questo articolo .

WITH_ AES_128_GCM_SHA256 : Se ho capito bene, AES_128_GCM è una tecnica che fornisce la crittografia autenticata come descritto in questa pagina .

SHA256 è un algoritmo di hash - una funzione unidirezionale.

Ma ora sto cercando di capire come mettere insieme tutte queste cose. Come funziona insieme nel suo complesso e perché è stato configurato in questo modo?

In questo video di YouTube Alice e Bob utilizzano l'algoritmo di scambio di chiavi Diffie-Helman per concordare una chiave segreta che stanno per utilizzare (questo è TLS_ECDHE nel nostro caso). Non è sufficiente stabilire una connessione sicura (oltre alla parte RSA che Alice e Bob non hanno fatto)? Perché anche questa parte WITH_AES_128_GCM_SHA256 esiste?

    
posta VL-80 18.08.2014 - 03:02
fonte

2 risposte

23

Crittografia asimmetrica

Ci sono due parti differenti per creare una sessione TLS. Esiste la crittografia asimmetrica , porzione che è uno scambio di chiavi pubbliche tra due punti. Che è quello che hai visto nel tuo esempio di Alice e Bob. Ciò consente solo lo scambio di chiavi asimmetriche per la crittografia / decrittografia asimmetrica. Questa è la parte ECDHE . La porzione RSA descrive l' algoritmo di firma utilizzato per autenticare lo scambio di chiavi. Questo viene anche eseguito con crittografia asimmetrica. L'idea è che tu firmi i dati con la tua chiave privata e che l'altra parte possa verificare con la tua chiave pubblica.

Crittografia simmetrica

Codifica le chiavi di crittografia / decrittografia simmetriche con la tua chiave asimmetrica. La crittografia asimmetrica è molto lenta (relativamente parlando). Non vuoi dover cifrare costantemente con esso. Questo è ciò che è Crittografia simmetrica . Così ora siamo a AES_128_GCM .

Quindi, cosa crittografa esattamente la nostra chiave asimmetrica? Bene, vogliamo essenzialmente criptare la chiave simmetrica (in questo caso 128 bit, 16 byte). Se qualcuno conoscesse la chiave simmetrica, potrebbe decodificare tutti i nostri dati. Per TLS la chiave simmetrica non viene inviata direttamente. Qualcosa chiamato il segreto pre-master è crittografato e inviato attraverso. Da questo valore il client e il server possono generare tutte le chiavi e le IV necessarie per la crittografia e l'integrità dei dati. Sguardo dettagliato sullo scambio di chiavi TLS

Integrità dei dati

L'integrità dei dati è necessaria durante questo processo, così come con il canale crittografato. Come hai visto durante la ricerca di GCM, la modalità di crittografia dell'operazione stessa garantisce l'integrità dei dati che vengono crittografati. Tuttavia, anche l'handshake a chiave pubblica deve essere confermato. Se qualcuno nel mezzo modificava i dati mentre venivano trasmessi, come potevamo sapere che nulla veniva manomesso? Questo è l'istanza in cui viene utilizzata la funzione di hash negoziata, SHA256 . Ogni pezzo della stretta di mano viene sottoposto a hash insieme e l'hash finale viene trasmesso insieme al segreto pre-master crittografato. L'altro lato verifica questo hash per garantire che tutti i dati che si intende inviare siano stati ricevuti.

SHA256 , come menzionato da un altro poster, è usato anche per la Pseudo-Random Function (PRF). Questo è ciò che espande il segreto pre-master inviato tra le due parti nelle chiavi di sessione di cui abbiamo bisogno per la crittografia.

Per altre modalità di funzionamento, ogni messaggio verrebbe sottoposto a hashing anche con questo algoritmo di integrità. Quando i dati vengono decodificati, l'hash viene verificato prima di utilizzare il testo in chiaro.

Ecco un'eccellente spiegazione di come avvengono queste derivazioni per diverse versioni di TLS.

Metti insieme tutti questi pezzi e disponi di una modalità di comunicazione sicura!

Puoi elencare tutti i possibili cifrari supportati da OpenSSL con openssl ciphers . Puoi andare oltre e stampare i dettagli di ognuna di queste suite di crittografia con -V

Ad esempio:

$ openssl ciphers -V ECDHE-RSA-AES256-GCM-SHA384
          0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
  • 0xC0,0x30 rappresenta l'identificatore di due byte per la suite di crittografia
  • Kx=ECDH rappresenta l'algoritmo di scambio di chiavi
  • Au=RSA rappresenta l'algoritmo di autenticazione
  • Enc=AESGCM(256) rappresenta l'algoritmo di crittografia simmetrica
  • Mac=AEAD rappresenta l'algoritmo di verifica dell'autenticazione dei messaggi usato
risposta data 18.08.2014 - 14:16
fonte
3

Hai ragione che ECDHE viene utilizzato per lo scambio di chiavi e RSA viene utilizzato per verificare l'identità del server. Tuttavia, cosa hai intenzione di fare con la chiave scambiata? Dovrai utilizzare un determinato algoritmo per crittografare / decrittografare le comunicazioni con l'uso di quella chiave scambiata.

AES a 128 bit viene utilizzato in questo caso, in modalità GCM.

Normalmente l'algoritmo di hashing, SHA256 in questo caso, viene utilizzato per il codice di autenticazione dei messaggi basato su hash (HMAC). Questo è per fornire la crittografia autenticata. Tuttavia, come hai detto, AES-GCM fornisce già la crittografia autenticata, quindi non è utilizzata qui.

Poiché TLS1.2, l'algoritmo di hashing menzionato alla fine di una suite di cifratura viene anche utilizzato per la funzione pseudocasuale (PRF) in TLS.

    
risposta data 18.08.2014 - 09:45
fonte

Leggi altre domande sui tag