Апублікаваны VPN WireGuard для Windows і WireGuardNT 1.0

Джэйсан Даненфілд (Jason A. Donenfeld), аўтар VPN WireGuard, прадставіў першы значны рэліз кліенцкага ПА WireGuard для Windows 1.0, а таксама драйвераў WireGuardNT 1.0 з портам VPN WireGuard для ядра Windows 10 і 11, які падтрымлівае архітэктуры AMD64, x86 і ARM64. Код кампанентаў для ядра Windows распаўсюджваецца пад ліцэнзіяй GPLv2, а кліенцкага ПЗ пад ліцэнзіяй MIT.

Порт заснаваны на кодавай базе асноўнай рэалізацыі WireGuard для ядра Linux, якая была перакладзена на выкарыстанне сутнасцяў ядра Windows і сеткавага стэка NDIS. У параўнанні з рэалізацыяй wireguard-go, якая працуе ў прасторы карыстача і выкарыстоўвалай сеткавы інтэрфейс Wintun, WireGuardNT адрозніваецца істотным падвышэннем прадукцыйнасці за рахунак выключэння аперацый пераключэння кантэксту і капіяванні змесціва пакетаў з ядра ў прастору карыстача. Па аналогіі з рэалізацыямі для Linux, OpenBSD і FreeBSD у WireGuardNT уся логіка апрацоўкі пратаколу працуе непасрэдна на ўзроўні сеткавага стэка.

Версія 1.0 адзначана як своеасаблівы рубеж, які адзначыў рашэнне шэрагу праблем і выкананне вызначаных задач, такіх як: задзейнічанне функцыі NdisWdfGetAdapterContextFromAdapterHandle() замест меней бяспечнага захоўвання стану драйвера ў поле Reserved і выкарыстанні недакументаваных зрушэнняў; карэктнае і аператыўнае адсочванне памеру MTU (Maximum Transmission Unit) праз перахоп сістэмных выклікаў; задзейнічанне ў кодзе стандарту C23.

Нагадаем, што 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