http://habrahabr.ru/post/244735/
С момента самого появления Telegram его не критиковал только ленивый. Этим с одинаковым энтузиазмом занимались резиденты Reddit, Hacker News, etc.
В порыве урезонить самых яростных критиков был объявлен конкурс с главным призом в 200 000$ для первого из тех, кому удастся взломать протокол, и прочесть содержимое секретного чата между двумя вымышленными пользователями.
Конкурс, как судя по всему и рассчитывали устроители, привлек к себе внимание, однако вызвал
шквал еще большей критики в силу ограниченности потенциальных исследователей в выборе инструментов для анализа: доступно было лишь зашифрованное содержимое переписки, без возможности влиять на ее содержимое или вступать в какое-либо взаимодействие с ее авторами (исключая таким образом возможности для MITM, replay-атак, etc).
В ответ
некоторые даже предлагали встречный
челлендж на аналогичных условиях, с заведомо уязвимым протоколом, указывая на нереалистичность предложенного сценария.
Спустя год, учтя критику, Telegram объявил о новом
контесте с призовым фондом в 300 000$ за взлом протокола и дополнительным в 100 000$ за успешно проведенную атаку, итогом которой станет прием ботом зашифрованного сообщения от атакующего.
На этот раз любой исследователь может выступать не только в пассивной роли наблюдателя, но и имеет возможность для проведения активных атак (MITM, CPA, tampering, etc.).
Широкий простор возможностей для исследователей скрывает, однако, неумолимый факт: угрозой для протоколов чаще становятся банальные ошибки
реализации, нежели уязвимая схема. Допускают ошибки все, и программисты здесь, к сожалению, не исключение:
Apple’s 'goto fail' (
CVE-2014-1266)
OpenSSL’s 'Heartbleed' (
CVE-2014-0160).
Bash's 'ShellShock' (
CVE-2014-6271)
Это лишь небольшой список тех, что обрели существенный резонанс в силу критичности и охвата.
Памятуя о том, что программисты ошибаются чаще чем, математики*, я решил начать исследование не с протокола, а с клиентов, реализующих этот самый протокол. Начать было решено с
консольного клиента.

Каково же было удивление, когда обнаружилось, что все данные
«секретного» чата (включая _приватный_ ключ) хранятся на диске в
незашифрованном виде:


И считываются двумя функциями `read_secret_chat_file`

И `read_secret_chat`:

Что легко подтверждается отладчиком:

Что это означает для конечного пользователя?
Поскольку протокол Telegram не гарантирует
forward secrecy (
PFS), это означает, что злоумышленник, долгое время находившийся в режиме пассивного
прослушивания (
eavesdropping), получив контроль над вашим устройством, помимо содержимого
всех секретных чатов (открытых на данном устройстве), получит также возможность
продолжить от вашего имени любой из них, не являющийся к тому моменту принудительно завершенным.
Насколько надежным выглядит протокол с такой перспективы?
Не слишком. Поскольку в таком случае надежность всей вашей переписки начинает определяться не устойчивостью протокола, а надежностью самой слабой компоненты вашей системы, будь то браузер… или шелл.
Stay tuned.
* Что, конечно же, неправда.