Jason Donenfeld, autor do VPN WireGuard, apresentou o primeiro lançamento significativo do software cliente WireGuard para Windows 1.0, bem como os drivers WireGuardNT 1.0 com portabilidade. VPN WireGuard para o núcleo do Windows 10 e 11, suportando arquiteturas AMD64, x86 e ARM64. O código dos componentes para o núcleo do Windows é distribuído sob a licença GPLv2, enquanto o software cliente é licenciado sob a MIT.
O porto é baseado na base de código da implementação principal do WireGuard para o núcleo Linux, que foi adaptada para usar entidades do núcleo do Windows e a pilha de rede NDIS. Em comparação com a implementação wireguard-go, que opera no espaço do usuário e utiliza a interface de rede Wintun, o WireGuardNT apresenta um aumento significativo de desempenho ao eliminar operações de mudança de contexto e a cópia do conteúdo dos pacotes do núcleo para o espaço do usuário. Assim como em implementações para Linux, OpenBSD e FreeBSD, no WireGuardNT toda a lógica de processamento do protocolo opera diretamente no nível da pilha de rede.
A versão 1.0 é marcada como um marco, sinalizando a resolução de uma série de problemas e o cumprimento de objetivos definidos, como: a utilização da função NdisWdfGetAdapterContextFromAdapterHandle() em vez de armazenar o estado do driver menos seguro no campo Reserved e o uso de deslocamentos não documentados; acompanhamento correto e oportuno do tamanho MTU (Maximum Transmission Unit) através da interceptação de chamadas de sistema; e a utilização do código da norma C23.
Vale lembrar que o VPN WireGuard é implementado com base em métodos modernos de criptografia, oferece desempenho muito alto, é fácil de usar, livre de complicações e já se destacou em várias grandes implementações que processam grandes volumes de tráfego. O projeto está em desenvolvimento desde 2015, passou por auditorias e validação formal dos métodos de criptografia aplicados. No WireGuard, é aplicada a concepção de roteamento baseado em chaves de criptografia, que implica a vinculação de uma chave privada a cada interface de rede e a aplicação para a conexão de chaves públicas.
A troca de chaves públicas para estabelecer a conexão é realizada de maneira semelhante ao SSH. Para o acordo de chaves e conexão sem iniciar um daemon separado no espaço do usuário, é aplicado o mecanismo Noise_IK do Noise Protocol Framework, similar à manutenção de authorized_keys no SSH. A transmissão de dados é realizada através da encapsulação em pacotes UDP. Suporta mudança endereços IP Servidores VPN (roaming) sem interrupção da conexão com reconfiguração automática do cliente.
Para a criptografia, utiliza-se o cifrador de fluxo ChaCha20 e o algoritmo de autenticação de mensagens (MAC) Poly1305, desenvolvidos por Daniel Bernstein, Tanja Lange e Peter Schwabe. ChaCha20 e Poly1305 são posicionados como alternativas mais rápidas e seguras ao AES-256-CTR e HMAC, cuja implementação de software permite alcançar tempos de execução fixos sem necessidade de suporte de hardware especial. Para gerar uma chave secreta compartilhada, é empregado o protocolo de Diffie-Hellman em curvas elípticas na implementação Curve25519, também proposta por Daniel Bernstein. Para hashing, utiliza-se o algoritmo BLAKE2s (RFC7693).
Fonte: opennet.ru
