Сегодня Линус перенёс к себе ветку net-next с VPN-интерфейсами WireGuard. Об этом событии ragihandin в списке рассылки 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 tê de подготовленные в WireGuard быстрые реализации алгоритмов ChaCha20 и Poly1305.
В конце концов, 9 декабря 2019 года Дэвид Миллер (David S. Miller), отвечающий за сетевую подсистему ядра Linux, qebûl kirin ji bo şaxa net-next patches с реализацией VPN-интерфейса от проекта WireGuard.
А сегодня 29 января 2020 года изменения ушли к Линусу для включения в ядро.
Feydeyên îdîaya WireGuard li ser çareseriyên VPN yên din:
Bikaranîna hêsan e.
Krîptografiya nûjen bikar tîne: Çarçoveya protokola deng, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, hwd.
Koda xwendî ya kompakt, lêkolîna ji bo qelsiyan hêsantir e.
Вся основная логика WireGuard занимает менее 4000 строк кода, тогда как OpenVPN и IPSec это сотни тысяч строк.
«В WireGuard применяется концепция маршрутизации по ключам шифрования, которая подразумевает привязку к каждому сетевому интерфейсу закрытого ключа и применение для связывания открытых ключей. Обмен открытыми ключами для установки соединения производится по аналогии с SSH. Для согласования ключей и соединения без запуска отдельного демона в пространстве пользователя применяется механизм Noise_IK из Çarçoveya Protokola Deng, похожий на поддержание authorized_keys в SSH. Передача данных осуществляется через инкапсуляцию в пакеты UDP. Поддерживается смена IP-адреса VPN-сервера (роуминг) без разрыва соединения с автоматической перенастройкой клиента, — ew dinivîse: Opennet.
Ji bo şîfrekirinê bikar anîn ji hêla şîfreya stream ChaCha20 û algorîtmaya rastkirina peyamê (MAC) Poly1305, ji hêla Daniel Bernstein ve hatî çêkirin (Daniel J. Bernstein), Таней Ланге (Tanja Lange) и Питером Швабе (Peter Schwabe). ChaCha20 и Poly1305 позиционируются как более быстрые и безопасные аналоги AES-256-CTR и HMAC, программная реализация которых позволяет добиться фиксированного времени выполнения без задействования специальной аппаратной поддержки. Для генерации совместного секретного ключа применяется протокол Диффи-Хеллмана на эллиптических кривых в реализации Curve25519, di heman demê de ji hêla Daniel Bernstein ve hatî pêşniyar kirin. Algorîtmaya ku ji bo haşkirinê tê bikar anîn ev e BLAKE2s (RFC7693)".
Конфигурация 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 инфраструктуры занимает всего несколько минут. Напутать в конфигурации практически невозможно, — nivîsand на Хабре в 2018 году. — Процесс установки bi berfirehî hatiye vegotin li ser malpera fermî, ez dixwazim ji hev veqetandî balê bikim Piştgiriya OpenWRT. Такой простоты использования и компактности кодовой базы удалось достичь за счёт отказа от дистрибьюции ключей. Здесь нет сложной системы сертификатов и всего этого корпоративного ужаса, короткие ключи шифрования распространяются примерно как SSH-ключи».
Проект WireGuard развивается с 2015 года, он прошёл аудит и verastkirina fermî. Поддержка WireGuard интегрирована в NetworkManager и systemd, а патчи для ядра входят в базовый состав дистрибутивов Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph и ALT.