Na árvore de textos fonte do FreeBSD, foram aceitas alterações com uma nova implementação do VPN WireGuard, baseada no código do módulo do kernel, elaborado em conjunto pelas principais equipes de desenvolvimento do FreeBSD e WireGuard com a participação de Jason Donenfeld, autor do VPN WireGuard, e John Baldwin, um conhecido desenvolvedor do GDB e FreeBSD, que, no início dos anos 2000, implementou o suporte a SMP e NUMA no kernel do FreeBSD. Após a aceitação do driver no FreeBSD (sys/dev/wg), seu desenvolvimento e manutenção agora serão realizados no repositório do FreeBSD.
Antes da aceitação do código, com o apoio da FreeBSD Foundation, foi realizada uma análise completa das alterações, na qual também foi analisada a interação do driver com os demais subsistemas do kernel e avaliada a possibilidade de utilização dos primitivos criptográficos fornecidos pelo kernel.
Para utilizar os algoritmos criptográficos necessários ao driver, foi realizada uma extensão da API da subsistema de criptografia do kernel do FreeBSD, na qual foi adicionada uma camada que permite o uso de algoritmos não suportados no FreeBSD através da API criptográfica padrão, utilizando a implementação necessária dos algoritmos da biblioteca libsodium. Dos algoritmos incorporados no driver, apenas o código para calcular hashes Blake2 foi mantido, pois a implementação fornecida no FreeBSD desse algoritmo está atrelada a um tamanho fixo de hash.
Além disso, durante o processo de revisão, uma otimização do código foi realizada, permitindo aumentar a eficiência na distribuição de carga em CPUs multicore (garantindo uma balanceamento uniforme da alocação de tarefas de criptografia e descriptografia de pacotes entre os núcleos da CPU). Como resultado, as sobrecargas ao processar pacotes foram aproximadas à implementação do driver para Linux. O código também garante a possibilidade de uso do driver ossl para acelerar operações de criptografia.
Ao contrário da tentativa anterior de integrar o WireGuard no FreeBSD, a nova implementação utiliza a ferramenta oficial wg, em vez da versão modificada do ifconfig, o que possibilitou padronizar a configuração entre Linux e FreeBSD. A ferramenta wg, assim como o driver, está incluída no código-fonte do FreeBSD, o que foi viabilizado pela mudança na licença do código wg (agora disponível sob as licenças MIT e GPL). A tentativa anterior de inclusão do WireGuard no FreeBSD foi feita em 2020, mas terminou em polêmica, culminando na remoção do código já adicionado devido à sua baixa qualidade, manejo descuidado dos buffers, uso de stubs em vez de verificações, implementação incompleta do protocolo e violação da licença GPL.
Lembramos que VPN O WireGuard é implementado com base em métodos modernos de criptografia, oferece um desempenho muito alto, é fácil de usar, desprovido de complicações e se destacou em várias grandes implementações que gerenciam grandes volumes de tráfego. O projeto está em evolução desde 2015, passou por auditorias e verificações formais dos métodos de criptografia aplicados. No WireGuard, utiliza-se o conceito de roteamento por chaves de criptografia, que implica a vinculação de uma chave privada a cada interface de rede e o uso de chaves públicas para a conexão.
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 do servidor VPN (roaming) sem interrupção da conexão com reconfiguração automática do cliente.
Para a criptografia, é utilizado 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 um tempo de execução fixo sem a necessidade de suporte de hardware especial. Para gerar uma chave secreta compartilhada, é aplicado o protocolo Diffie-Hellman em curvas elípticas na implementação Curve25519, também proposta por Daniel Bernstein. O algoritmo BLAKE2s (RFC7693) é utilizado para hashing.
Fonte: opennet.ru
