для местного применения

компьютерные и околокомпьютерные темы => администрирование => Тема начата: qwertyuser от Июнь 30, 2016, 11:10:34 am

Название: В рамках проекта WireGuard подготовлена новая реализация VPN для Linux
Отправлено: qwertyuser от Июнь 30, 2016, 11:10:34 am
В списке рассылки разработчиков ядра Linux представлена новая реализация виртуального интерфейса для создания шифрованных и аутентифицированных туннелей. Новый VPN-интерфейс развивается в рамках проекта WireGuard (https://www.wireguard.io/), сочетающего применение проверенных современных методов шифрования с предоставлением минималистичной реализации (около 4000 строк кода), лишённой усложнений, наблюдаемых в таких системах, как xfrm и OpenVPN.

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

елом Бернштейном (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 < privatekey > 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

opennet.ru (http://opennet.ru)