Какое шифрование использует телеграм
Рекомендуем вам сначала ознакомиться с техническим FAQ.
Терминология
Ключ авторизации
Ключ сервера
Идентификатор ключа
Сессия
Соль сервера (Server Salt)
Внутренний (криптографический) заголовок
Внешний (криптографический) заголовок
Payload (полезная нагрузка)
Определение ключа AES и вектора инициализации
Алгоритм для вычисления aes_key и aes_iv из auth_key and msg_key таков:
1024 бита нижнего порядка auth_key не включены в вычисление. Они могут (вместе с оставшимися битами или отдельно) использоваться на девайсе клиента для шифрования локальной копии данных, полученных от сервера. 512 бит нижнего порядка auth_key не хранятся на сервере; следовательно, если девайс клиента использует их, чтобы зашифровать локальные данные, и если юзер теряет ключ или пароль, расшифровка локальных данных невозможна (даже если могут быть получены данные с сервера).
Когда AES используется для шифровки блока данных длиной, не делимой по 16 байт, данные подбиваются рандомными байтами до минимальной длины, делимой по 16 байт, непосредственно перед тем как будут зашифрованы.
Важные тесты
Примечание переводчика: имеется в виду бит чётности. Вычисляется сложением по модулю 2, результат 0 считается чётным, результат 1 — нечётным.
Дополнительно, значения msg_id , относящиеся ко времени более 30 секунд в будущем и более 300 секунд в прошлом, игнорируются. Это особенно важно для сервера. Для клиента это также будет полезным (для защиты от атаки повторного воспроизведения), но только если он его настройки времени точны (например, если его время было синхронизировано с временем сервера).
Сохранение ключа авторизации на клиенте
Юзерам, заботящимся о безопасности, может быть предложено защитить паролем ключ авторизации — примерно таким же способом как в ssh. Это достигается добавлением SHA1 ключа впереди ключа, после чего вся строка шифруется с использованием AES в режиме CBC и ключа, равного юзерскому (текстовому) паролю. Когда юзер вводит пароль, сохранённый защищённый пароль расшифровывается и проверяется сравнением с SHA1. С точки зрения юзера, это практически то же самое, что и использования пароля вебсайта или приложения.
Для полного понимания происходящего неплохо было бы быть знакомым с основами криптографии, с принципом работы хеш функций (в данной статье SHA-1, SHA-256), а также с такими протоколами как RSA, AES и Diffie-Hellman (приведены ссылки для более подробного ознакомления).
Рассматриваем тележку, так сказать.
Оглавление
Предисловие
Здравствуйте, дорогие хабровчане! Я здесь новенький, поэтому не кидайтесь там палками, помидорами и всем прочим (хотя, кидайтесь, мб, полезнее будет). Как один из всадников ноябрь-декабрьского криптографического апокалипсиса, я пришел вам поведать о протоколе, что используется как в секретной переписке с мамой о покупке продуктов, так и в не очень доброжелательных целях.
21-й год на дворе. В чем там сейчас чатятся зумеры, бумеры, думеры, миллениалы и вот эти все касты? Тележка, конечно, тележка. Каждый из нас хочет, чтобы его самые сокровенные секреты, будь то причудливые мемы, переписки со странными субъектами, да и что уж таить, подписки на аниме-каналы, оставались секретами до конца. Но VK же, вроде, удовлетворяет всем нуждам и потребностям, удобно и доступно. Соглашусь, мы в СНГ выросли уже на этой социальной сети, и она нам как родная (а ее, как и тележку, основал Пашенька). Но на данный момент она переживает не лучшие времена, пытаясь подражать всему и вся, добавляя никому не нужный функционал, а также заполняя ленту невероятным количеством рекламы (на каждые 6 постов, 1 рекламный – ужас). Также, бог весть, что там за защита у VK.
В то же время тележка намного проще и чище в плане функционала и рекламы (пока что). Более того, Пашенька позиционирует свой чатек как несокрушимую и непоколебимую крепость в плане взлома, а сам алгоритм шифрования MTProto выставлен перед всеми на обозрение. Так давайте поговорим о внутреннем устройстве MTProto, разработанного собственноручно командой тележки, с точки зрения криптографии.
High-level описание
А дела в алгоритме обстоят довольно запутанно с первого взгляда. Разработчики тележки – самые что ни на есть храбрецы: взять уже готовые протоколы, по типу Signal – не, скучно; создать свой протокол, используя всевозможные известные алгоритмы с добавлением кучи своих фишек и фокусов, чтобы все было еще секретнее и сложнее – прекрасное решение. Так и появился MTProto.
Начать, пожалуй, нужно с описания работы в целом. MTProto – клиент-серверный набор протоколов, служащий для доступа к серверу из клиентского приложения через незащищенное соединение. Этот набор можно разделить на 3 основные части:
High-level API and Type language: отвечает как за API запросы и ответы, так и за сериализацию данных.
Итак, как я и сказал, мы остановимся на втором уровне, связанном с криптографией и авторизацией (C&A), и поглядим, как вся кухня устроена. В свою очередь данный уровень можно поделить на 3 модуля:
Authorization: этот модуль отвечает за первоначальную авторизацию клиента. Он работает во время первого запуска приложения, чтобы получить ключ авторизации.
Secret chat key exchange and rekeying: данный модуль отвечает за установку сессионного общего секретного ключа между клиентами, используемого в сквозном шифровании.
Терминология
Начать наше путешествие, думаю, стоит с описания всех фигурирующих величин и терминов. Для удобства в статье большинство из них будут написаны на забугорском языке (лучше выделяются, а также легче яндексятся).
Итак, дамы и господа, наша сегодняшняя терминология:
Session_id – случайное 64-битное число, генерируемое клиентом с целью различить отдельные сеансы одного пользователя (на телефоне, на ПК несколько окон).
Padding (12-1024 бит) – добавление ничего не значащих данных к информации, нацеленное на повышение криптостойкости.
Key derivative function (KDF) – функция, формирующая один или несколько секретных ключей на основе секретного значения с помощью псевдослучайной функции (используется SHA-256).
Фух, тяжело, понимаю, прямо как на матане, когда на тебя вываливают гору определений, но крепитесь. Не забудьте открыть в дополнительном окне этот список, чтобы подсмотреть, что за что отвечает (людям с телефона RIP – мотайте).
Клиент-серверное шифрование
Давайте-ка взглянем на схему этого криптографического чуда:
Выглядит не так уж и сложно. Ну что тут: обычный Diffie-Hellman, SHA-256, AES – да и все, делов-то. Но давайте все же немного приоткроем завесу тайны и попробуем разобраться, что да как.
В общих словах работа алгоритма такова:
Auth_key в комбинации с новонайденным msg_key определяет при помощи KDF 256-битный aes_key и 256-битный начальный вектор aes_iv.
Создание auth_key
Начнем с самой важной состовляющей, а в то же время с самой замороченной и интересной, с создания auth_key. В основном здесь используется RSA, SHA-1, AES и Diffie-Hellman, а также добавлены некоторые тонкости для еще большей надежности и секретности. Привожу схему (не пугайтесь):
Схема получения AK.
Поехали по порядку:
В течение работы этого алгоритма необходимо делать следующие проверки:
C должен проверить: и являются простыми числами, , порождает циклическую подгруппу по простому основанию.
C и S должны верифицировать, что . Также телеграмм рекомендует, чтобы обе стороны проверяли следующее:.
Так-так, самое мудреное и сложное позади, здесь можно выдохнуть. На самом деле это все не так сложно, если позалипать в схему и вчитаться в ход алгоритма.
Немного про AES IGE
Вы могли заметить, как при создании auth_key, так и в основном алгоритме MTProto участвует некое шифрование AES IGE. Это всеми любимое AES шифрование, работающее в Infinite Garble Extension режиме. Пару слов про данный режим:
Схема AES IGE.
IGE режим задается следующим цепным равенством:
Наберитесь сил, осталось совсем немного.
Секретные чаты и сквозное шифрование
Окей, вроде все секретно, все отлично. Но это все под защитой покуда у злоумышленника нет доступа до серверов тележки, так как на них хранится вся зашифрованная переписка вместе с ключами для того, чтобы иметь доступ в нескольких сессиях. Так-так, а вдруг я захочу обсудить с другом кто лучший из BTS, но не хотелось бы, чтобы это знали другие. В такой ситуации есть решение – секретные чаты. Давайте перейдем к рассмотрению сквозного шифрования в тележке.
Схема шифрования почти идентична с предыдущей:
Опять же, в общих словах, по очереди происходит 2 идентичных шифрования с разными ключами SK и AK. Нам требуется добыть SK да так, чтобы никто и никогда не знал его. В этом нам опять же поможет всеми любимый алгоритм DH.
Схема получения SK перед вами (довольно знакомая, не правда ли):
Схема получения SK.
Кратко о процессе:
A: получает параметры от S, генерирует (для определения текущей сессии), рассчитывает Отправляет , где – запрос на инициализацию секретного чата от клиента A клиенту B.
B: при согласии на инициализацию секретного чата, получает параметры от S, рассчитываета также и его 64-битный хеш (SHA1). Отправляет .
A: рассчитывает и сверяет хеш (для удостоверения правильной работы клиентского приложения).
Rekeying (смена ключа шифрования)
Схема смены ключа шифрования
На данном этапе разработчики почувствовали себя в безопасности и решили остановиться.
Заключение
Фух, смотрите, сколько Пашенька и его команда вложила души в секретность тележки, грех не пользоваться. Хотя, криптоаналитики и разработчики были в полном ужасе, увидав кашу из всех этих алгоритмов и своих тонкостей (в данной статье опущено множество технических подробностей, например, расчеты хэшей, а там все очень и очень запутанно).
Теперь запросы правительств о выдаче ключей шифрования звучат уж слишком смешно. Ну а нам, простым смертным, со спокойной душой можно пользоваться всеми нами любимой тележкой, покуда квантовые компьютеры не пришли и не раздали нам подзатыльники за наши математические фокусы.
Надеюсь, мне удалось донести основы того, как функционирует MTProto и стало немного яснее, как устроено шифрование в мессенджерах (устройство общее). А вам спасибо за ваше внимание и приглашаю в комментарии для дальнейшего обсуждения. Буду рад, если кто-то укажет неточности, ежели таковые заприметит.
Рассказываем, почему в Telegram надо обязательно использовать «секретные» чаты и как правильно настроить безопасность и приватность.
Самое время рассказать о том, как нужно действовать, чтобы общение в Telegram было действительно безопасным и приватным.
Самое главное: сквозное шифрование в Telegram по умолчанию не используется
Если кратко, то это означает, что Telegram имеет доступ не только к метаданным (кому вы писали, когда писали и как много), как WhatsApp, но и ко всему содержимому переписки пользователей в стандартных чатах, используемых мессенджером по умолчанию. На данный момент, согласно политике конфиденциальности Telegram, эти данные не используются для рекламы. Но, как мы уже знаем по опыту, политика может измениться.
Как внутри чата понять, включено ли сквозное шифрование: иконка с замочком
Также можно кликнуть по иконке вашего собеседника — если в чате используется сквозное шифрование, то в самом низу открывшегося окна отобразится строчка Ключ шифрования.
Как настроить безопасность и приватность в приложении Telegram
Также не помешает правильно настроить безопасность и конфиденциальность в приложении. Для этого нажмите кнопку Настройки в правом нижнем углу экрана и выберите пункт Конфиденциальность.
Настройки безопасности в Telegram
Первым делом следует позаботиться, чтобы кто-нибудь не прочитал вашу переписку в тот момент, когда вы случайно оставили разблокированное устройство без присмотра. Для этого на открывшейся вкладке выберите пункт Код-пароль, нажмите Включить код-пароль, придумайте пин-код, который вы не забудете, задайте его и подтвердите.
После этого выберите пункт Автоблокировка и установите какое-нибудь небольшое значение — одну минуту или пять. Если ваше устройство поддерживает вход по отпечатку пальца или по распознаванию лица — можете включить здесь же соответствующую опцию.
Как правильно настроить безопасность в Telegram
Дальше стоит обезопасить аккаунт от угона с помощью двухфакторной аутентификации. Поскольку первичным способом подтверждения входа в аккаунт в Telegram служит одноразовый код в SMS, то в качестве второго фактора мессенджер предлагает задать пароль.
Для этого на вкладке Конфиденциальность выберите Двухэтапная аутентификация (в Android) или Облачный пароль (в iOS) и установите какую-нибудь надежную комбинацию. Важно помнить, что вводить этот пароль вы будете нечасто, поэтому его очень легко забыть. Так что лучше сохранить его в каком-нибудь надежном месте — например, в менеджере паролей.
Настройки конфиденциальности в Telegram
Чтобы не делиться лишней информацией со всеми 500 миллионами пользователей Telegram, стоит настроить приватность профиля. Для этого пройдитесь по пунктам настроек Конфиденциальность и поменяйте установленные значения — по умолчанию все эти данные и возможности доступны всем желающим. Мы рекомендуем вот такие настройки:
Как правильно настроить конфиденциальность в Telegram
Также можете заглянуть в Конфиденциальность -> Управление данными и удалить из хранилища Telegram ту информацию, которые покажется вам лишней.
Безопасность Telegram для самых осторожных
Вышеприведенных советов должно хватить для большинства пользователей, но для наиболее осторожных у нас есть еще несколько рекомендаций:
- Используйте для входа в Telegram отдельный номер телефона. А может быть, даже виртуальный номер телефона вместо настоящего мобильного. Однако будьте осторожны и убедитесь в том, что этот номер не одноразовый — иначе к вашему аккаунту может получить доступ кто-то другой.
- Включайте защищенное соединение, чтобы скрыть свой IP-адрес — Telegram может сообщать его, например, по запросу правоохранительных органов.
- Подумайте о том, чтобы использовать другой мессенджер, более приспособленный для безопасного и конфиденциального общения — например, Signal или Threema. В отличие от Telegram, все чаты в них шифруются по умолчанию и есть дополнительные механизмы обеспечения конфиденциальности. Но они не так популярны, и в них нет некоторых функций, которые привлекают пользователей Telegram.
Ну и, конечно же, не забывайте о том, что даже самый безопасный в мире мессенджер становится беззащитным, если к вашему устройству кто-то получит доступ — физический или удаленный.
Поэтому обязательно блокируйте все свои устройства пин-кодом, вовремя обновляйте все установленные на них программы и операционную систему, а также защищайте их от вредоносного ПО надежным антивирусом.
Послушав и почитав множество СМИ о Telegram, волосы встают дыбом от слов экспертов, которые дают свои комментарии. После 20 минут прослушивания свежей передачи Точка на Эхе с заголовком «Цифровое сопротивление» пришлось закатить глаза и выпить литр кефира, чтобы привести разум в нормальное состояние. Картина в СМИ и соцсетях раскрашена всеми цветами радуги. Федеральные СМИ не освещают ситуацию с Telegram или освещают её нейтрально. Образ господина Дурова освещается строго нейтрально. Потому что аудитория этих СМИ никакого интереса для реализуемого проекта Telegram не представляет, а негативный фон от этой аудитории будет плохо влиять на другую важную для проекта аудиторию. Подавляющее большинство условно независимые СМИ поддались течению масс и обожествляют образ господина Дурова (как нового борца и праведника). «Дурова в президенты! Он спаситель нашей страны! Telegram — самый технологичный мессенджер с защитой конфиденциальности переписки»! Твинки/боты вступили в бой в соцсетях для защиты от любых нападок на Telegram и на новый образа господина Дурова. Эти боты действуют один в один, как те, что используются системой пропаганды в России. Сам Дуров делает заявления, которые ещё больше подкрепляют его образ независимого борца и праведника. Они пропитаны такой наивностью, что не поверить им нельзя. Люди в экстазе запускают бумажные самолёты. Тут крыша поедет даже у людей с иммунитетом к пропаганде. Кого надо любить, кого ненавидеть, во что верить…
Хоть правильнее в этом случае было бы занять сторону сильных, потому что пытаться убедить того, кто сам хочет, чтобы их обманули — это очень неблагодарное занятие. Но все заслуживают шанса. Я постараюсь упростить трактовку технической части, чтобы даже те, кто свободно может цитировать целые части «Преступление и наказание» Федора Михайловича Достоевского, могли понять суть, но не потерять детали.
Давайте попробуем ответить на следующие вопросы:
Давайте рассмотрим его принцип при общении Ани и Бори относительно 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, и которое знают только они.
Аня даёт Теграну числа (она их ни от кого не скрывает): 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 и отдаёт письмо Боре.
Пример:__table_placeholder1__
Быть посредником постоянно для всех секретных чатов — это гарантия дискредитации и очень большая нагрузка на серверы Telegram. Но на стороне сервера всегда можно дождаться момента нового запроса на создание секретного чата и войти посредником. Или инициировать отмену секретного чата, чтобы собеседники создали новый. Собеседникам (в официальных клиентах Telegram для iOS и Android) при каждом новом секретном чате нужно по дополнительному каналу связи вручную сравнивать визуальную часть общего ключа, чтобы удостовериться в их идентичности. В официальных клиентах после отмены сессии секретного чата ключи удаляются, и сверить их в будущем уже нельзя (при этом отмена сессии может быть инициирована со стороны сервера Telegram). Важный нюанс состоит в том, что хоть и исходный коды официальных клиентов опубликованы, нет никаких гарантий, что те версии, опубликованные в App Store и Google Play, не манипулируют отображением визуальной части общего секретного ключа клиента (о таких гарантия читайте в ответах на вопросы) в определённых сессиях.
Может ли сервер Telegram хранить секретную переписку пользователей (в расшифрованном виде)? Да. Что автоматически следует из ответа на самый первый вопрос.
Может ли сервер Telegram инициировать секретный чат, подменив собой одного из собеседников? Да. Сервер Telegram в любой момент может инициировать секретный чат между собой и любым собеседником. При этом второй собеседник (реальный, от лица которого выступает Telegram) о происходящем не будет знать, если его не оповестить по независимому от Telegram каналу.
- Предоставить исходный код сервера Telegram (как это делает Signal), чтобы при необходимости группы людей или компании, которые хотят гарантированной конфиденциальности, могли использовать свои проверенные версии сервера и клиентов Telegram на своём оборудовании. В этом случае за конфиденциальность отвечают только эти группы людей и компании. Все другие могут спокойно продолжать пользоваться официальными клиентами и официальным сервером, если вопрос конфиденциальности переписки для них не актуален.
- Создать центр сертификации с открытым исходным кодом и добавить возможность его использования в клиентах. Это просто программа, которую группы людей или компании могут развернуть на любом своём сервере. Например, вы используете проверенный на бэкдоры клиент Telegram, собранный из исходных кодов теми, кому вы доверяете. В настройках этого клиента вы добавляете адрес центра сертификации, своё учётную запись и корневой сертификат этого центра. В этом случае вы спокойно можете продолжать пользоваться официальным сервером Telegram (его исходные коды не нужны, он вообще не используется для связи с центром сертификации). А все секретные чаты визуально отмечаются небезопасными до тех пор, пока у обоих собеседников не подключён один и тот же центр сертификации, который подтвердит идентичность ключей обоих собеседников.
Читайте также: