В рамках проекта WireGuard подготовлена новая реализация VPN для Linux

29 июня 2016 года

В списке рассылки разработчиков ядра Linux представлена новая реализация виртуального интерфейса для создания шифрованных и аутентифицированных туннелей. Новый VPN-интерфейс развивается в рамках проекта WireGuard, сочетающего применение проверенных современных методов шифрования с предоставлением минималистичной реализации (около 4000 строк кода), лишённой усложнений, наблюдаемых в таких системах, как xfrm и OpenVPN.

Отмечается, что продукт развивается уже несколько лет и прошёл стадию рецензирования применяемых криптографических методов, что позволяет начать его публичное продвижение в основной состав ядра. Проект позиционируется как многоплатформенный - после стабилизации реализации для Linux планируется создание вариантов и для других операционных систем. Автором проекта является Джейсон Доненфилд ( Jason A. Donenfeld), исследователь безопасности, возглавляющий компанию Edge Security. Код распространяется под лицензией GPLv2.

Для шифрования применяются потоковый шифр ChaCha20 и алгоритм аутентификации сообщений (MAC) Poly1305, разработанные Дэниелом Бернштейном ( Daniel J. Bernstein), Таней Ланге (Tanja Lange) и Питером Швабе (Peter Schwabe). Для генерации совместного секретного ключа применяется протокол Диффи-Хеллмана на эллиптических кривых в реализации Curve25519, предложенной Дэниелом Бернштейном. Для хэширования используются BLAKE2s (RFC7693) и SipHash24. Для согласования ключей и соединения вместо собственного демона в пространстве пользователя применяется механизм Noise_IK из Noise Protocol Framework, похожий на поддержание authorized_keys в SSH, без усложнений в виде поддержки x509 и ASN.1. Передача данных осуществляется через инкапсуляцию в пакеты UDP.

ChaCha20 и Poly1305 позиционируются как более быстрые и безопасные аналоги AES-256-CTR и HMAC, программная реализация которых позволяет добиться фиксированного времени выполнения без задействования специальной аппаратной поддержки. Повышение производительности обусловлено не только применением более быстрых алгоритмов, но и решением не использовать предоставляемый ядром crypto API (достаточно медленный из-за дополнительной буферизации), вместо которого в WireGuard задействованы собственные реализации примитивов ChaCha20, Poly1305, Blake2s и Curve25519.

Например, при тестировании производительности WireGuard продемонстрировал в 4 раза более высокую пропускную способность и в 3.8 раз более высокую отзывчивость, по сравнению с OpenVPN (256-bit AES c HMAC-SHA2-256). WireGuard также опережает по производительности IPsec (256-bit ChaCha20+Poly1305 и AES-256-GCM-128), но существенный выигрыш для IPsec заметен в основном в области снижения задержек.

В WireGuard применяется концепция маршрутизации по ключам шифрования, которая подразумевает привязку к каждому сетевому интерфейсу закрытого ключа и применение для связывания открытых ключей. Обмен открытыми ключами для установки соединения напоминает подход, применяемый в SSH. Поддерживается смена IP-адреса VPN-сервера (руминг) без разрыва соединения и автоматической перенастройкой клиента.

WireGuard достаточно прост в настройке. Для создания туннелирующего интерфейса предлагается использовать штатную команду "ip link", а для генерации ключей и настройки параметров VPN предлагается специальная утилита "wg". Например:


ip link add dev wg0 type wireguard
ip address add dev wg0 192.168.2.1 peer 192.168.2.2
wg genkey privatekey
wg pubkey publickey
wg set wg0 listen-port 2345 private-key /path/to/private-key \
peer ABCDEF... allowed-ips 192.168.88.0/24 endpoint 209.202.254.14:8172
ip link set up dev wg0

Для упрощения настройки предлагается использовать файлы конфигурации ("wg setconf wg0 myconfig.conf"). Пример конфигурации сервера:


[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 41414

[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.192.122.3/32, 10.192.124.1/24

[Peer]
PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
AllowedIPs = 10.192.122.4/32, 192.168.0.0/16

[Peer]
PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
AllowedIPs = 10.10.10.230/32

Пример конфигурации клиента:


[Interface]
PrivateKey = gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE=
ListenPort = 21841

[Peer]
PublicKey = HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=
Endpoint = 192.95.5.69:41414
AllowedIPs = 0.0.0.0/0

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «В рамках проекта WireGuard подготовлена новая реализация VPN для Linux», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.