Nova implementacija VPN WireGuard dodata je FreeBSD kodnoj bazi

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

Podsjetimo da je VPN WireGuard implementiran na bazi modernih metoda enkripcije, pruža vrlo visoke performanse, jednostavan je za korištenje, lišen komplikacija i dokazao se u nizu velikih implementacija koje obrađuju velike količine prometa. Projekat se razvija od 2015. godine, prošao je reviziju i formalnu verifikaciju korišćenih metoda šifrovanja. WireGuard koristi koncept rutiranja ključeva za šifriranje, koji uključuje vezivanje privatnog ključa za svako mrežno sučelje i korištenje javnih ključeva za povezivanje.

Razmjena javnih ključeva za uspostavljanje veze slična je SSH-u. Za pregovaranje o ključevima i povezivanje bez pokretanja zasebnog demona korisničkog prostora, koristi se mehanizam Noise_IK okvira Noise Protocol, slično održavanju authorized_keys u SSH-u. Prijenos podataka se vrši enkapsulacijom u UDP pakete. Podržava promjenu IP adrese VPN servera (roming) bez prekida veze uz automatsku rekonfiguraciju klijenta.

Enkripcija koristi ChaCha20 stream šifru i Poly1305 algoritam za provjeru autentičnosti poruke (MAC) koji su razvili Daniel J. Bernstein, Tanja Lange i Peter Schwabe. ChaCha20 i Poly1305 su pozicionirani kao brži i sigurniji analozi AES-256-CTR i HMAC, čija softverska implementacija omogućava postizanje fiksnog vremena izvršenja bez uključivanja posebne hardverske podrške. Za generiranje zajedničkog tajnog ključa koristi se Diffie-Hellmanov protokol eliptičke krive u implementaciji Curve25519, koji je također predložio Daniel Bernstein. Za heširanje se koristi BLAKE2s algoritam (RFC7693).

izvor: opennet.ru

Dodajte komentar