GitHub получил оружие против цензуры — квантовый VPN ANet сводит спецслужбы с ума

GitHub получил оружие против цензуры — квантовый VPN ANet сводит спецслужбы с ума

Он продолжает работать, даже если командный сервер уничтожен или захвачен.

image

В открытом доступе появился проект 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, но реализован со своим форматом пакетов. Каждый пакет заворачивается в зашифрованный контейнер с добавочным случайным заполнением и переменной задержкой отправки. Такой jitter задаётся в наносекундах в пределах настраиваемого диапазона и нужен для того, чтобы фаза согласования соединения выглядела как шум, а не как узнаваемый сетевой шаблон.

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

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

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

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

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