Ir para o conteúdo
FortiSafe VPN

WireGuard: como funciona o protocolo que cria o túnel da FortiSafe

Equipe FortiSafe ·

O WireGuard é o protocolo que cria o túnel cifrado entre o aparelho e o servidor da VPN. A FortiSafe o escolheu por fatos verificáveis: o código é pequeno o bastante para ser auditado, a criptografia é atual, a segurança do protocolo foi verificada formalmente por pesquisadores e ele faz parte do kernel Linux desde 2020. Abaixo, como ele funciona por dentro.

Por que escolhemos o WireGuard

  • Código pequeno: segundo o artigo técnico do autor, Jason A. Donenfeld, a implementação para Linux tem menos de 4.000 linhas, o que facilita auditar e verificar.
  • Criptografia atual: Curve25519, ChaCha20-Poly1305, BLAKE2s e HKDF, detalhadas na tabela abaixo.
  • Segurança verificada formalmente: o protocolo tem provas de segurança feitas em ferramentas como Tamarin e CryptoVerif, e a Curve25519 usada vem de implementações verificadas.
  • Dentro do kernel Linux: o WireGuard entrou oficialmente no Linux 5.6, lançado em 29 de março de 2020.
  • Simples de operar: cada ponta é identificada por uma chave pública curta, no estilo do OpenSSH, e o próprio protocolo cria e renova as sessões.
  • O objetivo declarado pelo autor é substituir o IPsec na maioria dos usos e soluções como o OpenVPN, sendo mais seguro, mais rápido e mais fácil de usar.

Roteamento por chave criptográfica

O princípio do WireGuard é associar a chave pública de cada ponta aos endereços IP que ela pode usar dentro do túnel. O artigo técnico chama isso de cryptokey routing, roteamento por chave criptográfica.

Ao enviar um pacote, a interface procura qual chave corresponde ao IP de destino e cifra o pacote para essa chave. Ao receber, decifra e confere se o IP de origem de dentro do pacote é um dos permitidos para a chave que o cifrou. Se não for, o pacote é descartado.

Na prática, saber de onde um pacote veio dentro do túnel é o mesmo que saber qual chave o cifrou.

O handshake: uma ida e uma volta

  • O WireGuard usa o padrão Noise_IK do Noise Protocol Framework, e tudo trafega em UDP.
  • Primeira mensagem, de quem inicia: uma chave pública temporária (efêmera), a chave pública fixa de quem inicia, cifrada, e um carimbo de tempo TAI64N, também cifrado, que impede reaproveitar uma mensagem gravada.
  • Segunda mensagem, de quem responde: a chave efêmera dele e uma prova cifrada de que as duas pontas chegaram ao mesmo estado.
  • As duas pontas derivam as chaves da sessão com HKDF. Quem responde só começa a enviar dados depois de receber o primeiro pacote cifrado com a sessão nova, o que confirma as chaves.
  • Somando os campos descritos no protocolo, a mensagem de início tem 148 bytes e a de resposta, 92.
  • Propriedades da troca de chaves listadas na página oficial: sigilo futuro perfeito (perfect forward secrecy), ocultação de identidade, proteção contra reenvio de mensagens gravadas e contra personificação com chave comprometida.

A criptografia do WireGuard

PeçaPara que serveEspecificação
Curve25519 Troca de chaves Diffie-Hellman (ECDH) entre as pontas Chaves de 32 bytes
ChaCha20-Poly1305 Cifrar e autenticar cada pacote Construção AEAD da RFC 7539
XChaCha20-Poly1305 Cifrar o cookie da proteção contra sobrecarga Nonce aleatório de 24 bytes
BLAKE2s Hash e autenticação com chave (MAC) RFC 7693
HKDF Derivar as chaves da sessão RFC 5869
SipHash24 Chaves das tabelas internas de busca
Noise_IKpsk2 Estrutura do handshake Noise Protocol Framework

Chaves que mudam o tempo todo

Uma sessão nova é criada mais ou menos a cada 2 minutos, por temporizadores, e não por pedido de quem usa. Quem obtiver as chaves de uma sessão não consegue decifrar as anteriores.

Se nenhuma sessão nova for criada em três vezes o tempo máximo de uma sessão, 9 minutos, as chaves temporárias e as da sessão são apagadas da memória.

Os temporizadores do protocolo

ConstanteValorO que faz
Rekey-After-Time 120 segundos Idade da sessão a partir da qual quem a iniciou pede uma nova
Reject-After-Time 180 segundos Sessão mais velha que isso não envia nem recebe dados
Rekey-Attempt-Time 90 segundos Por quanto tempo se tenta um novo handshake antes de desistir
Rekey-Timeout 5 segundos Intervalo mínimo entre duas mensagens de início de handshake
Keepalive-Timeout 10 segundos Quem recebeu dados e não tem nada a responder envia um pacote vazio depois desse tempo
Rekey-After-Messages 2⁶⁰ mensagens Quantidade de pacotes depois da qual se pede uma sessão nova
Reject-After-Messages 2⁶⁴ − 2¹³ − 1 mensagens Limite de pacotes de uma sessão

Silêncio e proteção contra sobrecarga

O WireGuard não responde a mensagens que não se autenticam. Quem varre a internet sem conhecer a chave pública do servidor não recebe resposta nenhuma.

Toda mensagem de handshake leva um código de autenticação, o mac1, calculado com a chave pública do servidor. Sob carga, o servidor pode responder com um cookie em vez de processar o handshake: o cookie é ligado ao IP de quem pediu, vem de um segredo que muda a cada dois minutos e viaja cifrado com XChaCha20-Poly1305.

Quem inicia repete a mensagem com um segundo código, o mac2, feito com esse cookie. Isso prova que ele controla aquele IP antes de o servidor gastar processamento com a troca de chaves.

Mudar de rede sem cair

Cada ponta guarda o endereço de onde veio o último pacote autenticado corretamente e responde para ele. Se o celular sai do Wi-Fi e entra no 4G, o servidor passa a responder para o endereço novo assim que recebe o primeiro pacote válido.

Como as sessões são criadas e renovadas pelos temporizadores, não há conexão para abrir ou fechar: a interface fica pronta, e o protocolo cuida do resto.

Segurança verificada formalmente

  • Tamarin, verificação simbólica de Jason Donenfeld e Kevin Milner: correção, acordo de chaves forte e autenticidade, resistência a personificação com chave comprometida e a ataque de chave compartilhada desconhecida, sigilo das chaves, sigilo futuro, unicidade da sessão e ocultação de identidade.
  • CryptoVerif, prova computacional de Benjamin Lipp que cobre também os pacotes de dados: sigilo das mensagens, sigilo futuro, autenticação mútua e resistência a reenvio da primeira mensagem, entre outras.
  • Modelo eCK, prova computacional de Benjamin Dowling e Kenneth G. Paterson, feita sobre uma variante equivalente do protocolo.
  • ProVerif, pelo projeto Noise Explorer, de Nadim Kobeissi e Karthikeyan Bhargavan, sobre o padrão IK do Noise.
  • Curve25519 com implementações verificadas: HACL*, em 64 bits, e Fiat-Crypto, em 32 bits.

Do artigo ao kernel Linux

O WireGuard foi apresentado em artigo no NDSS 2017, o simpósio de segurança de redes e sistemas distribuídos. A revisão mais recente do artigo técnico é de 1º de junho de 2020.

O Linux 5.6, lançado em 29 de março de 2020, trouxe o WireGuard dentro do kernel. O site oficial oferece aplicativos para Linux, Windows, macOS, iOS e Android.

É o protocolo usado pela FortiSafe.

Fontes

Páginas consultadas em 14 de setembro de 2026.