As pessoas descrevem uma VPN como „a que usa criptografia de chave pública“ e depois imaginam cada pacote trancado pelo certificado do servidor. Essa imagem está errada de uma forma que importa quando você lê um arquivo de configuração ou uma captura de pacotes. A metade de chave pública de uma VPN serve para provar quem é o par e acordar material secreto; a metade simétrica é a que de fato protege o tráfego, pacote após pacote, durante toda a vida da sessão.

As duas metades têm tempos de vida, modos de falha e coisas que podem ser publicadas com segurança diferentes. Depois de separá-las, perguntas como „RSA 2048 é mais fraca que AES-128“ deixam de confundir, porque nunca foram comparáveis.

Três operações que se confundem

A criptografia de chave pública é um guarda-chuva sobre pelo menos três operações distintas. Uma assinatura prova que o dono de uma chave privada aprovou uma mensagem específica. O acordo de chaves permite que dois pares derivem um segredo comum a partir de valores trocados abertamente. A criptografia de chave pública esconde dados sob a chave pública de alguém, de modo que só a chave privada pode abri-los.

Os handshakes de VPN usam sobretudo as duas primeiras. Um certificado não é uma chave de criptografia; é uma declaração assinada que liga um nome a uma chave pública e permite que o outro lado decida se confia na chave recém-recebida. O estabelecimento de chaves do TLS 1.3, por exemplo, baseia-se no acordo de chaves (EC)DHE mais assinaturas de certificado, não em cifrar a sessão com a chave pública do servidor.

O que o handshake realmente produz

Num handshake moderno, cada lado gera um par de chaves efêmero, troca as metades públicas e calcula um segredo comum que nunca passa pelo fio. Esse segredo passa então por uma função de derivação de chaves para produzir chaves separadas por direção, além dos nonces e do material IV de que a camada de registros precisa. O WireGuard faz isso com sua construção baseada em Noise; o TLS 1.3 faz com HKDF sobre o transcrito do handshake.

A credencial de longo prazo — certificado e chave privada, ou uma chave WireGuard estática — autentica essa troca. Ela assina ou se mistura ao transcrito para que um estranho não consiga concluir o handshake no lugar do par. Depois disso, a credencial não realiza trabalho por pacote. Se realizasse, cada pacote exigiria uma operação de chave privada, e um túnel ocupado ficaria limitado pela operação mais lenta da pilha.

Duas consequências vêm daí. Primeiro, as chaves de sessão são novas a cada vez, então um atacante que depois rouba a chave de longo prazo não consegue decifrar sessões gravadas antes, desde que o acordo tenha sido efêmero. Segundo, uma chave de sessão vazada compromete uma sessão, não a identidade.

Por que grandes volumes de dados usam chaves simétricas

As cifras simétricas lidam bem com volume: AES-GCM ou ChaCha20-Poly1305 processam cada pacote com uma chave já na memória, autenticam o cabeçalho e incrementam um contador. O lado receptor verifica o nonce e a etiqueta de autenticação e descarta tudo o que falha ou se repete. Isso é barato o bastante para rodar à velocidade da linha em hardware comum, e a mesma construção entrega confidencialidade e integridade numa só passagem.

A construção também é onde vivem a maioria dos bugs de implementação. Um nonce repetido no GCM quebra confidencialidade e autenticidade de uma vez, por isso os protocolos derivam chaves por direção e mantêm um contador ou época explícitos. Se você lê uma captura de pacotes e o comprimento do texto cifrado corresponde ao texto claro mais uma sobrecarga fixa, é a camada simétrica que está trabalhando, não uma operação de chave pública por pacote.

Tempo de vida, renovação de chaves e sigilo futuro

As chaves de sessão devem expirar. O TLS 1.3 permite que uma mensagem KeyUpdate role as chaves de tráfego; o WireGuard renova uma sessão após um tempo ou número de mensagens configurado e mantém a antiga por pouco tempo para pacotes em trânsito. OpenVPN renegocia as chaves do seu canal de dados conforme um cronograma, com reneg-sec controlando o intervalo.

Nenhuma dessas rotações é o mesmo que renovar um certificado. Um certificado pode valer um ano enquanto as chaves de sessão mudam a cada poucos minutos, e um certificado pode ser substituído sem tocar nas chaves do túnel em funcionamento. Ao planejar uma expiração, pergunte qual objeto você está rotacionando; a resposta decide se os clientes se reconectam ou apenas renovam chaves.

Ler configurações e diagnóstico sem misturar objetos

Na prática você escolhe um protocolo completo e as primitivas que ele suporta, não monta o seu. A chave --tls-crypt do OpenVPN protege o canal de controle; o canal de dados usa cifras simétricas negociadas. As entradas PrivateKey e PublicKey do WireGuard são material de identidade, enquanto as chaves de transporte são derivadas internamente. Ler esses campos como o mesmo tipo de segredo leva a erros como colar uma chave pública onde deveria estar uma privada.

Mantenha o material público separado do privado. Um certificado, uma chave pública WireGuard e uma impressão digital são seguros para compartilhar num ticket. Uma chave privada, uma chave pré-compartilhada e uma chave de sessão exportada não são. Ao comparar forças, compare dentro de um tipo: um identificador de curva elíptica, um tamanho de módulo RSA e um tamanho de chave AES medem coisas diferentes sob hipóteses diferentes. A especificação do TLS 1.3 é uma referência útil sobre como as duas camadas se encaixam, mesmo quando o seu túnel não é TLS.

Artigos relacionados