O kernel do Linux inclui a VPN WireGuard

Hoje, a Linus mudou para si uma filial da rede seguinte com interfaces VPN WireGuard . Este evento foi relatado na lista de discussão do WireGuard.



Atualmente, a coleta de código continua para o novo kernel Linux 5.6. O WireGuard é uma VPN rápida de nova geração que incorpora criptografia moderna. Foi originalmente desenvolvido como uma alternativa mais simples e conveniente às VPNs existentes. O autor é o especialista em segurança da informação canadense Jason A. Donenfeld. Em agosto de 2018, o WireGuard foi elogiado por Linus Torvalds. Ao longo do tempo, começaram os trabalhos de incorporação de uma VPN no kernel do Linux. O processo foi um pouco atrasado.

"Vejo que Jason fez uma solicitação de pool para incluir o WireGuard no núcleo", escreveu Linus em 2 de agosto de 2018. - Posso declarar novamente meu amor por esta VPN e esperar uma fusão rápida? O código pode não ser perfeito, mas eu olhei para ele e, comparado aos horrores do OpenVPN e IPSec, essa é uma verdadeira obra de arte. ”

Apesar dos desejos de Linus, a fusão se prolongou por um ano e meio. O principal problema acabou por estar atrelado às suas próprias implementações de funções criptográficas, usadas para aumentar a produtividade. Após longas negociações em setembro de 2019, foi feito um compromisso para transferir os patches para os principais recursos da API Crypto, para os quais os desenvolvedores do WireGuard têm reclamações sobre desempenho e segurança geral. Mas eles decidiram conectar as funções de criptografia WireGuard nativas em uma API de zinco de baixo nível separada e, eventualmente, portá-las para o kernel. Em novembro, os desenvolvedores principais mantiveram sua promessa e concordaram em transferir parte do código do Zinc para o núcleo principal. Por exemplo, a API Crypto inclui implementações rápidas preparadas pelo WireGuard dos algoritmos ChaCha20 e Poly1305.

No final, em 9 de dezembro de 2019, David S. Miller, responsável pelo subsistema de rede do kernel do Linux, aceitou patches com a implementação da interface VPN do projeto WireGuard na ramificação net-next.

E hoje, 29 de janeiro de 2020, as mudanças foram para Linus para inclusão no kernel.



As vantagens declaradas do WireGuard sobre outras soluções VPN:

  • Fácil de usar.
  • Utiliza criptografia moderna: estrutura de protocolo de ruído, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, etc.
  • Código legível compacto, mais fácil de investigar quanto a vulnerabilidades.
  • Alto desempenho.
  • Especificação clara e detalhada.

Toda a lógica principal do WireGuard ocupa menos de 4000 linhas de código, enquanto o OpenVPN e o IPSec são centenas de milhares de linhas.

“O WireGuard usa o conceito de roteamento de chave de criptografia, que envolve a ligação de uma chave privada a cada interface de rede e o uso para vincular chaves públicas. A troca de chaves públicas para estabelecer uma conexão é realizada por analogia com o SSH. Para negociar chaves e conectar-se sem iniciar um daemon separado no espaço do usuário, é usado o mecanismo Noise_IK a partir do Noise Protocol Framework , semelhante à manutenção de allowed_keys no SSH. Os dados são transmitidos através do encapsulamento em pacotes UDP. Ele suporta a alteração do endereço IP do servidor VPN (roaming) sem desconectar a conexão com a reconfiguração automática do cliente, escreve Opennet.

Para criptografia , são usadas a cifra de fluxo ChaCha20 e o algoritmo de autenticação de mensagens Poly1305 (MAC) desenvolvido por Daniel J. Bernstein , Tanja Lange e Peter Schwabe. O ChaCha20 e o Poly1305 estão posicionados como análogos mais rápidos e seguros do AES-256-CTR e HMAC, cuja implementação de software permite atingir um tempo de execução fixo sem envolver suporte de hardware especial. Para gerar uma chave secreta compartilhada, o protocolo Diffie-Hellman sobre curvas elípticas é usado na implementação do Curve25519 , também proposto por Daniel Bernstein. Para hash, o algoritmo BLAKE2s (RFC7693) é usado . ”

Resultados dos testes de desempenho no site oficial:

Largura de banda (megabits / s)


Ping (ms)


Configuração de teste:


  • Intel Core i7-3820QM e Intel Core i7-5200U
  • Placas Gigabit Intel 82579LM e Intel I218LM
  • Linux 4.6.1
  • Configuração WireGuard: ChaCha20 de 256 bits com Poly1305 para MAC
  • Primeira configuração do IPsec: ChaCha20 de 256 bits com Poly1305 para MAC
  • Segunda configuração IPsec: AES-256-GCM-128 (com AES-NI)
  • Configuração OpenVPN: conjunto de criptografia AES de 256 bits equivalente com HMAC-SHA2-256, modo UDP
  • O desempenho foi medido usando o iperf3 , mostrando um resultado médio em 30 minutos.

Teoricamente, após a integração na pilha de rede, o WireGuard deve funcionar ainda mais rápido. Mas, na realidade, isso não será necessariamente o caso devido à transição para as funções criptográficas incorporadas ao núcleo da API Crypto. Talvez nem todos eles ainda estejam otimizados para o nível de desempenho do WireGuard nativo.

“Na minha opinião, o WireGuard geralmente é ideal para o usuário. Todas as decisões de baixo nível são tomadas na especificação, portanto, o processo de preparação de uma infraestrutura VPN típica leva apenas alguns minutos. É quase impossível confundir a configuração - eles escreveram em Habré em 2018. - O processo de instalação é descrito em detalhes no site oficial. Gostaria de mencionar um excelente suporte ao OpenWRT . Essa facilidade de uso e compactação da base de código foi alcançada devido à rejeição da distribuição de chaves. Não existe um sistema de certificação complicado e todo esse horror corporativo; chaves curtas de criptografia são distribuídas aproximadamente como chaves SSH. ”

O projeto WireGuard está em desenvolvimento desde 2015, passou por uma auditoria e verificação formal . O suporte ao WireGuard é integrado ao NetworkManager e systemd, e os patches do kernel fazem parte das distribuições básicas do Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph e ALT.

Source: https://habr.com/ru/post/pt486046/


All Articles