Parte III · 2 — TLS: tudo junto

draft

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:

O handshake do TLS 1.3: ClientHello, ServerHello, certificado, Finished

  1. ClientHello — o cliente manda versões suportadas, cifras AEAD que aceita

    e sua parte pública ECDHE (uma chave efêmera; Parte II).

  2. 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.

  3. 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.

  4. Finished — um MAC sobre toda a transcrição, dos dois lados, garante

    que ninguém adulterou as mensagens do handshake (anti-downgrade).

  5. 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.