FreeBSD код базасына VPN WireGuard жаңы ишке ашырылышы кошулду

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

Эске салсак, VPN WireGuard заманбап шифрлөө ыкмаларынын негизинде ишке ашырылган, өтө жогорку өндүрүмдүүлүктү камсыз кылат, колдонууга оңой, татаалдыктары жок жана чоң көлөмдөгү трафикти иштеткен бир катар ири ишке ашырууларда өзүн далилдеген. Долбоор 2015-жылдан бери иштеп келе жатат, колдонулган шифрлөө ыкмаларын текшерүүдөн жана расмий текшерүүдөн өткөн. WireGuard ар бир тармак интерфейсине жеке ачкычты байлоону жана байлоо үчүн ачык ачкычтарды колдонууну камтыган шифрлөө ачкычын багыттоо концепциясын колдонот.

Байланыш түзүү үчүн ачык ачкычтарды алмашуу SSHге окшош. Ачкычтарды сүйлөшүү жана өзүнчө колдонуучу-мейкиндик демонун иштетпестен туташуу үчүн, SSHда авторизацияланган_ачкычтарды сактоого окшош Noise Protocol Framework'дун Noise_IK механизми колдонулат. Маалыматтарды берүү UDP пакеттеринде инкапсуляция аркылуу ишке ашырылат. Кардардын автоматтык түрдө кайра конфигурацияланышы менен байланышты үзбөстөн VPN серверинин (роуминг) IP дарегин өзгөртүүнү колдойт.

Шифрлөө ChaCha20 агымынын шифрин жана Даниел Дж. Бернштейн, Таня Ланге жана Питер Швабе тарабынан иштелип чыккан Poly1305 билдирүүнүн аныктыгын текшерүү (MAC) алгоритмин колдонот. ChaCha20 жана Poly1305 AES-256-CTR жана HMACтин тезирээк жана коопсуз аналогдору катары жайгаштырылган, программалык камсыздоону ишке ашыруу атайын аппараттык колдоону талап кылбастан, белгиленген аткаруу убактысына жетүүгө мүмкүндүк берет. Бөлүшүлгөн жашыруун ачкычты түзүү үчүн Curve25519 ишке ашыруудагы эллиптикалык ийри Диффи-Хеллман протоколу, ошондой эле Даниел Бернштейн тарабынан сунушталган. Хэшинг үчүн BLAKE2s алгоритми (RFC7693) колдонулат.

Source: opennet.ru

Комментарий кошуу