Сквозное (end-to-end) шифрование в мессенджерах завоевало популярность тем, что оно происходит совершенно незаметно для пользователей. Им не надо самостоятельно генерировать пары ключей, подписывать их, распространять открытые и оберегать секретные ключи, вовремя отзывать старые и скомпрометированные — все делается автоматически, а переписка волшебным образом оказывается защищенной. Но так ли все хорошо на самом деле?

WARNING

Вся информация в этой статье предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Еще в 2004 году наш соотечественник Никита Борисов совместно с Ианом Голдбергом разработал универсальный криптографический протокол для систем мгновенного обмена сообщениями. Протокол получил название OTR (Off-the-Record Messaging) и начал открыто распространяться под лицензией GPL в виде готовой библиотеки. В дальнейшем OTR стал основой других популярных протоколов с дополнительными методами повышения безопасности. В частности, протокола Signal, ранее известного как TextSecure. На базе Signal работает и большинство других современных мессенджеров.

 

Принципы шифрования переписки

Концептуально все криптографические способы защиты переписки должны обеспечивать как минимум два базовых свойства: конфиденциальность и целостность сообщений. Конфиденциальность подразумевает, что только собеседники могут расшифровать сообщения друг друга. Ни интернет-провайдер, ни разработчик мессенджера, ни какая-то иная третья сторона не должны иметь технической возможности выполнять дешифровку за разумное время. Целостность обеспечивает защиту от случайных искажений и целенаправленных атак подмены. Любое измененное при передаче сообщение будет автоматически отклонено принимающей стороной как поврежденное и утратившее доверие.

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

Наверняка ты замечал, что в мессенджерах доставляются пропущенные сообщения. Они приходят даже в том случае, если ты беседовал в групповом чате и вдруг надолго отключился посреди разговора. Это и есть асинхронность: сообщения шифруются и доставляются независимо друг от друга. При этом за счет временных меток и некоторых дополнительных механизмов сохраняется их логическая последовательность.

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

Аналогично обратная секретность обеспечивает защиту будущих сообщений при компрометации текущего ключа. Новые ключи генерируются таким образом, что их взаимосвязь с предыдущими вычислить крайне сложно.

Прямая и обратная секретность реализованы в современных механизмах управления ключами. В протоколе Signal для этого используется алгоритм «Двойной храповик» (Double ratchet, DR). Он был разработан в 2013 году консультантом по криптографии Тревором Перрином (Trevor Perrin) и основателем Open Whisper Systems Мокси Марлинспайком (Moxie Marlinspike).

Название является отсылкой к механической шифровальной машине Enigma, в которой использовались храповики — шестеренки с наклонными зубцами, двигающиеся только в одном направлении. За счет этого в шифровальной машине исключалось состояние шестеренок, повторяющее одно из недавно использованных.

По аналогии с ними «цифровой храповик» также препятствует повторному использованию прежних состояний шифрсистемы. DR часто меняет сессионные ключи, при этом не давая повторно использовать ранее сгенерированные. Этим он как раз и обеспечивает прямую и обратную секретность, то есть дополнительную защиту отдельных сообщений. Даже в случае удачного подбора одного сессионного ключа атакующая сторона сможет расшифровать только зашифрованные им сообщения, а это всегда малая часть переписки.

В протоколе Signal реализовано и множество других интересных механизмов, описание которых выходит за рамки статьи. С результатами его аудита можно ознакомиться здесь.

 

Signal и его аналоги

Предоставляемое Signal сквозное шифрование сегодня применяется как в одноименном мессенджере от Open Whisper Systems, так и во многих сторонних: WhatsApp, Facebook Messenger, Viber, Google Allo, G Data Secure Chat — все они используют оригинальную или слегка модифицированную версию Signal Protocol, иногда давая им собственные названия. Например, у Viber это протокол Proteus — по сути, тот же Signal с другими криптографическими примитивами.

Однако при схожей реализации сквозного шифрования приложение может компрометировать данные другими способами. Например, WhatsApp и Viber имеют функцию резервного копирования истории переписки. Вдобавок WhatsApp отправляет статистику общения на серверы Facebook. Защита у локальной и облачной копии переписки формальная, а метаданные вообще никак не шифруются — об этом открыто говорится в лицензионном соглашении.

По метаданным видно, кто с кем общается и как часто, какие устройства для этого использует, где при этом находится и так далее. Это огромный пласт косвенной информации, которую можно использовать против собеседников, считающих свой канал связи защищенным. Например, АНБ неважно, какими именно словами подозреваемый поздравил Ассанжа с оставлением Обамы в дураках и что Джулиан ему ответил. Важно то, что они переписываются.

Как уже говорилось выше, все мессенджеры периодически меняют сессионные ключи шифрования, и это нормальный процесс. Основной же ключ может смениться, если собеседник перебрался на другое устройство, надолго ушел в офлайн… или кто-то начал писать от его имени, угнав аккаунт.

В оригинальном приложении Signal всем участникам беседы в таком случае отправляется уведомление о смене ключа. В WhatsApp и других мессенджерах эта настройка по умолчанию отключена, так как она не несет большинству пользователей значимой информации. Также ключ меняется при долгом отсутствии собеседника онлайн — это и баг, и фича одновременно.

Включение уведомления о смене ключа в WhatsApp
Включение уведомления о смене ключа в WhatsApp

Как писал по этому поводу исследователь из Калифорнийского университета в Беркли Тобиас Бёлтер (Tobias Boelter), при атаке на сервис возможно создать новый ключ и получить сообщения вместо адресата. Более того, то же самое могут сделать и сами операторы серверов WhatsApp — например, по запросу спецслужб.

Разработчики протокола Signal опровергают выводы Бёлтера и встают на защиту WhatsApp. По их словам, подмена ключа дает доступ только к недоставленным сообщениям. Слабое утешение.

Включить уведомление о смене ключа можно в настройках, вот только на практике этот режим параноика вряд ли что-то даст. Мессенджер уведомляет о смене ключа только после повторной отправки сообщений. Считается, что так удобнее самим пользователям.

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

Заинтересовала статья, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для статей, опубликованных более двух месяцев назад.


11 комментарий

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Trusted Platform Module компании Infineon Technologies уязвимы, а их RSA-ключи ненадежны

Исследователи обнаружили, что криптографические чипы компании Infineon Technologies, котор…