Китай-режим: как работает hardened obfs
Разбираем по шагам, как мы скрываем длины фреймов от 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.