S'ha afegit una nova implementació VPN, WireGuard, a la base de codi FreeBSD.

В дерево исходных текстов FreeBSD приняты изменения с новой реализацией VPN WireGuard, основанной на коде модуля ядра, совместно подготовленного основными командами разработчиков FreeBSD и WireGuard при участии Джейсона Доненфилда (Jason A. Donenfeld), автора VPN WireGuard, и Джона Болдуина (John H. Baldwin), известного разработчика GDB и FreeBSD, в начале 2000-х годов реализовавшего поддержку SMP и NUMA в ядре FreeBSD. После принятия драйвера в состав FreeBSD (sys/dev/wg), его разработка и сопровождение отныне будет вестись в репозитории FreeBSD.

Перед принятием кода при поддержке организации FreeBSD Foundation было проведено полное рецензирование изменений, в ходе которого также было проанализировано взаимодействие драйвера с остальными подсистемами ядра и оценена возможность задействования предоставляемых ядром криптографических примитивов.

Для использования необходимых драйверу криптографических алгоритмов было произведено расширение API криптоподсистемы ядра FreeBSD, в который была добавлена обвязка, позволяющая использовать через стандартный крипто-API не поддерживаемые во FreeBSD алгоритмы, используя реализацию необходимых алгоритмов из библиотеки libsodium. Из алгоритмов, встроенных в драйвер оставлен лишь код для вычисления хэшей Blake2, так как предоставляемая во FreeBSD реализация данного алгоритма завязана на фиксированный размер хэша.

Кроме того, в процессе рецензирования была проведена оптимизация кода, позволившая поднять эффективность распределения нагрузки на многоядерных CPU (обеспечена равномерная балансировка привязки задач шифрования и расшифровки пакета к ядрам CPU). В итоге накладные расходы при обработке пакетов были приближены к реализации драйвера для Linux. В коде также обеспечена возможность использования драйвера ossl для ускорения операций шифрования.

В отличие от прошлой попытки интеграции WireGuard во FreeBSD в новой реализации задействована штатная утилита wg, а не модифицированная версия ifconfig, что позволило унифицировать настройку в Linux и FreeBSD. Утилита wg как и драйвер включена в состав исходных текстов FreeBSD, что стало возможным благодаря изменению лицензии на код wg (код теперь доступен под лицензиями MIT и GPL). Прошлая попытка включения WireGuard в состав FreeBSD была предпринята в 2020 году, но завершилась скандалом, в результате которого уже добавленный код был удалён из-за низкого качества, безалаберной работы с буферами, использования заглушек вместо проверок, неполной реализации протокола и нарушения лицензии GPL.

Us recordem que VPN WireGuard s'implementa sobre la base de mètodes de xifratge moderns, ofereix un rendiment molt elevat, és fàcil d'utilitzar, lliure de complicacions i ha demostrat ser-ho en una sèrie de grans desplegaments que processen grans volums de trànsit. El projecte es desenvolupa des de l'any 2015, i s'ha sotmès a una auditoria i verificació formal dels mètodes d'encriptació utilitzats. WireGuard utilitza el concepte d'encaminament de claus de xifratge, que consisteix a adjuntar una clau privada a cada interfície de xarxa i utilitzar-la per vincular les claus públiques.

Les claus públiques s'intercanvien per establir una connexió de manera similar a SSH. Per negociar claus i connectar-se sense executar un dimoni separat a l'espai d'usuari, s'utilitza el mecanisme Noise_IK del Noise Protocol Framework, de manera similar a mantenir les claus_autoritzades a SSH. La transmissió de dades es realitza mitjançant l'encapsulació en paquets UDP. Admet canviar l'adreça IP del servidor VPN (roaming) sense desconnectar la connexió amb la reconfiguració automàtica del client.

El xifratge utilitza el xifratge de flux ChaCha20 i l'algorisme d'autenticació de missatges (MAC) Poly1305, desenvolupat per Daniel J. Bernstein, Tanja Lange i Peter Schwabe. ChaCha20 i Poly1305 es situen com a anàlegs més ràpids i segurs d'AES-256-CTR i HMAC, la implementació del programari dels quals permet aconseguir un temps d'execució fix sense l'ús de suport especial de maquinari. Per generar una clau secreta compartida, s'utilitza el protocol Diffie-Hellman de corba el·líptica a la implementació Curve25519, també proposada per Daniel Bernstein. L'algoritme BLAKE2s (RFC7693) s'utilitza per a l'hashing.

Font: opennet.ru

Afegeix comentari