Статистика
Онлайн всего: 1 Гостей: 1 Пользователей: 0
|
Главная » 2016 » Июнь » 30 » В рамках проекта WireGuard подготовлена новая реализация VPN для Linux
00:47 В рамках проекта WireGuard подготовлена новая реализация VPN для Linux |
В списке рассылки разработчиков ядра 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 < 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
|
Просмотров: 193 |
Добавил: muge
| Рейтинг: 0.0/0 |
|
|