Cos'è una suite di cifratura

Una suite di cifratura TLS è un pacchetto con nome di scelte crittografiche su cui un client e un server si accordano durante l'handshake. Un singolo nome come TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 racchiude diverse decisioni indipendenti in un identificatore: come le due parti concordano un segreto condiviso, come il server dimostra la propria identità, quale algoritmo cifra i dati dell'applicazione e come questi dati sono protetti dalle manomissioni.

Ogni suite registrata ha anche un punto di codice di due byte, assegnato dalla . Il nome sopra è 0xC02F sul filo. L'handshake non invia mai il nome testuale; invia i due byte. I nomi esistono per le persone, e c'è più di una convenzione di nomi — una fonte frequente di confusione.

I compiti che una suite descrive

Per TLS 1.2 e precedenti, una suite nomina fino a cinque cose:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    |     |        |   |   |   |
    |     |        |   |   |   +-- MAC / PRF hash: SHA-256
    |     |        |   |   +------ mode of operation: GCM (an AEAD mode)
    |     |        |   +---------- cipher key size: 128-bit
    |     |        +-------------- bulk cipher: AES
    |     +----------------------- authentication: RSA
    +----------------------------- key exchange: ECDHE

Lo scambio di chiavi è il modo in cui le due parti stabiliscono un segreto condiviso. ECDHE è il effimero su curve ellittiche, che fornisce la forward secrecy. Altri valori che vedrai sono DHE (Diffie-Hellman effimero a campo finito), RSA (trasporto di chiave statico, senza forward secrecy) e PSK (una chiave precondivisa).

L'autenticazione è il modo in cui il server (e talvolta il client) dimostra la propria identità, quasi sempre con la chiave privata dietro il suo certificato. RSA ed ECDSA sono i valori comuni. Quando una suite usa RSA statico per lo scambio di chiavi, la stessa chiave RSA svolge entrambi i compiti, quindi il nome elenca RSA una sola volta.

Cifrario a blocchi e dimensione della chiave è l'algoritmo simmetrico che cifra il traffico reale una volta finito l'handshake. AES_128 e AES_256 dominano; CHACHA20 è l'alternativa comune sui dispositivi senza hardware .

Modalità trasforma il cifrario a blocchi in qualcosa che può cifrare un flusso di record. GCM, CCM e CHACHA20_POLY1305 sono modalità che gestiscono l'integrità da sole. CBC è la modalità più vecchia che richiede un MAC separato.

Hash MAC o è l'ultimo token. In una suite è l'hash che autentica ogni record. In una suite AEAD il cifrario fornisce già l'integrità, quindi l'hash finale nomina invece la PRF che l'handshake usa per derivare le chiavi (SHA256 o SHA384).

Leggerla al contrario

Una volta che conosci la grammatica, puoi leggere qualsiasi suite TLS 1.2 a ritroso a colpo d'occhio. TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 è Diffie-Hellman effimero a campo finito per lo scambio di chiavi, RSA per l'autenticazione, AES con chiave da 256 bit in modalità , e -384 come PRF dell'handshake. Poiché GCM è AEAD, non c'è un MAC separato.

TLS_RSA_WITH_AES_128_CBC_SHA è l'opposto da tenere d'occhio: trasporto di chiave RSA statico senza forward secrecy, AES-128 in modalità CBC, e un MAC HMAC-SHA1. Tutto questo è retaggio del passato, ed è per questo che la IANA ora lo segna come sconsigliato.

Una suite, tre nomi

Lo stesso 0xC02F compare sotto tre convenzioni:

IANA:    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
OpenSSL: ECDHE-RSA-AES128-GCM-SHA256
GnuTLS:  TLS_ECDHE_RSA_AES_128_GCM_SHA256

Il nome IANA è lo standard del registro. OpenSSL usa i trattini, elimina il WITH e scrive AES128 come un unico token, ed è per questo che una configurazione OpenSSL e una cattura di pacchetti possono sembrare in disaccordo pur nominando la stessa suite. Il decodificatore accetta tutte e tre le forme, oltre al punto di codice grezzo, e mostra le altre.

Decodificare non è approvare

Leggere una suite ti dice cosa farebbe, non se dovresti usarla. Un nome può essere perfettamente ben formato e descrivere comunque RC4, scambio di chiavi anonimo o chiavi di livello export. Il decodificatore abbina la scomposizione strutturale a una lettura di sicurezza e alla raccomandazione indipendente della IANA, così che un nome dall'aspetto sano con un difetto fatale non passi inosservato. Gli articoli complementari trattano ciò che rende moderna una suite: AEAD anziché CBC, e la forward secrecy nello scambio di chiavi.

Per vedere dove ogni pezzo di una suite finisce davvero sul filo, The Illustrated TLS 1.2 Connection e The Illustrated TLS 1.3 Connection annotano handshake reali byte per byte — uno per i nomi lunghi e impacchettati, uno per quelli corti e moderni.