У кодавую базу FreeBSD дададзена новая рэалізацыя VPN WireGuard

У дрэва зыходных тэкстаў FreeBSD прыняты змены з новай рэалізацыяй VPN WireGuard, заснаванай на кодзе модуля ядра, сумесна падрыхтаванага асноўнымі камандамі распрацоўнікаў FreeBSD і WireGuard пры ўдзеле Джэйсана Даненфілда (Jason A. Donenfeld), аўтара VPN WireGuard, і Джона Болдуіна. ), вядомага распрацоўніка 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. Для ўзгаднення ключоў і злучэнні без запуску асобнага дэмана ў прасторы карыстача ўжываецца механізм 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, праграмная рэалізацыя якіх дазваляе дабіцца фіксаванага часу выканання без задзейнічання спецыяльнай апаратнай падтрымкі. Для генерацыі сумеснага сакрэтнага ключа ўжываецца пратакол Дыфі-Хеллмана на эліптычных крывых у рэалізацыі Curve25519, таксама прапанаванай Дэніелам Бернштэйнам. Для хэшавання выкарыстоўваюцца алгарытм BLAKE2s (RFC7693).

Крыніца: opennet.ru

Дадаць каментар