Опубліковано 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