Итак, что такое безопасный мессенджер? Многие скажут, что мессенджер можно считать безопасным, если передаваемые сообщения шифруются. На самом же деле все немного сложнее — шифрование можно использовать по-разному. На мероприятии Chaos Communication Congress Роланд Шиллинг (Roland Schilling) и Фридер Штайнметц (Frieder Steinmetz) в своей презентации простыми словами объяснили, что такое безопасный мессенджер и как должны быть устроены приложения для обмена сообщениями, чтобы эффективно сохранять вашу переписку в тайне.
Шесть признаков безопасного мессенджера
Чтобы понять идею безопасного общения через мессенджер, по мнению Шиллинга и Штайнметца, нужно представить, что мы делаем для того, чтобы поговорить с глазу на глаз на вечеринке. Как мы можем убедиться, что разговор останется секретным? Скорее всего, мы пытаемся найти уединенную комнату, где нас не услышит никто, кроме собеседника.
Это первая характеристика безопасного общения: вне зависимости от того, происходит ли разговор вживую или онлайн, он должен быть конфиденциальным. Разговор не должен услышать никто, кроме вас и вашего собеседника.
Вторая характеристика — аутентичность: вы должны быть уверены, что говорите именно со своим желаемым собеседником, а не с кем-либо другим. В этом легко убедиться в реальной жизни, так как вы знаете собеседника в лицо, но при онлайн-общении все гораздо сложнее.
Если разговор действительно важен (а в случае приватной беседы это обычно так), вы хотите убедиться, что собеседник слышит каждое ваше слово и наоборот. Кроме того, важно удостовериться, что он слышит именно то, что вы говорите. Другими словами, при общении через мессенджер вам необходимо быть уверенными в том, что никто не изменил ваше сообщение. Таким образом, целостность также критически важна для безопасного мессенджера.
Представим, что в комнату вошел другой человек и услышал часть вашего разговора. В реальной жизни этот человек поймет только ту часть общения, что он успел услышать, но не будет знать, о чем вы говорили до его появления и после его ухода. Но Интернет, как известно, ничего не забывает, поэтому при онлайн-общении все опять немного сложнее, чем при реальном. Эта аналогия приводит нас к двум другим характеристикам безопасных мессенджеров — поддержка прямой секретности и будущей секретности.
Прямая секретность не позволяет стороннему лицу узнать, о чем вы говорили до его прихода, а будущая секретность — о чем вы говорили после его ухода.
Представим, что вы и ваш собеседник обсуждаете очень деликатное дело. Настолько деликатное, что, если кто-то уличит вас в том, что вы говорили, вам бы хотелось все отрицать. Если разговор действительно был приватным, его могут процитировать только двое — вы и ваш собеседник. В этой ситуации ваши слова («Я такого не говорил!») противоречат словам вашего визави («Вы это сказали!»), и ни одна из сторон не может доказать свою правоту. Это еще одна характеристика безопасного мессенджера — возможность отрицать сказанное.
Как безопасность обеспечивается в мессенджерах
Итак, мессенджер, который действительно имеет право называться безопасным, должен обладать всеми шестью описанными характеристиками. В реальной жизни добиться приватности общения, выполняя эти шесть требований, довольно легко, но в случае с онлайн-общением при конфиденциальном разговоре всегда присутствует третья сторона — сам сервис, с помощью которого вы общаетесь со своим собеседником. Как реализовать все требования к безопасности общения, предусмотрев участие мессенджера в обмене сообщениями?
Конфиденциальность достигается путем использования шифрования. Существуют различные виды шифрования, как симметричные, так и асимметричные, — это криптография с использованием публичных ключей шифрования. Безопасные мессенджеры (в качестве примера Шиллинг и Штайнметц привели Threema) используют оба вида шифрования: приложение создает общий ключ на основе публичного ключа одного собеседника и приватного ключа второго и наоборот, — математика процесса такова, что результат получается одинаковым.
Таким образом, оба собеседника имеют один и тот же ключ, уникальный для разговора этих двух людей. Приложение генерирует ключ отдельно и обеспечивает конфиденциальность, не передавая его другим лицам, — собеседники создают ключ сразу же после того, как решили поговорить друг с другом.
Одновременно достигается и целостность общения: посторонние, попытавшись добавить что-то к уже зашифрованному тексту, сделают его нечитабельным. В этом случае собеседник получит «битое сообщение», так как мессенджер не сможет расшифровать зашифрованный текст.
Иногда не стоит предавать огласке даже сам факт того, что беседа имела место быть. Поэтому для повышения конфиденциальности можно скрыть сам факт разговора. Об этом позаботится еще один уровень шифрования. Отправляемое вами сообщение шифруется при помощи ключа, созданного вами и собеседником, — это как положить письмо в конверт с адресом. После этого сообщение шифруется еще раз: вы кладете его в еще один конверт и отправляете по адресу сервера вашего мессенджера. В этом случае вы используете для шифрования ключ, генерируемый на основе другой пары ключей — вашего и сервера.
Этот «конверт в конверте» сначала доставляется на сервер мессенджера. Если посторонний попробует вмешаться в ваш разговор, он увидит, что это вы послали сообщение, но не сможет узнать, кому именно. Сервер мессенджера «открывает» внешний конверт, «видит» адрес назначения (но не видит само сообщение — оно зашифровано ключом, который сервер не знает), «кладет» ваш конверт в другой конверт и отправляет его получателю. На этом этапе посторонний наблюдатель может увидеть только то, что адресату пришел конверт, но не видит, от кого именно.
Так как конвертов, отправляющихся по различным адресам, очень много, отследить получателя вашего сообщения сложно. Сложно, но все-таки возможно: если кто-нибудь смог бы «взвесить» все конверты и найти два конверта с одинаковым весом, он определил бы связь между вами и вашим собеседником. Чтобы исключить такую возможность, система добавляет различные грузы случайного веса в каждый конверт, чтобы конверт, который отправили вы, и конверт, который получил ваш собеседник, отличались по весу.
Гораздо труднее обеспечить аутентичность. Некоторые мессенджеры используют адреса e-mail или телефонные номера в качестве ID, чтобы пользователь мог доказать, что он — это он. Но телефонные номера и адреса электронной почты — это данные, которыми вы, возможно, не хотите делиться с приложением или своими собеседниками. Поэтому некоторые приложения (в частности, Threema) рекомендуют пользователям использовать внутренний ID сервиса и обмениваться QR-кодами, содержащими этот ID, чтобы подтвердить свою личность.
Возможность отрицать сказанное достигается за счет того, что каждое сообщение отправляется обоим участникам разговора. Так как оба собеседника используют один и тот же ключ, получается, что каждый участник мог послать то или иное сообщение. Таким образом, даже если третья сторона сможет взломать канал коммуникации и расшифровать сообщение, точно определить отправителя каждого сообщения не получится.
Итак, мы разобрались с конфиденциальностью, аутентичностью, целостностью и возможностью отрицать факт разговора. Но что же насчет прямой и будущей секретности?
Чтобы снизить вероятность расшифровки предыдущих и последующих сообщений, сервер должен регулярно перевыпускать ключи. Если ключ обновляется, скажем, раз в месяц, то сторонний человек, воспользовавшийся ключом, может прочитать только переписки за этот месяц и после перевыпуска ключа потеряет такую возможность.
Заключение
На этом наш краткий экскурс в тему безопасных мессенджеров закончен. На самом деле эта тема намного сложнее, так как современные мессенджеры должны обрабатывать медиафайлы, групповые чаты и даже видеозвонки.
Если вам хочется узнать больше о безопасных мессенджерах, посмотрите видео с конференции 33C3. В нем Шиллинг и Штайнметц не только объясняют базовые понятия, но и рассказывают об опыте реверс-инжиниринга мессенджера Threema, в ходе которого они разобрались, как это приложение применяет ключевые понятия безопасного общения в работе мессенджера. Нам понравилось это видео — надеемся, оно понравится и вам.