Jason A. Donenfeld, autor de VPN WireGuard, presentó el proyecto WireGuardNT, que desarrolla un puerto de alto rendimiento de VPN WireGuard para el núcleo de Windows, compatible con Windows 7, 8, 8.1 y 10, y que soporta arquitecturas AMD64, x86, ARM64 y ARM. El código de implementación se distribuye bajo la licencia GPLv2. El nuevo controlador ya está incluido en el cliente de WireGuard para Windows, pero actualmente está marcado como experimental y no activado por defecto.
El puerto se basa en una base de código probada de la implementación principal de WireGuard para el núcleo de Linux, que ha sido adaptada para utilizar entidades del núcleo de Windows y la pila de red NDIS. En comparación con la implementación anteriormente disponible para Windows, wireguard-go, que funciona en espacio de usuario y utiliza la interfaz de red Wintun, WireGuardNT presenta una mejora significativa en el rendimiento al eliminar las operaciones de conmutación de contexto y la copia de contenido de paquetes del núcleo al espacio de usuario. Al igual que en las implementaciones para Linux, OpenBSD y FreeBSD, en WireGuardNT toda la lógica de procesamiento del protocolo opera directamente en el nivel de la pila de red.
A pesar de que las optimizaciones específicas aún no se han realizado, WireGuardNT ya ha permitido alcanzar un rendimiento máximo de transmisión de datos de 7.5Gbps en el entorno de prueba existente con Ethernet. En sistemas de usuario reales con Wi-Fi, el rendimiento es notablemente inferior, pero no difiere mucho de la transmisión directa de datos. Por ejemplo, en un sistema con la tarjeta inalámbrica Intel AC9560, el ancho de banda sin WireGuard fue de 600Mbps y con WireGuardNT también se mantuvo en 600Mbps, mientras que al utilizar wireguard-go/Wintun fue de 95Mbps.
Recordemos que VPN WireGuard se basa en métodos de cifrado modernos, ofrece un rendimiento muy alto, es fácil de usar, libre de complicaciones y ha demostrado ser eficaz en varias implementaciones importantes que manejan grandes volúmenes de tráfico. El proyecto ha estado en desarrollo desde 2015, ha pasado una auditoría y una verificación formal de los métodos de cifrado utilizados. WireGuard aplica el concepto de enrutamiento basado en claves de cifrado, lo que implica vincular una clave privada a cada interfaz de red y utilizarla para relacionar las claves públicas.
El intercambio de claves públicas para establecer conexiones se realiza de manera similar a SSH. Para la negociación de claves y la conexión sin iniciar un demonio separado en el espacio de usuario, se utiliza el mecanismo Noise_IK del Noise Protocol Framework, similar al mantenimiento de authorized_keys en SSH. La transmisión de datos se lleva a cabo mediante encapsulación en paquetes UDP. Se admite el cambio IP del servidor VPN (roaming) sin interrumpir la conexión con la reconfiguración automática del cliente.
Para el cifrado se utiliza el cifrado de flujo ChaCha20 y el algoritmo de autenticación de mensajes (MAC) Poly1305, desarrollados por Daniel Bernstein, Tanja Lange y Peter Schwabe. ChaCha20 y Poly1305 se posicionan como alternativas más rápidas y seguras al AES-256-CTR y HMAC, cuya implementación de software permite lograr un tiempo de ejecución fijo sin requerir soporte hardware especializado. Para la generación de la clave secreta compartida se aplica el protocolo Diffie-Hellman en curvas elípticas en la implementación Curve25519, también propuesta por Daniel Bernstein. Se utiliza el algoritmo de hash BLAKE2s (RFC7693).
Fuente: opennet.ru
