Курс «Архитектура мессенджера» · Часть 5 · Протоколы безопасности

Раздел 16. Double Ratchet и forward secrecy

Смена ключа на каждое сообщение; forward secrecy и post-compromise security простыми словами; почему утечка одного ключа не раскрывает всю переписку.

В прошлом разделе X3DH (Extended Triple Diffie–Hellman — «расширенный тройной обмен ключами Диффи — Хеллмана») установил первый общий секретный ключ Алисы и Боба. Но возникает резонная мысль: а что, если шифровать этим единственным ключом всю переписку годами? Тогда одна его утечка раскроет вообще всё. Поэтому протокол ключ постоянно меняет. Механизм этой смены и называется Double Ratchet. Снова без математики — только смысл и зачем.

Главная идея: новый ключ на каждое сообщение

Сначала про слово ratchet — это храповик: механизм, который крутится только вперёд и не откатывается назад (как трещотка в гаечном ключе). Это точная метафора происходящего.

На каждое сообщение ключ «прокручивается» в новый, а старый сразу удаляется. Вернуться к старому ключу нельзя — храповик назад не ходит. То есть каждое сообщение шифруется своим одноразовым ключом, который после использования уничтожается.

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

Почему «двойной»

Double Ratchet — это двойной храповик, два механизма вместе:

  • Первый прокручивается на каждом сообщении — даёт свежий ключ под каждое сообщение.
  • Второй подмешивает новый случайный материал (свежий обмен Диффи — Хеллмана) каждый раз, когда стороны обмениваются ответами туда-обратно.

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

Свойство 1: forward secrecy — защита прошлого

Forward secrecy (можно перевести как «прямая секретность») — это свойство: если злоумышленник украл ключ сегодня, он не сможет прочитать прошлые сообщения.

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

Короткая формула: утечка ключа не раскрывает прошлое. В аналогии с сейфами — украв сегодняшний ключ, ты не откроешь вчерашние сейфы: их ключи уничтожены.

Свойство 2: post-compromise security — восстановление будущего

Post-compromise security (по-английски post-compromise security — «безопасность после компрометации»; иногда говорят future secrecy — «секретность будущего») — это про другую сторону времени.

Свойство такое: даже если злоумышленник на время добыл ключ, после следующего обмена свежим материалом защита „самовосстанавливается", и будущие сообщения снова становятся ему недоступны. Тут как раз работает второй храповик: как только стороны обменялись новыми ответами, подмешалась свежая случайность — и старый украденный ключ к будущим сообщениям больше не подходит.

Короткая формула: защита лечится сама.

Зачем всё это: утечка перестаёт быть катастрофой

Сложим вместе. Без храповика один украденный ключ = вся переписка, и прошлая, и будущая, скомпрометирована разом. С Double Ratchet утечка ключа задевает в худшем случае лишь несколько сообщений вокруг момента кражи:

  • прошлое защищено forward secrecy (старые ключи уже удалены);
  • будущее восстанавливается post-compromise security (подмешается свежая случайность).

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

Вопросы интервьюера (с разбором)

«Что такое forward secrecy и зачем она?» Образец: «Forward secrecy — гарантия, что утечка текущего ключа не раскрывает прошлые сообщения. Достигается тем, что каждое сообщение шифруется своим одноразовым ключом, который удаляется сразу после использования. Нужна, чтобы кража ключа не означала компрометацию всей истории переписки.»

«Если злоумышленник украл ключ сегодня — что он сможет прочитать?» Образец: «Очень немного — в худшем случае пару сообщений вокруг момента кражи. Прошлые сообщения он не прочитает: их ключи уже уничтожены (forward secrecy). А будущие закроются снова, как только стороны обменяются свежим материалом и защита самовосстановится (post-compromise security). Один украденный ключ не раскрывает всю переписку.»

«Почему ключи постоянно меняются?» Образец: «Чтобы ограничить ущерб от любой утечки. Это делает Double Ratchet — двойной храповик: один механизм меняет ключ на каждое сообщение и удаляет старый, второй подмешивает свежую случайность при обмене ответами. Так компрометация одного ключа задевает минимум сообщений, а не всю переписку.»


#мессенджер #безопасность #signal-protocol #double-ratchet #forward-secrecy #подготовка-к-интервью