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