Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Сегодня Линус перенёс к себе ветку net-next с VPN-интерфейсами WireGuard. Об этом событии сообщили в списке рассылки 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 года изменения ушли к Линусу для включения в ядро.
Заявленные преимущества WireGuard над другими VPN решениями:
Вся основная логика WireGuard занимает менее 4000 строк кода, тогда как OpenVPN и IPSec это сотни тысяч строк.
Результаты тестов производительности с официального сайта:
Пропускная способность (мегабит/с)
Пинг (мс)
Теоретически, после интеграции в сетевой стек WireGuard должен работать ещё быстрее. Но в реальности это не обязательно будет так из-за перехода на встроенные в ядро криптографические функции Crypto API. Возможно, не все из них ещё оптимизированы до уровня быстродействия нативного WireGuard.
Проект WireGuard развивается с 2015 года, он прошёл аудит и формальную верификацию. Поддержка WireGuard интегрирована в NetworkManager и systemd, а патчи для ядра входят в базовый состав дистрибутивов Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph и ALT.
В данный момент продолжается сбор кода для нового ядра 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 года изменения ушли к Линусу для включения в ядро.
Заявленные преимущества 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, разработанные Дэниелом Бернштейном (Daniel J. Bernstein), Таней Ланге (Tanja Lange) и Питером Швабе (Peter Schwabe). ChaCha20 и Poly1305 позиционируются как более быстрые и безопасные аналоги AES-256-CTR и HMAC, программная реализация которых позволяет добиться фиксированного времени выполнения без задействования специальной аппаратной поддержки. Для генерации совместного секретного ключа применяется протокол Диффи-Хеллмана на эллиптических кривых в реализации Curve25519, также предложенной Дэниелом Бернштейном. Для хеширования используются алгоритм BLAKE2s (RFC7693)».
Результаты тестов производительности с официального сайта:
Пропускная способность (мегабит/с)
Пинг (мс)
Тестовая конфигурация:
- 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.