Нова VPN реализация, WireGuard, е добавена към кодовата база на FreeBSD.

Дървото на изходния код на FreeBSD е актуализирано с нова реализация на VPN WireGuard, базирана на код на модул на ядрото, създаден съвместно от основните екипи за разработка на FreeBSD и WireGuard с приноса на Джейсън А. Доненфелд, автор на VPN WireGuard, и Джон Х. Болдуин ), добре известен разработчик на GDB и FreeBSD, който внедри поддръжка за SMP и NUMA в ядрото на FreeBSD в началото на 2000-те. След като драйверът бъде приет във FreeBSD (sys/dev/wg), неговата разработка и поддръжка отсега нататък ще се извършват в хранилището на FreeBSD.

Преди кодът да бъде приет, беше извършен пълен преглед на промените с подкрепата на FreeBSD Foundation, по време на който също беше анализирано взаимодействието на драйвера с останалите подсистеми на ядрото и възможността за използване на криптографски примитиви, предоставени от ядрото беше оценено.

За да се използват криптографските алгоритми, изисквани от драйвера, API на крипто-подсистемата на ядрото на FreeBSD беше разширен, към който беше добавен сноп, който позволява използването на алгоритми, които не се поддържат във FreeBSD чрез стандартния крипто-API, използвайки изпълнението на необходимите алгоритми от библиотеката libsodium. От алгоритмите, вградени в драйвера, е оставен само кодът за изчисляване на Blake2 хешове, тъй като изпълнението на този алгоритъм, предоставено във FreeBSD, е обвързано с фиксиран размер на хеша.

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

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

Спомнете си, че VPN WireGuard е внедрен на базата на съвременни методи за криптиране, осигурява много висока производителност, лесен е за използване, лишен от усложнения и се е доказал в редица големи реализации, които обработват големи количества трафик. Проектът се развива от 2015 г., премина одит и официална проверка на използваните методи за криптиране. WireGuard използва концепцията за маршрутизиране на ключове за криптиране, което включва свързване на частен ключ към всеки мрежов интерфейс и използване на публични ключове за свързване.

Обменът на публични ключове за установяване на връзка е подобен на SSH. За договаряне на ключове и свързване без стартиране на отделен демон в потребителското пространство се използва механизмът Noise_IK на Noise Protocol Framework, подобно на поддържането на authorized_keys в SSH. Предаването на данни се осъществява чрез капсулиране в UDP пакети. Поддържа промяна на IP адреса на VPN сървъра (роуминг) без прекъсване на връзката с автоматично преконфигуриране на клиента.

Шифроването използва шифъра на потока ChaCha20 и алгоритъма за удостоверяване на съобщения (MAC) Poly1305, разработен от Daniel J. Bernstein, Tanja Lange и Peter Schwabe. ChaCha20 и Poly1305 се позиционират като по-бързи и по-сигурни аналози на AES-256-CTR и HMAC, чиято софтуерна реализация позволява постигане на фиксирано време за изпълнение без използване на специална хардуерна поддръжка. За генериране на споделен таен ключ се използва протоколът Diffie-Hellman с елиптична крива в изпълнението Curve25519, също предложен от Daniel Bernstein. За хеширане се използва алгоритъмът BLAKE2s (RFC7693).

Източник: opennet.ru

Добавяне на нов коментар