WireGuard проти OpenVPN: порівняння протоколів
WireGuard та OpenVPN — це два протоколи, які найчастіше пропонують споживчі VPN-сервіси. Ця стаття порівнює їх за криптографічним дизайном, продуктивністю, обсягом коду, сумісністю з платформами та операційними характеристиками — тими вимірами, які впливають на те, як сервіс насправді поводиться в реальній експлуатації.
Передісторія обох протоколів
OpenVPN був випущений у 2001 році й став де-факто стандартом у комерційних розгортаннях VPN. Це проєкт із відкритим кодом, написаний мовою C, який працює в просторі користувача та використовує бібліотеки OpenSSL або mbedTLS для криптографічних операцій. Його довговічність і гнучкість сформували великий набір функцій та широкий діапазон підтримуваних конфігурацій.
WireGuard значно новіший. Цей протокол уперше опублікували у 2016 році, а у 2020 році він був інтегрований у ядро Linux. Його спеціально розробили простішим за попередників: із меншим обсягом коду, обмеженим набором сучасних криптографічних примітивів і реалізацією на рівні ядра на платформах, які це підтримують. Автор протоколу, Джейсон А. Доненфельд, сформулював цілі дизайну навколо можливості перевірки та продуктивності, а не конфігурованості.
Криптографічний дизайн
Ці два протоколи суттєво відрізняються підходом до криптографії. WireGuard постачається з фіксованим набором алгоритмів; OpenVPN дає оператору змогу обирати з-поміж багатьох.
Фіксований набір WireGuard
WireGuard використовує єдиний набір шифрів на основі сучасних примітивів. Його складові — ChaCha20 для шифрування, Poly1305 для автентифікації, Curve25519 для обміну ключами, BLAKE2s для гешування та SipHash24 для балансування навантаження. Рукостискання забезпечує фреймворк Noise Protocol.
Фіксування набору має два наслідки. По-перше, воно усуває узгодження протоколу, яке історично було джерелом атак зниження версії в протоколах на основі TLS. По-друге, це означає, що оновлення криптографії потребує підвищення версії протоколу, а не зміни конфігурації.
Конфігурованість OpenVPN
OpenVPN підтримує багато варіантів шифрів через свою базову бібліотеку TLS. Поширені конфігурації включають AES-256-GCM для шифрування, SHA256 для автентифікації та ECDH для обміну ключами. Старіші розгортання OpenVPN можуть використовувати BF-CBC або AES-CBC з HMAC, які за сучасними стандартами значно слабші.
Гнучкість дозволяє OpenVPN підтримувати застарілих клієнтів, але це також означає, що для підтвердження використання надійних налаштувань у конкретному розгортанні потрібен аудит конфігурації.
Характеристики продуктивності
WireGuard зазвичай перевершує OpenVPN на тому самому обладнанні. Більшість різниці пояснюють два чинники.
По-перше, WireGuard працює в ядрі на Linux, macOS та Windows, що дозволяє уникнути накладних витрат на переміщення кожного пакета між ядром і простором користувача. Реалізація OpenVPN у просторі користувача є переносимою, але спричиняє витрати на перемикання контексту для кожного пакета.
По-друге, ChaCha20-Poly1305 добре підходить для процесорів, які не мають спеціалізованих інструкцій AES, що є поширеним на мобільних пристроях на базі ARM. OpenVPN зазвичай використовує AES, який швидший на обладнанні з AES-NI, але повільніший деінде.
На практиці WireGuard часто досягає вищої пропускної здатності, меншої затримки та зниженого використання процесора порівняно з OpenVPN на споживчих пристроях. Вплив на акумулятор мобільних пристроїв також зазвичай менший.
Обсяг коду та поверхня для аудиту
Розмір кодової бази приблизно корелює з обсягом зусиль, потрібних для її аудиту на вразливості. Еталонна реалізація WireGuard складається приблизно з чотирьох тисяч рядків коду. Реалізація в ядрі Linux порівнянна за обсягом.
OpenVPN, навпаки, налічує близько сімдесяти тисяч рядків і залежить від бібліотеки TLS — OpenSSL або mbedTLS, — яка додає ще кілька сотень тисяч рядків коду до межі довіри. Різниця в розмірі сама по собі не означає, що WireGuard безпечніший, але вона впливає на те, наскільки ретельно можна переглянути реалізацію.
Сумісність із платформами
Обидва протоколи широко підтримуються. WireGuard має офіційні реалізації для Linux (ядро та простір користувача), Windows, macOS, iOS, Android, FreeBSD та OpenBSD. Підтримка iOS, зокрема, добре інтегрована через фреймворк iOS Network Extension.
OpenVPN доступний практично на кожній платформі, включно зі старішими системами, на які WireGuard не був перенесений. Багато корпоративних мереж використовують OpenVPN заради сумісності із застарілою інфраструктурою.
Для нових розгортань на сучасних операційних системах WireGuard є більш прямолінійним вибором. Для середовищ, які потребують широкої сумісності — включно зі застарілими системами, вбудованими пристроями чи певними корпоративними продуктами, — OpenVPN залишається актуальним.
Модель конфігурації
Модель конфігурації WireGuard навмисно мінімалістична. Кожен вузол (peer) має ідентичність у вигляді відкритого ключа та список дозволених IP. Немає автентифікації на рівні користувача, немає стану сесії на сервері й немає узгодження keepalive. Протокол покладається на криптографічну ідентичність, а не на імена користувачів і паролі.
OpenVPN підтримує гнучкішу модель автентифікації. Доступні автентифікація на основі сертифікатів, автентифікація за іменем користувача та паролем, а також двофакторна автентифікація. Ця гнучкість корисна в корпоративних середовищах, де автентифікація інтегрована зі службами каталогів.
Для споживчих VPN-сервісів, де користувачів не потрібно ідентифікувати одне одному, простішої моделі WireGuard зазвичай достатньо.
Коли який обрати
Вибір між протоколами залежить від обмежень розгортання.
- WireGuard кращий, коли продуктивність, простота коду та сучасна криптографія є пріоритетами; коли цільові платформи мають нативну підтримку; і коли розгортання може прийняти фіксований набір шифрів.
- OpenVPN кращий, коли потрібна сумісність із застарілими системами; коли потрібна інтеграція з корпоративною автентифікацією; або коли розгортання має проходити через мережі, що обмежують трафік UDP (OpenVPN підтримує резервний перехід на TCP; WireGuard — ні).
Багато сучасних споживчих VPN-сервісів пропонують обидва протоколи й дають користувачеві змогу вибрати. Snap VPN, навпаки, використовує виключно WireGuard, інтегрований через фреймворк iOS Network Extension. Це рішення відображає принцип дизайну — скорочення поверхні реалізації до того, що необхідно для цільової платформи.
Для огляду того, як працюють VPN загалом, перегляньте наш вступ до VPN. Щодо практичного налаштування на iPhone дивіться посібник із конфігурації iOS.