Джейсон Доненфилд (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, разработени от Даниел Бернщайн, Таня Ланге и Питър Швабе. ChaCha20 и Poly1305 се позиционират като по-бързи и безопасни аналози на AES-256-CTR и HMAC, чиято софтуерна реализация позволява постигане на фиксирано време за изпълнение без специална хардуерна поддръжка. За генериране на споделен секретен ключ се прилага протоколът на Диффи-Хелман с елиптични криви в реализацията Curve25519, също предложена от Даниел Бернщайн. За хеширане се използва алгоритъмът BLAKE2s (RFC7693).
Източник: opennet.ru
