Джейсон Доненфилд (Jason A. Donenfeld), автор на VPN WireGuard, представи проектът WireGuardNT, който развива високопроизводителен порт на VPN WireGuard за ядрото на Windows, съвместим с Windows 7, 8, 8.1 и 10, и поддържащ архитектури AMD64, x86, ARM64 и ARM. Кодът на реализацията се разпространява под лицензия GPLv2. Новият драйвер вече е включен в състава на клиента WireGuard за Windows, но все още е отбелязан като експериментален и не е активиран по подразбиране.
Портът се базира на проверената кодова база на основната реализация на WireGuard за ядрото на Linux, която е адаптирана да използва ядрови сущности на Windows и мрежовия стек NDIS. В сравнение с предишната версия на wireguard-go за Windows, работеща в потребителското пространство и използваща мрежовия интерфейс Wintun, WireGuardNT предлага съществено повишаване на производителността чрез изключване на контекстните превключвания и копирането на съдържанието на пакети от ядрото в потребителското пространство. Подобно на реализациите за Linux, OpenBSD и FreeBSD, в WireGuardNT логиката за обработка на протоколи работи директно на нивото на мрежовия стек.
Въпреки че специфични оптимизации все още не са извършени, WireGuardNT вече е позволил постигането на пикова производителност на предаване на данни от 7.5Gbps в наличната тестова среда с Ethernet. В реални потребителски системи с Wi-Fi производителността е значително по-ниска, но не се различава много от директната предаване на данни. Например, в система с безжична карта Intel AC9560, пропускната способност без WireGuard беше 600Mbps, а с WireGuardNT също остана на ниво 600Mbps, докато при използване на wireguard-go/Wintun беше 95Mbps.
Напомняме, че 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
