Маскировка Telegram
В протоколе между клиентом Telegram и прокси-сервером был добавлен дополнительный слой инкапсуляции поверх протокола TCP. Благодаря этому данные оборачиваются в записи TLS. Передача данных в HTTPS происходит поверх этого криптографического протокола. Также была добавлена эмуляция TLS-рукопожатия в начале работы. Telegram уже запустил прокси-сервера на Python и Erlang, где реализована маскировка.
Как было до этого
В мессенджере уже есть прокси, который работает по собственному протоколу Telegram под названием MTProto, его начали применять в 2018 г. Изначально он позволял обнаружить прокси-серверы, результатом чего стали блокировки мессенджера со стороны крупных провайдеров.
Идентификации MTProto мешает отсутствие служебных заголовков, но его выдает длина пакетов. Когда клиент подключается к прокси-серверу, они обмениваются пакетами определенной длины. А в ходе работы мессенджера происходит передача пакетов одинаковой длины. Все это и дает возможность провайдерам засечь трафик Telegram.
Впоследствии протокол был модифицирован разработчиками таким образом, что блокировки стало можно избежать. Его замаскировали путем добавления случайных байтов в каждый пакет. В секрет пришлось добавить префикс dd, чтобы избежать проблем с совместимостью. Но данная модификация станет неэффективной после вступления в силу закона об автономном рунете — уже сейчас MTProto позволяет заблокировать Telegram в Иране и Китая путем атак повторного воспроизведения.
В ответ разработчики добавили частичную защиту от атак повторного воспроизведения в альтернативных вариантах прокси-серверов на Python, Erlang и Go. С этой целью был введен механизм запоминания сервером данных, передающихся в самом начале подключения. Это помогает избежать повторного соединения с такими же данными. Метод проблематично применять для крупных серверов, так как он требует большого расхода оперативной памяти.