Джейсон Доненфилд (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, която е адаптирана за работа с ядрени единици и мрежовия стек NDIS на Windows. В сравнение с реализацията 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
