En ny VPN-implementation, WireGuard, har lagts till i FreeBSD-kodbasen.

В дерево исходных текстов 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.

Låt oss påminna dig om att VPN WireGuard är implementerat på basis av moderna krypteringsmetoder, ger mycket hög prestanda, är lätt att använda, fri från komplikationer och har bevisat sig i ett antal stora installationer som bearbetar stora trafikvolymer. Projektet har utvecklats sedan 2015 och har genomgått en revision och formell verifiering av de använda krypteringsmetoderna. WireGuard använder konceptet med krypteringsnyckeldirigering, vilket innebär att man fäster en privat nyckel till varje nätverksgränssnitt och använder den för att binda de offentliga nycklarna.

Publika nycklar utbyts för att upprätta en anslutning på liknande sätt som SSH. För att förhandla om nycklar och ansluta utan att köra en separat demon i användarutrymmet, används Noise Protocol Frameworks Noise_IK-mekanism, liknande att underhålla auktoriserade_nycklar i SSH. Dataöverföring sker genom inkapsling i UDP-paket. Den stöder ändring av IP-adressen för VPN-servern (roaming) utan att koppla från anslutningen med automatisk klientomkonfiguration.

Kryptering använder ChaCha20-strömchifferet och Poly1305-meddelandeautentiseringsalgoritmen (MAC), utvecklad av Daniel J. Bernstein, Tanja Lange och Peter Schwabe. ChaCha20 och Poly1305 är positionerade som snabbare och säkrare analoger till AES-256-CTR och HMAC, vars mjukvaruimplementering gör det möjligt att uppnå en fast exekveringstid utan användning av speciellt hårdvarustöd. För att generera en delad hemlig nyckel används det elliptiska kurvan Diffie-Hellman-protokollet i Curve25519-implementeringen, också föreslagen av Daniel Bernstein. BLAKE2s algoritm (RFC7693) används för hash.

Källa: opennet.ru

Lägg en kommentar