Мы хотели предоставить нашим пользователям максимальный уровень конфиденциальности переписки и решили, что нам необходимо иметь, так называемую, совершенную прямую безопасность (Perfect Forward Secrecy или PFS). PFS заключает в том, что долгосрочная ключевая информация, хранимая на устройствах пользователей, не используется для шифрования сообщений и документов. Вместо этого, между пользователями создается временный (эфемерный) ключ, который меняется с каждым новым сообщением, а долгосрочные ключи используются только для взаимной аутентификации.
Таким образом, утечка долгосрочных ключей может скомпрометировать переписку пользователей, которая состоится после факта утечки, но не позволит злоумышленнику расшифровать трафик, сформированный до утечки ключей.
Проблема совершенной прямой безопасности заключается в необходимости присутствия двух пользователей в момент начала коммуникации для согласования эфемерного ключа по процедуре Диффи — Хеллмана. Очевидно, что пользователи мобильных устройств могут быть иногда недоступны (поэтому, например, если вы пользуетесь секретными чатами Telegram, то, при создании такого чата, вы видите сообщение «Ждем, когда собеседник будет онлайн» — это связанно с тем, что приложению необходимо согласовать эфемерный ключ).
Для решения этой проблемы мы применили методику «разрыва» процедуры Диффи — Хеллмана во времени. Каждый пользователь публикует свои «частичные» ключи (которые при стандартной процедуре он должен отправлять в ответ на запрос согласования) заранее на сервере (разумеется, снабжая их своей подписью и временем жизни), и, если мы хотим создать защищенную сессию с новым контактом, то мы забираем «частичный» ключ и считаем его «ответом» пользователя на наш запрос согласования, то есть можем сформировать полный ключ и начать отправлять сообщения и документы.
Получатель сессии, будучи онлайн, загрузит с сервера запрос на создание сессии и «доформирует» его до эфемерного ключа (суть протокола Диффи — Хеллмана в том, что этот эфемерный ключ будет таким же, какой получил инициатор сессии) и сможет расшифровывать входящие сообщения.