Uma nova implementação VPN, WireGuard, foi adicionada à base de código do FreeBSD.

A árvore fonte do FreeBSD foi atualizada com uma nova implementação do VPN WireGuard, baseada no código do módulo do kernel produzido em conjunto pelas principais equipes de desenvolvimento do FreeBSD e WireGuard com contribuições de Jason A. Donenfeld, autor de VPN WireGuard, e John H. Baldwin). um conhecido desenvolvedor de GDB e FreeBSD, que implementou suporte para SMP e NUMA no kernel do FreeBSD no início dos anos 2000. Após o driver ser aceito no FreeBSD (sys/dev/wg), seu desenvolvimento e manutenção serão doravante realizados no repositório do FreeBSD.

Antes da aceitação do código, foi realizada uma revisão completa das alterações com o apoio da Fundação FreeBSD, durante a qual foi analisada a interação do driver com o restante dos subsistemas do kernel e a possibilidade de utilização de primitivas criptográficas fornecidas pelo kernel foi foi avaliado.

Para utilizar os algoritmos criptográficos exigidos pelo driver, foi estendida a API do cripto-subsistema do kernel do FreeBSD, ao qual foi adicionado um chicote que permite a utilização de algoritmos não suportados no FreeBSD através da crypto-API padrão, utilizando a implementação do algoritmos necessários da biblioteca libsodium. Dos algoritmos embutidos no driver, resta apenas o código para cálculo de hashes Blake2, já que a implementação deste algoritmo fornecido no FreeBSD está vinculada a um tamanho de hash fixo.

Além disso, durante o processo de revisão, foi realizada a otimização do código, o que permitiu aumentar a eficiência da distribuição de carga em CPUs multi-core (foi garantido o balanceamento uniforme da atribuição de tarefas de criptografia e descriptografia de pacotes aos núcleos da CPU). Como resultado, a sobrecarga no processamento de pacotes foi próxima da implementação do driver Linux. O código também oferece a capacidade de usar o driver ossl para acelerar as operações de criptografia.

Ao contrário da tentativa anterior de integrar o WireGuard ao FreeBSD, a nova implementação usa o utilitário padrão wg, em vez de uma versão modificada do ifconfig, o que torna possível unificar a configuração no Linux e no FreeBSD. O utilitário wg, assim como o driver, está incluído no código-fonte do FreeBSD, o que foi possível alterando a licença do código wg (o código agora está disponível sob as licenças MIT e GPL). A última tentativa de incluir o WireGuard no FreeBSD foi feita em 2020, mas terminou em escândalo, com o qual o código já adicionado foi removido devido à baixa qualidade, trabalho descuidado com buffers, uso de stubs em vez de verificações, implementação incompleta do protocolo e violação da licença GPL.

Lembramos 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 provou seu valor em uma série de grandes implantações que processam grandes volumes de tráfego. O projeto está em desenvolvimento desde 2015, e passou por auditoria e verificação formal dos métodos de criptografia utilizados. WireGuard usa o conceito de roteamento de chave de criptografia, que envolve anexar uma chave privada a cada interface de rede e usá-la para vincular as chaves públicas.

As chaves públicas são trocadas para estabelecer uma conexão de forma semelhante ao SSH. Para negociar chaves e conectar-se sem executar um daemon separado no espaço do usuário, o mecanismo Noise_IK do Noise Protocol Framework é usado, semelhante à manutenção de chaves_autorizadas no SSH. A transmissão de dados é realizada através de encapsulamento em pacotes UDP. Suporta alteração do endereço IP do servidor VPN (roaming) sem desconectar a conexão com reconfiguração automática do cliente.

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

Fonte: opennet.ru

Adicionar um comentário