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

Автор soner30, 01-07-2016, 19:39:27

0 Пользователей и 1 Гость просматривают эту тему.

Вниз

soner30

В списке рассылки разработчиков ядра Linux представлена новая реализация виртуального интерфейса для создания шифрованных и аутентифицированных туннелей. Новый VPN-интерфейс развивается в рамках проекта WireGuard,
https://www.wireguard.io/

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

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

Для шифрования применяются
https://www.wireguard.io/protocol/
потоковый шифр ChaCha20
http://cr.yp.to/chacha.html
и алгоритм аутентификации сообщений (MAC) Poly1305,
http://cr.yp.to/mac.html
разработанные Дэниелом Бернштейном (Daniel J. Bernstein),
http://cr.yp.to/djb.html
Таней Ланге (Tanja Lange) и Питером Швабе (Peter Schwabe). Для генерации совместного секретного ключа применяется протокол Диффи-Хеллмана на эллиптических кривых в реализации Curve25519,
http://cr.yp.to/ecdh.html
предложенной Дэниелом Бернштейном. Для хэширования используются BLAKE2s (RFC7693) и SipHash24.
https://www.opennet.ru/opennews/art.shtml?num=35676
Для согласования ключей и соединения вместо собственного демона в пространстве пользователя применяется механизм Noise_IK из Noise Protocol Framework,
http://noiseprotocol.org/
похожий на поддержание authorized_keys в SSH, без усложнений в виде поддержки x509 и ASN.1. Передача данных осуществляется через инкапсуляцию в пакеты UDP.

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

Например, при тестировании  
https://www.wireguard.io/performance/
производительности 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 достаточно прост в настройке.
https://www.wireguard.io/quickstart/
Для создания туннелирующего интерфейса предлагается использовать штатную команду "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

Вверх