Криптография

Signal Protocol

WhatsApp: 2 миллиарда пользователей, 100 миллиардов сообщений в день - все зашифрованы Signal Protocol. Ни WhatsApp, ни Meta не могут прочитать переписку. ФБР получало разрешение на прослушку и не находило ничего кроме метаданных. Signal Protocol - лучшее в криптографии мессенджеров.

  • **WhatsApp**: Signal Protocol с 2016. 2 млрд пользователей. Использует X3DH для установки сессий и Sender Keys для групп.
  • **Signal**: оригинальная реализация. Sealed Sender с 2018. Private Contact Discovery через SGX. Открытый код.
  • **iMessage**: Apple использует элементы похожие на Double Ratchet. В процессе перехода на MLS (RFC 9420).
  • **Matrix/Element**: открытый протокол с Double Ratchet (Olm). Используется в правительстве Франции, немецком здравоохранении.

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

Double Ratchet Algorithm (Marlinspike & Perrin, 2013): каждое сообщение использует уникальный ключ, производный от цепочки предыдущих. Два 'трещотки': Symmetric-key Ratchet (KDF chain) и Diffie-Hellman Ratchet (обновление через DH при каждом ответе).

Signal Protocol используют: Signal (>100M пользователей), WhatsApp (>2 млрд), Facebook Messenger (secret chats), Google Messages (RCS E2E), Skype (private conversations). Спецификация открыта: signal.org/docs/specifications/doubleratchet/

В чём разница между forward secrecy и break-in recovery в Double Ratchet?

X3DH: первый обмен с незнакомым контактом

X3DH (Extended Triple Diffie-Hellman, Marlinspike & Perrin, 2016): установка первой сессии с незнакомым контактом без онлайн-присутствия получателя. Bob публикует набор prekeys на сервере заранее, Alice использует их для создания общего секрета.

Без OPK (все использованы): X3DH работает без DH4, но теряется защита от replay если server скомпрометирован. Signal и WhatsApp поддерживают пачки из 100+ OPK. Signal server хранит публичные prekeys - он не может вычислить master_secret, видит только публичные ключи.

Зачем X3DH использует четыре DH-вычисления вместо одного?

Sealed Sender: анонимность отправителя

Sealed Sender (Signal, 2018): сервер Signal не видит кто кому отправляет сообщение. Сообщение зашифровано так, что только получатель может узнать отправителя. Сервер видит только получателя (необходимо для доставки).

Ограничение Sealed Sender: timing analysis. Если Alice пишет Bob'у и сервер видит сообщение Bob'у через 50ms после активности Alice - можно скоррелировать. Signal работает над этим через delays и mix networks. Metadata protection = harder problem than content encryption.

Что именно видит и чего не видит Signal сервер при Sealed Sender?

Групповые сообщения: Sender Keys

В группе из n участников отправка каждому через Double Ratchet = n шифрований. Для больших групп это неэффективно. Signal использует Sender Keys: отправитель создаёт Sender Key Chain и отправляет его каждому участнику через Double Ratchet. Сообщение шифруется один раз.

MLS (Messaging Layer Security, RFC 9420, 2023): протокол IETF для E2E групп с эффективным добавлением/удалением участников. O(log n) вместо O(n) для rotation. TreeKEM - бинарное дерево ключей. Apple iMessage и Matrix изучают MLS.

Почему Signal использует Sender Keys для групп вместо индивидуальных Double Ratchet сессий с каждым?

Итоги

  • **Double Ratchet**: каждое сообщение - новый ключ. Forward secrecy (прошлое защищено) + break-in recovery (будущее защищено через DH Ratchet).
  • **X3DH**: установка сессии с оффлайн-контактом через prekeys на сервере. 4 DH-вычисления для аутентификации и forward secrecy.
  • **Sealed Sender**: сервер видит получателя, не видит отправителя. Идентичность шифруется для получателя.
  • **Sender Keys**: O(1) шифрований для групповых сообщений. MLS (RFC 9420) = эффективная ротация при выходе участника O(log n).

Связанные темы

Signal Protocol объединяет все современные примитивы:

  • Обмен ключами — X3DH и DH Ratchet используют X25519 ECDH. X3DH = расширенный triple DH.
  • Управление ключами — HKDF используется в X3DH для вывода master_secret и в Double Ratchet для KDF chain.
  • ECC на практике — Ed25519 для Identity Keys (подписи), X25519 для всех DH операций в Protocol.

Вопросы для размышления

  • Signal сервер хранит метаданные: кто кому писал, когда, размер сообщений. Как Sealed Sender ограничивает это и насколько?
  • Double Ratchet обеспечивает break-in recovery: после компрометации ключа новые сообщения снова безопасны. Когда именно это восстановление происходит?
  • MLS (RFC 9420) обещает O(log n) вместо O(n^2) для rotation при выходе участника. Как TreeKEM достигает этого через бинарное дерево ключей?

Связанные уроки

  • net-23-https-tls
Signal Protocol

0

1

Войти