Hoy Linus ha transferido la rama net-next con interfaces VPN. . Sobre este evento en la lista de correo de WireGuard.

Actualmente se está recopilando código para el nuevo núcleo de Linux 5.6. WireGuard es una VPN de nueva generación, que incorpora criptografía moderna. Fue desarrollado inicialmente como una alternativa más sencilla y amigable a las VPN existentes. Su autor es el especialista canadiense en seguridad informática Jason Donenfeld. En agosto de 2018, WireGuard de Linus Torvalds. Aproximadamente en ese tiempo, comenzó el trabajo para incluir la VPN en el núcleo de Linux. El proceso se extendió un poco.
«Veo que Jason ha hecho un pull request para incluir WireGuard en el núcleo», escribió Linus el 2 de agosto de 2018. «¿Puedo simplemente volver a expresar mi amor por esta VPN y esperar una fusión rápida? Quizás el código no sea perfecto, pero lo revisé y comparado con los horrores de OpenVPN e IPSec, es una verdadera obra de arte».
A pesar del deseo de Linus, la fusión se retrasó un año y medio. El principal problema resultó ser la vinculación a implementaciones criptográficas propietarias, que se aplicaron para mejorar el rendimiento. Después de largas negociaciones, en septiembre de 2019 se llegó a para trasladar los parches a las funciones Crypto API que ya existen en el núcleo, con las cuales los desarrolladores de WireGuard tienen quejas en materia de rendimiento y seguridad general. Pero decidieron destacar las funciones criptográficas nativas de WireGuard en una API baja llamada Zinc y con el tiempo portarlas al núcleo. En noviembre, los desarrolladores del núcleo cumplieron su promesa y trasladar parte del código desde Zinc al núcleo principal. Por ejemplo, en Crypto API se prepararon en WireGuard rápidas implementaciones de los algoritmos ChaCha20 y Poly1305.
Finalmente, el 9 de diciembre de 2019, David Miller, responsable del subsistema de red del núcleo de Linux, en la rama net-next con la implementación de la interfaz VPN del proyecto WireGuard.
Y hoy, 29 de enero de 2020, los cambios fueron enviados a Linus para su inclusión en el núcleo.

Las ventajas declaradas de WireGuard sobre otras soluciones VPN son:
- Fácil de usar.
- Utiliza criptografía moderna: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, etc.
- Código compacto y legible, más fácil de investigar en busca de vulnerabilidades.
- Alto rendimiento.
- Clara y elaborada .
Toda la lógica principal de WireGuard ocupa menos de 4000 líneas de código, mientras que OpenVPN e IPSec suman cientos de miles de líneas.
En WireGuard se aplica el concepto de enrutamiento basado en claves de cifrado, que implica la vinculación de una clave privada a cada interfaz de red y el uso de claves públicas para la conexión. El intercambio de claves públicas para establecer una conexión se realiza de manera similar a SSH. Para la negociación de claves y conexión sin iniciar un demonio separado en el espacio del usuario, se utiliza el mecanismo Noise_IK de , similar al mantenimiento de authorized_keys en SSH. La transmisión de datos se realiza a través de la encapsulación en paquetes UDP. Se admite el cambio de la dirección IP del servidor VPN (roaming) sin romper la conexión con una reconfiguración automática del cliente, — Opennet.
Para el cifrado un cifrador de flujo y un algoritmo de autenticación de mensajes (MAC) , desarrollado por Daniel Bernstein (), Tanja Lange y Peter Schwabe. ChaCha20 y Poly1305 se posicionan como alternativas más rápidas y seguras que AES-256-CTR y HMAC, cuya implementación de software permite alcanzar un tiempo de ejecución fijo sin requerir soporte de hardware especial. Para generar una clave secreta compartida, se utiliza el protocolo de Diffie-Hellman en curvas elípticas en la implementación de , también propuesto por Daniel Bernstein. Para el hashing se utiliza el algoritmo ».
Resultados del sitio oficial:
Ancho de banda (megabits/s)

Ping (ms)

Configuración de prueba:
- Intel Core i7-3820QM e Intel Core i7-5200U
- Tarjetas Gigabit Intel 82579LM e Intel I218LM
- Linux 4.6.1
- Configuración de WireGuard: ChaCha20 de 256 bits con Poly1305 para MAC
- Primera configuración de IPsec: ChaCha20 de 256 bits con Poly1305 para MAC
- Segunda configuración de IPsec: AES-256-GCM-128 (con AES-NI)
- Configuración de OpenVPN: conjunto de cifrado equivalente a AES de 256 bits con HMAC-SHA2-256, modo UDP
- El rendimiento se midió utilizando
iperf3, mostrando el resultado medio durante 30 minutos.
Teóricamente, después de la integración en la pila de red, WireGuard debería funcionar aún más rápido. Pero en la práctica, esto no necesariamente será así debido a la transición a las funciones criptográficas integradas en el núcleo Crypto API. Puede que no todas ellas estén aún optimizadas al nivel de rendimiento nativo de WireGuard.
Desde mi perspectiva, WireGuard es ideal para el usuario. Todas las soluciones de bajo nivel están establecidas en la especificación, por lo que el proceso de preparación de una infraestructura VPN típica lleva solo unos minutos. Es prácticamente imposible cometer errores en la configuración, — en Habr en 2018. — El proceso de instalación en el sitio oficial, y quiero destacar especialmente el excelente . Esta simplicidad de uso y la compacidad de la base de código se lograron al renunciar a la distribución de claves. Aquí no hay un sistema complejo de certificados y todo ese horror corporativo; las claves de cifrado cortas se distribuyen de manera similar a las claves SSH.
El proyecto WireGuard ha estado en desarrollo desde 2015, ha pasado auditoría y . El soporte para WireGuard está integrado en NetworkManager y systemd, y los parches para el núcleo forman parte de las distribuciones básicas de Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph y ALT.
Fuente: habr.com
