Hace poco se dio a conocer información de que el arbol de FreeBSD se ha modificado con una nueva implementación de VPN WireGuard basada en el código del módulo del kernel preparado conjuntamente por los equipos de desarrollo centrales de FreeBSD y WireGuard con la participación del autor de VPN WireGuard y un conocido desarrollador de GDB y FreeBSD
Antes de aceptar el código, se realizó una revisión completa de los cambios con el apoyo de FreeBSD Foundation, durante la cual también se analizó la interacción del controlador con el resto de los subsistemas del kernel y la posibilidad de utilizar las primitivas criptográficas proporcionadas.
Para usar los algoritmos criptográficos requeridos por el controlador, se amplió la API del subsistema criptográfico del kernel de FreeBSD, a la que se agregó un enlace que permite usar algoritmos no admitidos en FreeBSD a través de la API criptográfica estándar, utilizando la implementación de los algoritmos necesarios de la biblioteca libsodium.
De los algoritmos integrados en el controlador, solo queda el código para calcular los hashes de Blake2, ya que la implementación de este algoritmo proporcionada en FreeBSD está vinculada a un tamaño de hash fijo.
Además, durante el proceso de revisión, se llevó a cabo la optimización del código, que permitió aumentar la eficiencia de la distribución de carga en las CPU multinúcleo (se garantizó el equilibrio uniforme del enlace de las tareas de cifrado y descifrado de paquetes a los núcleos de la CPU).
Como resultado, la sobrecarga de procesamiento de paquetes se aproximó a la implementación del controlador para Linux. El código también ofrece la posibilidad de utilizar el controlador ossl para acelerar las operaciones de cifrado.
A diferencia del intento anterior de integrar WireGuard en FreeBSD, la nueva implementación usa la utilidad stock wg, en lugar de una versión modificada de ifconfig, que permitió una configuración unificada entre Linux y FreeBSD. La utilidad wg, así como el controlador, están incluidos en las fuentes de FreeBSD, lo que es posible gracias a un cambio de licencia en el código wg (el código ahora está disponible bajo las licencias MIT y GPL).
El último intento de incluir WireGuard en FreeBSD se realizó en 2020, pero terminó en un escándalo, como resultado del cual se eliminó el código ya agregado debido a la baja calidad, manejo descuidado del búfer, uso de stubs en lugar de controles, implementación incompleta del protocolo y la violación de la licencia GPL.
Para quienes aún desconocen de VPN WireGuard, deben saber que este se implementa sobre la base de métodos de encriptación modernos, proporciona un rendimiento muy alto, es fácil de usar, no presenta complicaciones y ha demostrado su valía en una serie de grandes implementaciones que procesan grandes cantidades de tráfico. El proyecto se viene desarrollando desde 2015, pasó la auditoría y verificación formal de los métodos de encriptación utilizados. WireGuard utiliza el concepto de enrutamiento de clave de cifrado, que implica vincular una clave privada a cada interfaz de red y usar claves públicas para vincular.
El intercambio de claves públicas para establecer una conexión es similar a SSH. Para negociar claves y conectarse sin ejecutar un demonio de espacio de usuario separado, se utiliza el mecanismo Noise_IK de Noise Protocol Framework, similar a mantener las claves_autorizadas en SSH. La transmisión de datos se realiza mediante encapsulación en paquetes UDP. Admite cambiar la dirección IP del servidor VPN (roaming) sin interrumpir la conexión con la reconfiguración automática del cliente.
El cifrado utiliza el cifrado de flujo ChaCha20 y el algoritmo de autenticación de mensajes Poly1305 (MAC) desarrollado por Daniel J. Bernstein , Tanja Lange y Peter Schwabe. ChaCha20 y Poly1305 se posicionan como análogos más rápidos y seguros de AES-256-CTR y HMAC, cuya implementación de software permite lograr un tiempo de ejecución fijo sin involucrar soporte de hardware especial. El protocolo Diffie-Hellman de curva elíptica en la implementación Curve25519, también propuesta por Daniel Bernstein, se utiliza para generar una clave secreta compartida. Para el hashing se utiliza el algoritmo BLAKE2s (RFC7693).
Finalmente, cabe mencionar sobre la modificación, que una vez que se acepta un controlador en FreeBSD (sys/dev/wg), se desarrollará y mantendrá en el repositorio de FreeBSD a partir de ahora.
Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.
from Desde Linux https://ift.tt/5icAMx9
via IFTTT