ANet: новый стек для защищённых туннелей с акцентом на приватность и устойчивость к блокировкам

github

В открытом доступе появился проект ANet, который его создатели позиционируют как альтернативный технологический стек для построения защищённых сетевых туннелей. Это решение предназначено для сценариев, где использование популярных инструментов, например WireGuard, по каким-либо причинам невозможно или нежелательно. Исходный код проекта, написанный с нуля на языке Rust, опубликован на платформе GitHub под разрешительной лицензией MIT. При этом разработчики отдельно оговорили важное ограничение: в проект запрещено интегрировать зависимости, распространяемые под лицензиями GPL 2.0 и GPL 3.0.

Авторы описывают архитектуру ANet как модель «сети друзей». В такой модели соединения устанавливаются исключительно между заранее известными и авторизованными участниками. Система сфокусирована на использовании современных криптографических примитивов и работает без обязательной постоянной привязки к центральному серверу. Документация упоминает режим под названием Dead Man's Hand, который позволяет узлам сети продолжать функционирование даже в случае потери части управляющих компонентов.

Основой проекта является собственный транспортный протокол ASTP (ANet Secure Transport Protocol). Он обеспечивает сквозное шифрование и оптимизирован для работы в нестабильных сетевых условиях с высокой потерей пакетов. Кроме того, передаваемые данные активно маскируются. В результате внешний наблюдатель видит сетевой поток, статистически неотличимый от случайного UDP-трафика.

Для защиты соединений используется комбинация современных алгоритмов. Шифрование потока данных обеспечивают ChaCha20 и Poly1305. Временный обмен ключами происходит по схеме Диффи-Хеллмана с использованием кривой X25519, а для аутентификации применяется Ed25519. Разработчики особо подчёркивают, что стек сознательно лишён устаревших алгоритмов и механизмов обратной совместимости, которые могли бы ослабить безопасность.

Транспортный слой построен поверх UDP и концептуально напоминает протокол QUIC, однако реализован с собственным форматом пакетов. Каждый пакет помещается в зашифрованный контейнер, к которому добавляется случайное заполнение и переменная задержка отправки. Эта настраиваемая задержка в наносекундах необходима для того, чтобы фаза установления соединения выглядела как сетевой шум, а не как легко узнаваемый шаблон.

Схема развёртывания ANet является распределённой. В инфраструктуре присутствует сервер авторизации "anet-auth", который проверяет отпечаток клиента, вычисленный как SHA256 от его открытого ключа Ed25519. Сам туннель поднимается на основе PSK (предварительно распределённого ключа). Процесс согласования параметров представляет собой четырёхфазное рукопожатие с использованием алгоритма Диффи-Хеллмана и механизма double ratchet для постоянного обновления ключей. Если сервер авторизации становится недоступен, сеть продолжает работать на заранее загруженных ключах и может перейти в полностью автономный режим.

Проект поддерживает несколько операционных систем. Работа заявлена для Linux с использованием интерфейса TUN, для Windows через драйвер Wintun, для macOS с "utun" и для Android через "VpnService" и JNI. Для управления сетью доступен графический интерфейс, написанный на фреймворке "egui" для Rust, а также текстовый TUI-вариант для серверов без графической оболочки. Разработчики также публикуют готовые бинарные сборки для удобства пользователей.

Протокол ASTP отличается от WireGuard и других популярных решений характером своего сетевого следа. Например, у WireGuard есть узнаваемое рукопожатие с фиксированными признаками, основанное на Noise Protocol. У туннелей на базе TLS также существуют типичные отпечатки. В ASTP каждый пакет начинается со случайного одноразового номера размером 12 байт, за которым следует шифротекст переменной длины с добавлением заполнения. В результате такой поток со стороны выглядит как случайная последовательность данных.

Концептуально ANet представляет собой попытку вернуть в практику использования виртуальных частных сетей принципы «ручной сборки» и персональных связей. В качестве базовых элементов используются заранее распределённые ключи, ручная настройка маршрутов и подтверждение узлов через криптографические отпечатки. Репозиторий проекта сопровождается собственным кодексом поведения под названием «радикальная честность». В нём закреплён приоритет качества кода над статусом автора, допускается жёсткая техническая критика, а жалобы на токсичность предлагается игнорировать.

Комментарии: 0