Sender Keys
Sender Keys — это криптографический протокол, используемый для сквозного шифрования (end-to-end encryption) в групповых чатах. Он обеспечивает конфиденциальность и целостность сообщений, передаваемых между несколькими участниками, при этом каждый участник группы имеет свой уникальный ключ шифрования. Протокол был разработан компанией Open Whisper Systems (предшественник Signal Foundation) и является частью семейства протоколов Signal Protocol, который также используется в мессенджерах Signal, WhatsApp (продукт Meta, признанной экстремистской и запрещённой в РФ) и Google Messages.
История
Протокол Sender Keys был создан как эволюция более раннего протокола группового шифрования, известного как «Group Messaging». В отличие от парного шифрования (как в протоколе Double Ratchet), где для каждого участника группы создаётся отдельный сеанс, Sender Keys позволяет одному отправителю зашифровать сообщение один раз и отправить его всем участникам группы, что значительно снижает вычислительную нагрузку и объём передаваемых данных. Первая реализация протокола была представлена в 2014 году в приложении Signal (разработанном Open Whisper Systems). В 2016 году протокол был открыт и задокументирован, что позволило другим разработчикам интегрировать его в свои продукты.
Принцип работы
Основные компоненты
Протокол Sender Keys основан на нескольких ключевых элементах:
- Цепочка ключей отправителя (Sender Key Chain): последовательность ключей, генерируемых отправителем для каждого сообщения. Каждый новый ключ получается из предыдущего с помощью односторонней функции (например, хеш-функции).
- Ключ подписи (Signing Key): пара асимметричных ключей (открытый и закрытый), используемая для подписи сообщений, чтобы подтвердить их авторство.
- Ключ цепочки (Chain Key): симметричный ключ, используемый для шифрования сообщений. Он обновляется после каждого отправленного сообщения.
- Ключ сеанса (Session Key): временный ключ, генерируемый для каждого сообщения на основе цепочки ключей отправителя и ключа цепочки.
Процесс отправки сообщения
- Инициализация: при создании группы каждый участник генерирует свою уникальную цепочку ключей отправителя и ключ подписи. Эти данные распространяются среди всех участников группы через защищённый канал (например, с использованием протокола X3DH для установления начального доверия).
- Шифрование: отправитель выбирает следующий ключ из своей цепочки ключей отправителя, вычисляет ключ сеанса и шифрует сообщение с помощью симметричного алгоритма (например, AES-256 в режиме CBC или GCM). Затем сообщение подписывается закрытым ключом подписи отправителя.
- Отправка: зашифрованное сообщение и подпись отправляются всем участникам группы. Каждый участник получает одно и то же зашифрованное сообщение, что делает протокол эффективным для больших групп.
- Дешифрование: каждый участник группы, получив сообщение, сначала проверяет подпись с помощью открытого ключа подписи отправителя. Затем он использует свой экземпляр цепочки ключей отправителя (который он получил при инициализации) для вычисления того же ключа сеанса и дешифрования сообщения.
Обновление ключей
Для обеспечения прямой секретности (forward secrecy) и предотвращения компрометации прошлых сообщений, ключи в протоколе Sender Keys регулярно обновляются. После каждого отправленного сообщения отправитель обновляет свою цепочку ключей, генерируя новый ключ из предыдущего. Это означает, что даже если злоумышленник получит текущий ключ, он не сможет расшифровать предыдущие сообщения, так как ключи для них уже уничтожены.
Преимущества и недостатки
Преимущества
- Эффективность: отправитель шифрует сообщение только один раз, независимо от количества участников группы. Это значительно снижает вычислительную нагрузку и объём передаваемых данных по сравнению с протоколами, где для каждого участника требуется отдельное шифрование (например, при использовании парных сеансов Double Ratchet).
- Простота: протокол не требует сложного управления ключами для каждого участника группы. Все участники получают одинаковую цепочку ключей отправителя, что упрощает реализацию.
- Прямая секретность: благодаря обновлению ключей после каждого сообщения, компрометация текущего ключа не раскрывает прошлые сообщения.
Недостатки
- Отсутствие поточного шифрования (no perfect forward secrecy for future messages): если злоумышленник получит доступ к цепочке ключей отправителя, он сможет расшифровать все будущие сообщения, отправленные этим отправителем, до тех пор, пока цепочка не будет обновлена. Это ограничение частично компенсируется регулярным обновлением ключей, но не устраняет его полностью.
- Уязвимость к компрометации одного участника: если злоумышленник скомпрометирует одного участника группы, он получит доступ ко всем цепочкам ключей отправителей, что позволит ему расшифровывать все сообщения в группе, отправленные этими отправителями.
- Сложность управления ключами при большом количестве участников: при добавлении или удалении участника группы необходимо перераспределить цепочки ключей отправителей для всех участников, что может быть ресурсоёмким процессом.
Применение
Протокол Sender Keys используется в нескольких популярных мессенджерах, реализующих сквозное шифрование:
- Signal: протокол Sender Keys является основным для групповых чатов в Signal. Приложение использует его в сочетании с протоколом Double Ratchet для парных сеансов и протоколом X3DH для установления начального доверия.
- WhatsApp: начиная с 2016 года, WhatsApp использует протокол Signal Protocol, включая Sender Keys, для шифрования групповых чатов. Однако, в отличие от Signal, WhatsApp не раскрывает все детали своей реализации, что вызывает критику со стороны экспертов по безопасности.
- Google Messages: с 2020 года Google Messages использует протокол Signal Protocol для сквозного шифрования в чатах RCS, включая групповые чаты. Реализация Sender Keys в Google Messages была подтверждена в 2023 году.
Критика и альтернативы
Протокол Sender Keys подвергался критике за отсутствие полной прямой секретности для будущих сообщений. В ответ на это, в 2023 году команда Signal представила новую версию протокола, известную как PQXDH (Post-Quantum Extended Diffie-Hellman), которая добавляет устойчивость к квантовым атакам, но не решает проблему компрометации ключей отправителя.
Альтернативой Sender Keys является протокол MLS (Messaging Layer Security), разрабатываемый IETF. MLS использует древовидную структуру ключей (TreeKEM), которая позволяет более эффективно управлять ключами при добавлении или удалении участников, а также обеспечивает лучшую прямую секретность. MLS находит применение в корпоративных мессенджерах и приложениях, требующих высокой безопасности.
Интересные факты
- Протокол Sender Keys был разработан Мокси Марлинспайком (Moxie Marlinspike), основателем Open Whisper Systems, который также является создателем протокола Signal Protocol.
- В 2017 году протокол Sender Keys был проанализирован командой исследователей из Университета Оксфорда и Кембриджа, которые подтвердили его безопасность при правильной реализации.
- В 2021 году WhatsApp внедрил поддержку Sender Keys для групповых чатов, что позволило шифровать сообщения в группах до 256 участников.
Источники
- Open Whisper Systems. «Technical Information: Sender Keys». 2016.
- Marlinspike, M. «The Double Ratchet Algorithm». 2013.
- IETF. «Messaging Layer Security (MLS)». RFC 9420, 2023.
- WhatsApp. «WhatsApp Encryption Overview». 2016.
- Google. «End-to-End Encryption for RCS Messages». 2023.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →