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

Решение WireGuard 1.0 для Windows основан на кодовой базе основной реализации WireGuard для ядра Linux, которая была переведена на использование сущностей ядра Windows и сетевого стека NDIS.

По информации OpenNET, по сравнению с реализацией решения wireguard-go, работающего в пространстве пользователя и использующей сетевой интерфейс Wintun, проект WireGuardNT отличается существенным повышением производительности за счёт исключения операций переключения контекста и копирования содержимого пакетов из ядра в пространство пользователя. По аналогии с реализациями для Linux, OpenBSD и FreeBSD в сборке WireGuardNT вся логика обработки протокола работает непосредственно на уровне сетевого стека.
Версия WireGuard 1.0 для Windows отмечена как своеобразный рубеж, ознаменовавший решение ряда проблем и выполнение намеченных задач, таких как: задействование функции NdisWdfGetAdapterContextFromAdapterHandle() вместо менее безопасного хранения состояния драйвера в поле Reserved и использования недокументированных смещений; корректное и оперативное отслеживания размера MTU (Maximum Transmission Unit) через перехват системных вызовов; задействование в коде стандарта C23.
Проект WireGuard реализован на основе современных методов шифрования. Решение обеспечивает очень высокую производительность, просто в использовании, лишёно усложнений и хорошо зарекомендовало себя в ряде крупных внедрений, обрабатывающих большие объёмы трафика. Проект развивается с 2015 года, прошёл аудит и формальную верификацию применяемых методов шифрования. В WireGuard применяется концепция маршрутизации по ключам шифрования, которая подразумевает привязку к каждому сетевому интерфейсу закрытого ключа и применение для связывания открытых ключей.
Обмен открытыми ключами для установки соединения в WireGuard производится по аналогии с SSH. Для согласования ключей и соединения без запуска отдельного демона в пространстве пользователя применяется механизм Noise_IK из Noise Protocol Framework, похожий на поддержание authorized_keys в SSH. Передача данных осуществляется через инкапсуляцию в пакеты UDP. Поддерживается смена IP‑адреса VPN‑сервера (роуминг) без разрыва соединения с автоматической перенастройкой клиента.
Для шифрования в WireGuard используется потоковый шифр ChaCha20 и алгоритм аутентификации сообщений (MAC) Poly1305, разработанные Дэниелом Бернштейном (Daniel J. Bernstein), Таней Ланге (Tanja Lange) и Питером Швабе (Peter Schwabe). ChaCha20 и Poly1305 позиционируются как более быстрые и безопасные аналоги AES-256-CTR и HMAC, программная реализация которых позволяет добиться фиксированного времени выполнения без задействования специальной аппаратной поддержки. Для генерации совместного секретного ключа применяется протокол Диффи‑Хеллмана на эллиптических кривых в реализации Curve25519, также предложенной Дэниелом Бернштейном. Для хеширования используются алгоритм BLAKE2s (RFC7693).
ссылка на оригинал статьи https://habr.com/ru/articles/1025142/