Перейти к содержимому

Документация rChat

rChat — мессенджер со сквозным шифрованием, который вы запускаете сами. Сообщения шифруются на вашем телефоне с помощью согласования ключей X3DH и алгоритма Double Ratchet, с шифром XChaCha20-Poly1305. Сервер, называемый ретранслятором (relay), передаёт шифротекст, который не может расшифровать.

rChat — программа для самостоятельного размещения, выпускаемая PDG Global Limited (Гонконг) по лицензии AGPL-3.0-or-later. PDG Global Limited не запускает ретрансляторы для пользователей. Ретранслятор — это один исполняемый файл на Rust, который сам завершает TLS 1.3 и может сам получить сертификат Let’s Encrypt. Клиент — нативное приложение для iOS (iPhone и iPad); нативное приложение для Android запланировано, приложение для Mac появится позже. Исходный код ретранслятора — в rchat-core.

Эта документация описывает протокол версии 2. Ретранслятор и приложение должны использовать одну версию: старые приложения получают отказ с сообщением «client too old; update rChat».

  • Он не может читать сообщения. Сообщения зашифрованы сквозным шифрованием, и у ретранслятора нет ключей сообщений.
  • Он не может подменить ключи своими. Ключи каждой учётной записи подписаны её ключом идентичности, и приложение отвергает неподписанные ключи. Когда вы добавляете человека, сканируя его код, rChat запоминает его ключи и не будет общаться с ним под другими ключами.
  • Пока он работает, он видит метаданные соединений. Он видит, какие учётные записи подключены, когда и с какого IP-адреса, какие две учётные записи открыли разговор, а в течение до десяти минут — какая учётная запись пытается связаться с какой. Он не записывает это в журналы.
  • Он не хранит долговременных записей о том, кто с кем общается. То, что он держит в памяти для маршрутизации разговора, удаляется в течение десяти минут после отключения обоих собеседников. Сообщения для того, кто не в сети, хранятся в памяти до 72 часов (по умолчанию), под получателем, и удаляются после доставки.

В модели безопасности перечислено, от чего rChat защищает и от чего нет.

Ваш телефон Ретранслятор rChat Телефон собеседника
─────────── ────────────────── ───────────────────
Сообщение → [Double Ratchet, дополнение] → WebSocket в TLS 1.3 → [маршрут] → [расшифровка]
  1. Приложение подключается к ретранслятору по WebSocket внутри TLS 1.3, проверяет подписанную идентичность ретранслятора и доказывает свою идентичность в этом сеансе TLS.
  2. Оно публикует свои открытые ключи, подписанные ключом идентичности.
  3. Разговор открывается, только когда его запросили оба человека. Тот, у кого есть ваш код, но кого вы не приняли, отображается как запрос.
  4. Два телефона согласуют сеансовый ключ через X3DH и продолжают с Double Ratchet, так что каждое сообщение использует новый ключ. Каждое сообщение дополняется до размерной корзины.
  5. Ретранслятор пересылает зашифрованные пакеты или держит их в памяти, пока получатель не в сети.