VPN WireGuard прийнятий у гілку net-next і намічений для включення до ядра Linux 5.6

Девід Міллер (David S. Miller), що відповідає за мережну підсистему ядра Linux, ухвалив до складу гілки net-next патчі з реалізацією VPN-інтерфейсу від проекту WireGuard. На початку наступного року зміни, що накопичуються у гілці net-next, ляжуть в основу випуску ядра Linux 5.6.

Спроби просування коду WireGuard в основний склад ядра робилися останні кілька років, але залишалися без результату через прив'язку до власних реалізацій криптографічних функцій, які застосовувалися підвищення продуктивності. Спочатку ці функції були запропоновані для ядра як додатковий низькорівневий API Zinc, який згодом зміг би замінити штатний Crypto API.

Після переговорів на конференції Kernel Recipes, творці WireGuard у вересні ухвалили компромісне рішення перевести свої патчі на використання наявного в ядрі Crypto API, до якого розробники WireGuard мають претензії в галузі продуктивності та загальної безпеки. API Zinc вирішили продовжувати розвивати, але як окремий проект.

У листопаді розробники ядра пішли на компроміс у відповідь і погодилися перенести в основне ядро ​​частину коду Zinc. По суті, деякі компоненти Zinc будуть перенесені в ядро, але не як окремий API, а як частина підсистеми Crypto API. Наприклад, у Crypto API вже включені підготовлені у WireGuard швидкі реалізації алгоритмів ChaCha20 та Poly1305.

У зв'язку з майбутнім постачанням WireGuard в основному складі ядра, засновник проекту оголосив про реструктуризацію репозиторію. Для спрощення розробки на зміну монолітному репозиторію «WireGuard.git», який був розрахований на відокремлене існування, прийдуть три окремі репозиторії, які краще підходять для організації роботи з кодом в основному ядрі:

  • wireguard-linux.git - Повне дерево ядра зі змінами від проекту Wireguard, патчі з якого будуть рецензуватися для включення в ядро ​​і регулярно переноситись у гілки net/net-next.
  • wireguard-tools.git — репозиторій для утиліт, що запускаються в просторі користувача, і скриптів, таких як wg і wg-quick. Репозиторій можна використовувати для створення пакетів для дистрибутивів.
  • wireguard-linux-compat.git — репозиторій з варіантом модуля, що поставляється окремо від ядра і включає шар compat.h для забезпечення сумісності зі старими ядрами. Основна розробка вестиметься в репозиторії wireguard-linux.git, але поки що є можливість і потреба користувачів відокремлений варіант патчів також підтримуватиметься в робочому вигляді.

Нагадаємо, що VPN WireGuard реалізований на основі сучасних методів шифрування, забезпечує дуже високу продуктивність, простий у використанні, позбавлений ускладнень і добре зарекомендував себе у низці великих впроваджень, що обробляють великі обсяги трафіку. Проект розвивається з 2015 року, пройшов аудит та формальну верифікацію застосовуваних методів шифрування. Підтримка WireGuard вже інтегрована в NetworkManager і systemd, а патчі для ядра входять до базового складу дистрибутивів Нестабільний Debian, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Підграф и ALT.

У WireGuard застосовується концепція маршрутизації за ключами шифрування, яка передбачає прив'язку до кожного мережного інтерфейсу закритого ключа та застосування для зв'язування відкритих ключів. Обмін відкритими ключами для встановлення з'єднання здійснюється за аналогією з SSH. Для узгодження ключів та з'єднання без запуску окремого демона у просторі користувача застосовується механізм Noise_IK з Noise Protocol Framework, схожий на підтримку authorized_keys у SSH. Передача даних здійснюється через інкапсуляцію пакети UDP. Підтримується зміна IP-адреси VPN-сервера (роумінг) без розриву з'єднання та автоматичним перенастроюванням клієнта.

Для шифрування використовується потоковий шифр ChaCha20 та алгоритм аутентифікації повідомлень (MAC) Poly1305, розроблені Денієлом Бернштейном (Деніел Дж. Бернштейн), Танею Ланге
(Tanja Lange) та Пітером Швабе (Peter Schwabe). ChaCha20 і Poly1305 позиціонуються як більш швидкі та безпечні аналоги AES-256-CTR та HMAC, програмна реалізація яких дозволяє досягти фіксованого часу виконання без використання спеціальної апаратної підтримки. Для створення спільного секретного ключа застосовується протокол Діффі-Хеллмана на еліптичних кривих у реалізації Curve25519, також запропонованою Денієлом Бернштейном. Для хешування використовуються алгоритм BLAKE2s (RFC7693).

При тестуванні продуктивності WireGuard продемонстрував у 3.9 рази більш високу пропускну спроможність і в 3.8 разів більшу чуйність, порівняно з OpenVPN (256-bit AES c HMAC-SHA2-256). У порівнянні з IPsec (256-bit ChaCha20+Poly1305 та AES-256-GCM-128) у WireGuard спостерігається невелике випередження щодо продуктивності (13-18%) та зниження затримок (21-23%). Тести виконані при використанні швидких реалізацій алгоритмів шифрування, що розвиваються проектом — переклад на штатний Crypto API ядра можливо призведе до погіршення показників.

VPN WireGuard прийнятий у гілку net-next і намічений для включення до ядра Linux 5.6

Джерело: opennet.ru

Додати коментар або відгук