Анализ формальной возможности получения доступа к содержимому секретных чатов Telegram

Пост опубликован в блогах iXBT.com, его автор не имеет отношения к редакции iXBT.com
Послушав и почитав множество СМИ о Telegram, волосы встают дыбом от слов экспертов, которые дают свои комментарии. После 20 минут прослушивания свежей передачи Точка на Эхе с заголовком «Цифровое сопротивление» пришлось закатить глаза и выпить литр кефира, чтобы привести разум в нормальное состояние. Картина в СМИ и соцсетях раскрашена всеми цветами радуги. Федеральные СМИ не освещают ситуацию с Telegram или освещают её нейтрально. Образ господина Дурова освещается строго нейтрально. Потому что аудитория этих СМИ никакого интереса для реализуемого проекта Telegram не представляет, а негативный фон от этой аудитории будет плохо влиять на другую важную для проекта аудиторию. Подавляющее большинство условно независимые СМИ поддались течению масс и обожествляют образ господина Дурова (как нового борца и праведника). «Дурова в президенты! Он спаситель нашей страны! Telegram — самый технологичный мессенджер с защитой конфиденциальности переписки»! Твинки/боты вступили в бой в соцсетях для защиты от любых нападок на Telegram и на новый образа господина Дурова. Эти боты действуют один в один, как те, что используются системой пропаганды в России. Сам Дуров делает заявления, которые ещё больше подкрепляют его образ независимого борца и праведника. Они пропитаны такой наивностью, что не поверить им нельзя. Люди в экстазе запускают бумажные самолёты. Тут крыша поедет даже у людей с иммунитетом к пропаганде. Кого надо любить, кого ненавидеть, во что верить…


Хоть правильнее в этом случае было бы занять сторону сильных, потому что пытаться убедить того, кто сам хочет, чтобы их обманули — это очень неблагодарное занятие. Но все заслуживают шанса. Я постараюсь упростить трактовку технической части, чтобы даже те, кто свободно может цитировать целые части «Преступление и наказание» Федора Михайловича Достоевского, могли понять суть, но не потерять детали.

Давайте попробуем ответить на следующие вопросы:

  • Имеет ли сервер Telegram формальную возможность получить доступ к содержимому сообщений в секретных чатах?
  • Если имеет, может ли он изменять содержимое сообщений при передаче в секретных чатах по своему усмотрению?
  • Если имеет, может ли сервер Telegram хранить секретную переписку пользователей (в расшифрованном виде)?
  • Может ли сервер Telegram инициировать секретный чат, подменив собой одного из собеседников?
  • Если возможность получить доступ к содержимому сообщений в секретных чатах у сервера Telegram есть, какие действия со стороны Telegram позволят исключить такую возможность в качестве доказательства потребителям?
  • [ОФФТОПИК] Если возможность получить доступ к содержимому сообщений в секретных чатах у сервера Telegram есть, какие причины у компании Telegram вообще это делать?
  • [ОФФТОПИК] Что за ад происходит с ковровыми блокировками, и когда это закончится?



Протокол обмена сообщениями в секретных чатах Telegram называется MTProto, он обеспечивается так называемое сквозное шифрование (End-to-End Encryption). Первый и самый главный этап обмена сообщения между пользователями — это генерация общего для пользователей базового ключа шифрования. Для этого используется протокол Диффи — Хеллмана. В дальнейшем этот базовый секретный ключ используется для шифрования сообщений с помощью алгоритма AES.

Давайте рассмотрим его принцип при общении Ани и Бори относительно Telegram.

Аня придумывает два случайных числа g и p, соответствующие определённым критериям. Она их ни от кого не скрывает. Дополнительно Аня придумывает очень больше число a, никто другой его знать не должен. По формуле g_a = gᵃ mod p (возведение g в степень a и вычисление остатка от деления на p) Аня вычисляет ещё одно число g_a, которое она ни от кого не скрывает. Числа g, p, g_a она даёт Боре.

Боря придумывает очень большое число b, никто другой его знать не должен. По формуле g_b = gᵇ mod p Боря вычисляет ещё одно число g_b, которое он ни от кого не скрывает, и даёт его Ане.

У Ани есть числа: g, p, g_a, g_b и секретное a. У Бори есть числа: g, p, g_a, g_b и секретное b.

Теперь у Ани и Бори есть одинаковое число key, которое вычисляется по формуле key = g_bᵃ mod p = g_aᵇ mod p, и которое знают только они.


Это есть общий секретный ключ — основа всей системы шифрования в Telegram. Этот ключ в дальнейшем используется Аней и Борей для шифрования и расшифровки сообщений с помощью алгоритма AES.

Описанный протокол Диффи — Хеллмана достаточно надёжен с одним условием — не должно быть между Аней и Борисом посредника, который может менять передаваемые числа. Вся коммуникация между собеседниками в сервисе Telegram происходит только через серверы Telegram. Аня и Борис живут далеко друг от друга. В игру вступает Тегран (сервер Telegram), который взялся доставлять сообщения между Аней и Борисом. Но благие намерения являются лишь предлогом (предположим этом).

Аня даёт Теграну числа (она их ни от кого не скрывает): g, p, g_a. Тегран придумывает очень больше число ta и вычисляет по формуле g_ta = gᵗᵃ mod p ещё одно число g_ta. Он передаёт его Ане. Тегран придумывает очень больше число tb и вычисляет по формуле g_tb = gᵗᵇ mod p ещё одно число g_tb. Он передаёт Борису g, p, g_tb. По формуле g_b = gᵇ mod p Боря вычисляет ещё число g_b, которое он ни от кого не скрывает, и даёт его Теграну, чтобы он передал его Ане. Но Тегран не передаёт это число Ане. Теперь у Теграна есть два секретных ключа key_a и key_b, с помощью которых он может читать и изменять зашифрованную переписку Ани и Бориса. А у Ани и Бориса поддельные ключи Теграна. Например, Аня даёт письмо Теграну, чтобы он передал его Боре. Тегран расшифровывает письмо, используя ключ key_a. Делает с содержимым, что угодно. Зашифровывает письмо обратно с помощью ключа key_b и отдаёт письмо Боре.


Пример:
АняТегранБоря
p = 23p = 23p = 23
g = 5g = 5g = 5
a = 6ta = 7, tb = 8b = 9
g_a = 8g_ta = 17, g_tb = 16g_b = 11
key_a = 12key_a = 12, key_b = 8key_b = 8


Быть посредником постоянно для всех секретных чатов — это гарантия дискредитации и очень большая нагрузка на серверы Telegram. Но на стороне сервера всегда можно дождаться момента нового запроса на создание секретного чата и войти посредником. Или инициировать отмену секретного чата, чтобы собеседники создали новый. Собеседникам (в официальных клиентах Telegram для iOS и Android) при каждом новом секретном чате нужно по дополнительному каналу связи вручную сравнивать визуальную часть общего ключа, чтобы удостовериться в их идентичности. В официальных клиентах после отмены сессии секретного чата ключи удаляются, и сверить их в будущем уже нельзя (при этом отмена сессии может быть инициирована со стороны сервера Telegram). Важный нюанс состоит в том, что хоть и исходный коды официальных клиентов опубликованы, нет никаких гарантий, что те версии,  опубликованные в App Store и Google Play, не манипулируют отображением визуальной части общего секретного ключа клиента (о таких гарантия читайте в ответах на вопросы) в определённых сессиях.

Имеет ли сервер Telegram формальную возможность получить доступ к содержимому сообщений в секретных чатах? Да. При этом секретный ключ клиентов сессии будет разный. В какой из сессий секретных чатов это может произойти, предугадать невозможно, и зависит только от решения на стороне сервера Telegram.

Может ли сервер Telegram изменять содержимое сообщений по своему усмотрению? Да. Т.к. у сервера Telegram могут находится два общих секретных ключа для обоих собеседников, сервер Telegram может вносить любые изменения в передаваемые сообщения.

Может ли сервер Telegram хранить секретную переписку пользователей (в расшифрованном виде)? Да. Что автоматически следует из ответа на самый первый вопрос.

Может ли сервер Telegram инициировать секретный чат, подменив собой одного из собеседников? Да. Сервер Telegram в любой момент может инициировать секретный чат между собой и любым собеседником. При этом второй собеседник (реальный, от лица которого выступает Telegram) о происходящем не будет знать, если его не оповестить по независимому от Telegram каналу.

Если возможность получить доступ к содержимому сообщений в секретных чатах у сервера Telegram есть, какие действия со стороны Telegram позволят исключить такую возможность в качестве доказательства потребителям? Telegram предоставляет исходный код клиентов, но не предоставляет исходный код сервера. Есть два возможных варианта доказательства заботы о конфиденциальности переписки своих клиентов:

  1. Предоставить исходный код сервера Telegram (как это делает Signal), чтобы при необходимости группы людей или компании, которые хотят гарантированной конфиденциальности, могли использовать свои проверенные версии сервера и клиентов Telegram на своём оборудовании. В этом случае за конфиденциальность отвечают только эти группы людей и компании. Все другие могут спокойно продолжать пользоваться официальными клиентами и официальным сервером, если вопрос конфиденциальности переписки для них не актуален.
  2. Создать центр сертификации с открытым исходным кодом и добавить возможность его использования в клиентах. Это просто программа, которую группы людей или компании могут развернуть на любом своём сервере. Например, вы используете проверенный на бэкдоры клиент Telegram, собранный из исходных кодов теми, кому вы доверяете. В настройках этого клиента вы добавляете адрес центра сертификации, своё учётную запись и корневой сертификат этого центра. В этом случае вы спокойно можете продолжать пользоваться официальным сервером Telegram (его исходные коды не нужны, он вообще не используется для связи с центром сертификации). А все секретные чаты визуально отмечаются небезопасными до тех пор, пока у обоих собеседников не подключён один и тот же центр сертификации, который подтвердит идентичность ключей обоих собеседников.


[ОФФТОПИК] Если возможность получить доступ к содержимому сообщений в секретных чатах у сервера Telegram есть, какие причины у компании Telegram вообще это делать? Причины кроются в самой личности Павла Дурова и становлении проекта Telegram. Всё со ссылками на заявления и публикации в СМИ детально расписано Павлом Ивановым вот в этом материале. (нет смысла его пересказывать, просто отстранитесь от того, что вы знаете о Павле Дурове, от его навязанного образа, и вдумчиво прочитайте).

[ОФФТОПИК] Что за ад происходит с ковровыми блокировками, и когда это закончится? Действует ли ведомство Жарова напрямую, или его используют вслепую — это не важно. Почему до сих пор не удалена программа Telegram из App Store и Google Play Store — это не важно. Почему до сих пор не заблокированы серверы push-уведомлений Google и Apple — это тоже не важно. Закончится всё ровно тогда, когда очередные новости о действиях Роскомнадзора больше не будут являться инфоповодом как в России, так и за рубежом. Т.е. наступит определённое насыщение — основная масса людей, которую можно было бы убедить, что проект Telegram является оплотом свободы, техническим совершенством и обеспечивает полнейшую конфиденциальность переписки, уже будет убеждена.