Ко всем статьям

Китай-режим: как работает hardened obfs

Инженерная команда· Опубликовано 18.03.2026· 11 мин

Разбираем по шагам, как мы скрываем длины фреймов от DPI в жёстких сетях.

Зачем нужен hardened режим

Обычный режим Logrus использует обфускацию вида [2B length][AEAD(payload)]. Это быстро (одна AEAD-операция на фрейм) и хорошо прячет содержимое. Но длины фреймов остаются видимыми в открытом виде — для DPI это сигнал к ML-классификации трафика.

Для GFW (Китай) и TCI (Иран) этого уже достаточно, чтобы детектить VPN-like потоки с точностью 85–90%. В hardened режиме мы эту уязвимость закрываем.

Формат фрейма

В hardened:

[ AEAD(2B length) ][ AEAD(payload) ]

Две AEAD-операции. Сначала шифруется длина (каждый кадр имеет уникальный nonce), затем — payload с независимым ключом. Результат: всё что видит DPI — последовательность случайных байт без видимой структуры.

Цена

  • CPU: ~40% медленнее на x86-64 по сравнению с fast mode (556 → 340 MB/s на M1 Pro).
  • Overhead: +16 байт на кадр за счёт дополнительного AEAD-tag'а.

Для сетей, где быстрый режим бьётся в стену — это очень хорошая цена.

Когда включать

Hardened включается автоматически когда клиент попадает в «жёсткий» список сетей:

  • Страна определяется как CN/IR по GeoIP.
  • Предыдущие попытки подключения имели RST или timeout в первую секунду больше N раз.
  • Пользователь вручную включил режим в настройках.

Как тестировать

Если вы разрабатываете транспорт и хотите проверить hardened локально:

make bench-hardened

Это запускает logrus-bench в цикле, измеряет пропускную способность и дамп CPU-профиля. Ожидайте ~350 MB/s на современном железе.

Дальше

Следующий шаг — динамическая смена ключей каждые N MB трафика. Сейчас ключ фиксируется на сессию, что при долгих сессиях даёт статистические признаки для криптоанализа. В roadmap на Q3 2026.

Поделиться

X / TwitterTelegram