Криптография
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 достигает этого через бинарное дерево ключей?