Engadiuse unha nova implementación de VPN, WireGuard, á base de código FreeBSD.

A árbore de fontes de FreeBSD actualizouse cunha nova implementación de VPN WireGuard, baseada no código do módulo do núcleo producido conxuntamente polos equipos principais de desenvolvemento de FreeBSD e WireGuard coas contribucións de Jason A. Donenfeld, autor de VPN WireGuard, e John H. Baldwin. un coñecido desenvolvedor de GDB e FreeBSD, que implementou soporte para SMP e NUMA no núcleo de FreeBSD a principios dos anos 2000. Despois de que o controlador sexa aceptado en FreeBSD (sys/dev/wg), o seu desenvolvemento e mantemento realizarase en diante no repositorio de FreeBSD.

Antes de aceptar o código, realizouse unha revisión completa dos cambios co apoio da FreeBSD Foundation, durante a cal tamén se analizou a interacción do controlador co resto dos subsistemas do núcleo e a posibilidade de utilizar primitivas criptográficas proporcionadas polo núcleo. foi avaliado.

Para utilizar os algoritmos criptográficos requiridos polo controlador, ampliouse a API do cripto-subsistema do núcleo de FreeBSD, á que se engadiu un arnés que permite o uso de algoritmos non soportados en FreeBSD a través da cripto-API estándar, utilizando a implementación do algoritmos necesarios da biblioteca libsodium. Dos algoritmos integrados no controlador, só queda o código para calcular os hash de Blake2, xa que a implementación deste algoritmo proporcionado en FreeBSD está ligada a un tamaño de hash fixo.

Ademais, durante o proceso de revisión levouse a cabo a optimización do código, o que permitiu aumentar a eficiencia da distribución de cargas nas CPU de varios núcleos (garantiuse o equilibrio uniforme da asignación de tarefas de cifrado e descifrado de paquetes aos núcleos de CPU). Como resultado, a sobrecarga ao procesar paquetes foi próxima á da implementación do controlador Linux. O código tamén ofrece a posibilidade de usar o controlador ossl para acelerar as operacións de cifrado.

A diferenza do intento anterior de integrar WireGuard en FreeBSD, a nova implementación usa a utilidade estándar wg, en lugar dunha versión modificada de ifconfig, o que fai posible unificar a configuración en Linux e FreeBSD. A utilidade wg, así como o controlador, inclúense no código fonte de FreeBSD, que foi posible cambiando a licenza do código wg (o código xa está dispoñible baixo as licenzas MIT e GPL). O último intento de incluír WireGuard en FreeBSD realizouse en 2020, pero rematou nun escándalo, como resultado do cal o código xa engadido foi eliminado debido á baixa calidade, o traballo descoidado con búfers, o uso de stubs en lugar de comprobacións, a implementación incompleta. do protocolo e violación da licenza GPL.

Lembrámosche que VPN WireGuard está implementado sobre a base de métodos de cifrado modernos, ofrece un rendemento moi alto, é fácil de usar, libre de complicacións e demostrou a súa valía nunha serie de grandes despregamentos que procesan grandes volumes de tráfico. O proxecto desenvólvese desde 2015, e foi sometido a unha auditoría e verificación formal dos métodos de cifrado utilizados. WireGuard usa o concepto de enrutamento de claves de cifrado, que implica anexar unha clave privada a cada interface de rede e utilizala para vincular as claves públicas.

As chaves públicas intercámbianse para establecer unha conexión dun xeito similar ao SSH. Para negociar claves e conectarse sen executar un daemon separado no espazo do usuario, utilízase o mecanismo Noise_IK de Noise Protocol Framework, similar ao mantemento de authorized_keys en SSH. A transmisión de datos realízase mediante o encapsulamento en paquetes UDP. Admite cambiar o enderezo IP do servidor VPN (roaming) sen desconectar a conexión coa reconfiguración automática do cliente.

O cifrado utiliza o cifrado de fluxo ChaCha20 e o algoritmo de autenticación de mensaxes (MAC) Poly1305, desenvolvido por Daniel J. Bernstein, Tanja Lange e Peter Schwabe. ChaCha20 e Poly1305 sitúanse como análogos máis rápidos e seguros de AES-256-CTR e HMAC, cuxa implementación de software permite acadar un tempo de execución fixo sen o uso de soporte especial de hardware. Para xerar unha clave secreta compartida, utilízase o protocolo Diffie-Hellman de curva elíptica na implementación Curve25519, tamén proposta por Daniel Bernstein. O algoritmo BLAKE2s (RFC7693) úsase para o hash.

Fonte: opennet.ru

Engadir un comentario