Несколько дней назад основатель американской компании Digital Fortress Павел Дуров объявил награду $200 тыс. любому, кто сумеет расшифровать трафик мобильного приложения Telegram (криптографически защищенный аналог мессенджера WhatsApp). Как говорил Брюс Шнайер, подобные конкурсы используются в маркетинговых целях, а не для доказательства качества продукта. Многие сомневались в надежности криптопротокола MTProto. И неудивительно, что в нем нашли уязвимость на следующий день после объявления конкурса.
Уязвимость нашел российский пользователь x7mz, он опубликовал соответствующую статью в «Песочнице» на сайте «Хабрахабр». Уязвимость удалось обнаружить после внимательного изучения программных интерфейсов защищенных чатов (end-to-end) Telegram. Там x7mz увидел странную модификацию алгоритма обмена ключами Диффи-Хеллмана. Вместо стандартного
key = pow(g_b, a) mod dh_prime
использовался
key = (pow(g_b, a) mod dh_prime) xor nonce
Где nonce – «случайная», полученная от сервера Telegram, последовательность для вычисления ключа. «Вопрос! Зачем такая модификация в алгоритме? Если nonce – одинаковая последовательность для обоих клиентов, то она просто вывернет ключ на изнанку не сделав его безопаснее. А вот если она разная то сервер Telegram может подобрать такую nonce, при которой ключи пользователей совпадут даже при MITM-атаке и никто не будет знать, что его слушают. И даже если nonce совпадает для 2х собеседников сегодня, нет никаких гарантий что nonce будет совпадать завтра, когда в офис Digital Fortress придет АНБ / ФСБ / другая не хорошая организация», — возмутился x7mz.
К чести Павла Дурова, он признал ошибку и согласился дать $100 тыс. для вознаграждения пользователя. Основатель компании «Вконтакте» как будто совершенно не расстроен потерей ста тысяч долларов: «Эта история заставляет в очередной раз восхититься российскими программистами. Целую неделю маститые американские криптографы на HackerNews безуспешно цеплялись к протоколу — в основном, с требованием заменить наше решение на алгоритмы, которые продвигает АНБ в своем Suite B. А российский программист, называющий себя "новичком", смог в рамках статьи на Хабре сходу определить потенциально уязвимое место в секретных чатах, — пишет он на своей странице «Вконтакте». — Еще раз убедился в том, насколько правильным решением было полностью открывать протокол и исходный код. Это позволяет привлекать тысячи умных людей, которые могут помогать постоянно совершенствовать систему, находя потенциально уязвимые места. Разработчик, нашедший слабое место в нашем алгоритме, заслужил награду в $100,000. Подобную награду заслуживает любой, кто найдет возможности схожей атаки (напоминаю, за расшифровку потока трафика мной была объявлена награда в $200,000). Продолжаем искать — вместе мы сделаем протокол нерушимым».