O que é uma suíte de cifra
Uma suíte de cifra TLS é um pacote nomeado de escolhas criptográficas que um cliente e um servidor acordam durante o handshake. Um único nome como TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 reúne várias decisões independentes em um identificador: como os dois lados combinam um segredo compartilhado, como o servidor prova quem é, qual algoritmo cifra os dados da aplicação e como esses dados são protegidos contra adulteração.
Toda suíte registrada também tem um ponto de código de dois bytes, atribuído pela IANA. O nome acima é 0xC02F na conexão. O handshake nunca envia o nome em texto; ele envia os dois bytes. Os nomes existem para humanos, e há mais de uma convenção de nomes — uma fonte frequente de confusão.
As tarefas que uma suíte descreve
Para o TLS 1.2 e anteriores, uma suíte nomeia até cinco coisas:
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
Troca de chaves é como os dois lados estabelecem um segredo compartilhado. ECDHE é Diffie-Hellman efêmero de curva elíptica, que oferece sigilo de encaminhamento. Outros valores que você verá são DHE (Diffie-Hellman efêmero de campo finito), RSA (transporte de chave RSA estático, sem sigilo de encaminhamento) e PSK (uma chave pré-compartilhada).
Autenticação é como o servidor (e às vezes o cliente) prova sua identidade, quase sempre com a chave privada por trás de seu certificado. RSA e ECDSA são os valores comuns. Quando uma suíte usa RSA estático para troca de chaves, a mesma chave RSA faz as duas tarefas, então o nome lista RSA apenas uma vez.
Cifra de bloco e tamanho de chave é o algoritmo simétrico que cifra o tráfego real depois que o handshake termina. AES_128 e AES_256 dominam; CHACHA20 é a alternativa comum em dispositivos sem hardware AES.
Modo transforma a cifra de bloco em algo que pode cifrar um fluxo de registros. GCM, CCM e CHACHA20_POLY1305 são modos AEAD que cuidam da integridade por conta própria. CBC é o modo mais antigo que precisa de um MAC separado.
Hash de MAC ou PRF é o último token. Em uma suíte CBC é o hash HMAC que autentica cada registro. Em uma suíte AEAD a cifra já fornece integridade, então o hash final em vez disso nomeia o PRF que o handshake usa para derivar chaves (SHA256 ou SHA384).
Lendo no sentido inverso
Depois que você conhece a gramática, consegue ler qualquer suíte de TLS 1.2 de trás para frente num relance. TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 é Diffie-Hellman efêmero de campo finito para troca de chaves, RSA para autenticação, AES com chave de 256 bits no modo GCM, e SHA-384 como PRF do handshake. Como o GCM é AEAD, não há MAC separado.
TLS_RSA_WITH_AES_128_CBC_SHA é o oposto cauteloso: transporte de chave RSA estático sem sigilo de encaminhamento, AES-128 no modo CBC, e um MAC HMAC-SHA1. Tudo nisso é legado, e é por isso que a IANA agora o marca como desaconselhado.
Uma suíte, três nomes
O mesmo 0xC02F aparece sob três convenções:
IANA: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
OpenSSL: ECDHE-RSA-AES128-GCM-SHA256
GnuTLS: TLS_ECDHE_RSA_AES_128_GCM_SHA256
O nome IANA é o padrão do registro. O OpenSSL usa hifens, descarta o WITH e escreve AES128 como um único token, e é por isso que uma configuração do OpenSSL e uma captura de pacotes podem parecer discordar quando nomeiam a mesma suíte. O decodificador aceita as três formas, além do ponto de código bruto, e mostra as outras.
Decodificar não é endossar
Ler uma suíte diz o que ela faria, não se você deveria usá-la. Um nome pode estar perfeitamente bem formado e ainda descrever RC4, troca de chaves anônima ou chaves de nível de exportação. O decodificador combina a decomposição estrutural com uma leitura de segurança e a recomendação independente da IANA, para que um nome de aparência saudável com uma falha fatal não passe despercebido. Os artigos complementares cobrem o que torna uma suíte moderna: AEAD em vez de CBC, e sigilo de encaminhamento na troca de chaves.