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

Ключ устройства

У каждой установки rChat есть ключ устройства: ключ подписи P-256, созданный в защищённом оборудовании телефона, в Secure Enclave на iPhone и iPad. Его единственная задача — сделать безопасным автоматическое восстановление сообщений. Без него тот, кто украл копию ключей вашей учётной записи, мог бы заставить телефоны ваших контактов автоматически повторно отправлять сообщения ему.

Экран My QR Code в rChat с кнопкой Copy под кодом Экран My QR Code в rChat с кнопкой Copy под кодом
Ваш код несёт ваш ключ устройства
Экран кода безопасности в rChat с 60 цифрами, разбитыми на группы Экран кода безопасности в rChat с 60 цифрами, разбитыми на группы
Код безопасности его не включает
  • Он никогда не покидает телефон. Закрытый ключ создаётся внутри Secure Enclave и не может быть экспортирован. rChat хранит в связке ключей только зашифрованную ссылку на него, доступную после первой разблокировки телефона, только на этом устройстве. Он никогда не синхронизируется и не может быть восстановлен на другом телефоне.
  • Он переживает переустановку на том же телефоне, потому что iOS сохраняет элементы связки ключей, когда приложение удаляют и устанавливают снова. На другом телефоне его никогда нет.
  • Ваш ключ идентичности ручается за него. Ваш код (QR-код в My QR Code или скопированный текст) несёт открытую часть ключа устройства, флаг, находится ли он в защищённом оборудовании, и подпись вашего ключа идентичности над ними. Код, подпись которого не проходит проверку, отклоняется с сообщением «This code is damaged. Ask them to show it again.»
  • Он подписывает только одно: уведомление, которое ваш телефон отправляет, начиная новый защищённый сеанс с контактом, и в котором перечислены сообщения, которые он не смог прочитать. Подпись привязана к этому одному сеансу, поэтому её нельзя повторить в другом.
  • Ретранслятор его никогда не видит. Он не отправляется ретранслятору, а уведомление идёт внутри сеанса со сквозным шифрованием.
  • Коды безопасности его не включают. Они охватывают только ключи идентичности и согласования, поэтому новый ключ устройства не меняет ваш код безопасности.

Ваш телефон берёт ключ устройства контакта только из того, что вы сделали сами:

  • сканирование его кода при добавлении;
  • сканирование его кода из Contact Info (Scan their code);
  • принятие его запроса сканированием его кода;
  • вставка его кода, но только если эта вставка добавляет его как совершенно новый контакт (см. Вставка кода).

Сканирование кода с другим ключом устройства заменяет старый. Кроме сканирования и вставки при первом добавлении, ничто его не задаёт и не меняет: ни ретранслятор, ни ключи, которые публикует контакт, ни запрос, ни уведомление. Применённая ротация ключей удаляет его.

Почему лично. Вор, у которого есть копия чьих-то ключей учётной записи, может сделать код со своим ключом устройства и отправить его вам удалённо. Сканирование кода с телефона самого собеседника у вас на глазах — самое близкое, что может сделать rChat, чтобы знать, что ключ находится на его телефоне. Это не доказательство: код, показанный в видеозвонке или на картинке, тоже сканируется.

Вставленный код задаёт ключ устройства, только если вставка добавляет совершенно новый контакт — того, кого вы ещё не приняли. Это доверие при первом использовании, как и для его идентичности.

Для уже существующего контакта вставка никогда не задаёт, не заменяет и не удаляет ключ устройства. Экран вставки сообщает: «Scan their code in person to turn on automatic message recovery.»

У контакта нет закреплённого ключа устройства, если вы добавили его из старого кода (созданного версией rChat до ключей устройства), если он впервые связался с вами через запрос или после того, как он сменил ключи ротацией. Тогда Contact Info показывает:

«Scan their code again to turn on automatic message recovery.»

Всё остальное работает как прежде. Единственное отличие: потерянные сообщения показывают Not delivered с кнопкой Resend, а не отправляются повторно автоматически.

Что сделал собеседникЕго ключ устройстваЧто вы видите, если сообщения потерялись
Переустановил rChat на том же телефонеНе изменилсяСообщения отправлены повторно автоматически, с пометкой Resent
Перешёл на новый телефонНовыйNot delivered и Resend, пока вы снова не отсканируете его код
Сбросил идентичность (Reset Identity)Новая учётная записьНовый контакт: добавьте его новый код
Сменил ключи ротациейУдалён на вашем телефонеНичего не отправляется повторно автоматически: вы нажимаете Resend, если доверяете изменению. Снова отсканируйте его код, чтобы закрепить новый ключ устройства

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

Где Secure Enclave недоступен, ключ устройства — программный ключ P-256 в связке ключей, только на этом устройстве, и код об этом сообщает. Это касается старых симуляторов iOS (современные симуляторы iOS на Apple silicon используют ключ Secure Enclave). Для такого контакта сведения о ключах в Contact Info показывают:

«Their device key isn’t stored in secure hardware.»

Программный ключ работает так же, с одним ограничением: тот, кто извлечёт с телефона и ключи учётной записи, и этот элемент связки ключей, сможет запускать автоматическую повторную отправку. Для этого нужно скомпрометировать сам телефон.