Parte III · 2 — TLS: tudo junto
O TLS é o protocolo que protege a web — e o melhor exemplo de como as primitivas das Partes I–II se encaixam. Num único handshake estão troca de chaves, cifra simétrica, MAC, assinatura e PKI, cada uma no seu papel.
2.1 O que o TLS entrega
O TLS (Transport Layer Security, sucessor do SSL) dá a uma conexão três garantias, sobre TCP:
- Confidencialidade — ninguém no caminho lê os dados.
- Integridade + autenticidade — ninguém altera os dados sem ser detectado.
- Autenticação do servidor (e opcionalmente do cliente) — você fala mesmo
com
koder.dev, via a cadeia de certificados da seção anterior.
A versão a usar é TLS 1.3 (RFC 8446, 2018): mais rápida, mais simples e que removeu todos os algoritmos legados frágeis das versões anteriores.
2.2 O handshake 1.3, peça por peça
O handshake do TLS 1.3 fecha em uma viagem de ida e volta (1-RTT). Veja onde cada primitiva entra:
- ClientHello — o cliente manda versões suportadas, cifras AEAD que aceita
e sua parte pública ECDHE (uma chave efêmera; Parte II).
- ServerHello — o servidor escolhe a cifra, manda sua parte ECDHE —
e a partir daqui os dois já derivam o segredo compartilhado (ECDHE) e, via HKDF (Parte II), as chaves de sessão simétricas.
- Certificate + CertificateVerify — o servidor envia sua *adeia de
certificados (PKI) e assina*o handshake com sua chave privada (Ed25519/RSA-PSS). É isto que prova "sou mesmo
koder.dev" — não basta ter feito o ECDHE, é preciso assinar. - Finished — um MAC sobre toda a transcrição, dos dois lados, garante
que ninguém adulterou as mensagens do handshake (anti-downgrade).
- Dados de aplicação — a partir daqui, tudo cifrado com AEAD
(AES-GCM / ChaCha20-Poly1305) usando as chaves derivadas.
Repare: o ECDHE dá forward secrecy e o sigilo; a assinatura sobre o certificado dá a identidade. Os dois são necessários — confidencialidade sem autenticação seria um túnel seguro para um impostor.
2.3 Por que cada peça existe
| Peça do handshake | Primitiva | Sem ela… |
|---|---|---|
| ClientHello/ServerHello key share | ECDHE (assimétrica efêmera) | sem segredo de sessão; sem forward secrecy. |
| Derivação de chaves | HKDF | sem chaves simétricas a partir do segredo. |
| Certificate + Verify | assinatura + PKI | MITM se passa pelo servidor. |
| Finished | MAC sobre a transcrição | downgrade para cifra fraca. |
| Dados de aplicação | AEAD | sem confidencialidade/integridade dos dados. |
É a tese da Parte I em ação: trabalhe na camada de protocolo (TLS), que orquestra as primitivas — nunca monte isso à mão.
2.4 Primos do TLS
O mesmo encaixe reaparece em outros protocolos de transporte seguro:
- SSH — acesso remoto; troca de chaves + chaves de host (confiança no
primeiro uso, TOFU) + cifra de sessão.
- WireGuard — VPN moderna, minimalista, baseada no Noise framework: só
curvas (Curve25519), ChaCha20-Poly1305 e BLAKE2 — sem o zoológico de opções do IPsec. Substituto recomendado do IPsec/IKE quando possível.
- QUIC — transporte da web moderna (HTTP/3) com o handshake TLS 1.3
embutido.
Referência densa: o handshake completo, as falhas históricas (BEAST, Heartbleed, downgrade), SSH, IPsec e WireGuard estão em
07-protocolos. A seguir: Mensageria e Signal — onde a confiança não é de servidor, mas fim-a-fim entre pessoas.