В рамках проекта WireGuard подготовлена новая реализация VPN для Linux
Отмечается, что продукт развивается уже несколько лет и прошёл стадию рецензирования применяемых криптографических методов, что позволяет начать его публичное продвижение в основной состав ядра. Проект позиционируется как многоплатформенный - после стабилизации реализации для 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 < 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
Источник: http://www.opennet.ru/opennews/art.shtml?num=44695
|
0 | Tweet | Нравится |
|