У ядро ​​Linux 5.6 увімкнули VPN WireGuard

Сьогодні Лінус переніс до себе гілку net-next із VPN-інтерфейсами WireGuard. Про цю подію повідомили у списку розсилки WireGuard.

У ядро ​​Linux 5.6 увімкнули VPN WireGuard

На даний момент продовжується збір коду для нового ядра Linux 5.6. WireGuard – швидкий VPN нового покоління, в якому реалізована сучасна криптографія. Він спочатку розроблявся як простіша і зручніша альтернатива існуючим VPN. Автор - канадський спеціаліст з інформаційної безпеки Джейсон Доненфілд (Jason A. Donenfeld). У серпні 2018 року WireGuard удостоївся похвали від Лінуса Торвальдса. Приблизно тоді почалася робота з включення VPN в ядро ​​Linux. Процес трохи затягнувся.

«Бачу, що Джейсон зробив пул-реквест для включення WireGuard у ядро, — писав Лінус 2 серпня 2018 року. — Чи можу я просто ще раз заявити про свою любов до цього VPN і сподіватися на швидке злиття? Може, код і не ідеальний, але я переглянув його, і в порівнянні з жахами OpenVPN та IPSec, це справжній витвір мистецтва».

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

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

А сьогодні 29 січня 2020 року зміни пішли до Лінуса для включення до ядра.

У ядро ​​Linux 5.6 увімкнули VPN WireGuard

Заявлені переваги WireGuard над іншими VPN рішеннями:

  • Простий у використанні.
  • Використовує сучасну криптографію: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF і т.д.
  • Компактний код, що читається, простіше досліджувати на вразливості.
  • Висока продуктивність.
  • Чітка та опрацьована специфікація.

Вся основна логіка WireGuard займає менше ніж 4000 рядків коду, тоді як OpenVPN та IPSec це сотні тисяч рядків.

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

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

Результати тестів продуктивності з офіційного сайту:

Пропускна спроможність (мегабіт/с)
У ядро ​​Linux 5.6 увімкнули VPN WireGuard

Пінг (мс)
У ядро ​​Linux 5.6 увімкнули VPN WireGuard

Тестова конфігурація:

  • Intel Core i7-3820QM та Intel Core i7-5200U
  • Гігабітні карти Intel 82579LM та Intel I218LM
  • Linux 4.6.1
  • Конфігурація WireGuard: 256-бітний ChaCha20 з Poly1305 для MAC
  • Перша конфігурація IPsec: 256-бітовий ChaCha20 з Poly1305 для MAC
  • Друга конфігурація IPsec: AES-256-GCM-128 (з AES-NI)
  • Конфігурація OpenVPN: еквівалентний шифронабір 256-бітного AES з HMAC-SHA2-256, режим UDP
  • Продуктивність замірялася за допомогою iperf3показаний середній результат за 30 хвилин.

Теоретично після інтеграції в мережевий стек WireGuard повинен працювати ще швидше. Але насправді це не обов'язково буде так через переход на вбудовані в ядро ​​криптографічні функції Crypto API. Можливо, не всі ще оптимізовані до рівня швидкодії нативного WireGuard.

«На мій погляд, WireGuard взагалі ідеальний для користувача. Усі низькорівневі рішення прийняті у специфікації, тому процес підготовки типової VPN інфраструктури займає лише кілька хвилин. Наплутати в конфігурації практично неможливо, писали на Хабре у 2018 році. - Процес встановлення детально описаний на офіційному сайті, окремо хочеться відзначити відмінну підтримку OpenWRT. Такої простоти використання та компактності кодової бази вдалося досягти за рахунок відмови від дистрибуції ключів. Тут немає складної системи сертифікатів і всього цього корпоративного страху, короткі ключі шифрування поширюються приблизно як SSH-ключі.

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

Джерело: habr.com

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