Термин глоссария

obfuscated2

Обфускация транспорта MTProto

Коротко

Режим, в котором поток выглядит как случайные байты, но начало соединения и ритм пакетов остаются узнаваемыми.

Зачем нужна

Без обфускации MTProto-соединение начинается с короткого заголовка, по которому его легко узнать. Обфускация шифрует весь поток поверх транспорта, так что открытых признаков протокола не остаётся. В документации Telegram механизм назван «transport obfuscation», а в разговорах о прокси его обычно зовут obfuscated2. По той же документации, он обязателен для транспорта WebSocket и применяется, чтобы обходить блокировки провайдеров.

Как устроен начальный пакет

Клиент отправляет случайные 64 байта. К ним есть ограничения, чтобы они не совпали с заголовками других протоколов: первый байт не может быть 0xef, первые четыре байта не могут быть 0xdddddddd, 0xeeeeeeee или началом HTTP-запроса (POST, GET, HEAD). По смещению 56 лежит идентификатор транспорта, а у прокси по смещению 60 — номер дата-центра.

Из этих же 64 байт выводят ключи шифрования: байты 8–40 — ключ, байты 40–56 — вектор инициализации, а для обратного направления берут те же поля из перевёрнутого пакета. Дальше поток шифруют алгоритмом AES-256 в режиме CTR; состояние шифра сохраняется на всё время соединения.

Роль секрета

Для прокси каждый ключ дополнительно хешируют вместе с секретом: SHA256(ключ + секрет). Поэтому прокси принимает только тех, кто знает секрет, а сам секрет по сети не передаётся.

Что скрывает, а что нет

Обфускация закрывает содержимое потока и признаки протокола в первых байтах. Остальное остаётся видимым:

  • IP-адрес и порт сервера прокси;
  • объём трафика, размеры и ритм пакетов;
  • сам факт, что установлено долгое соединение с этим адресом.

Рядом с другими режимами

Три режима отвечают на разные способы распознавания и дополняют друг друга:

  • obfuscated2 — шифрует весь поток, прячет протокол в первых байтах;
  • dd (padding) — добавляет от 0 до 15 случайных байт к пакетам, чтобы размеры не выдавали прокси;
  • ee (FakeTLS) — начинает соединение как TLS-обмен с настоящим сайтом.

Слабое место

Обфускация прячет содержимое, но не форму соединения. Начало соединения — всегда 64 «случайных» байта, а размеры и ритм пакетов остаются прежними. Поэтому DPI-системы могут отличать такой трафик по статистике, и в разработке прокси появились padding (dd) и FakeTLS (ee).

Источники

  1. Telegram: MTProto transports

Связанные термины

Упоминается в статьях