Перейти к содержанию

Сверка ключа устройства

При привязке устройства подписанта владелец workspace выдаёт этому устройству долю ключа, зашифрованную его публичным ключом. Перед выдачей владелец сверяет ключ, на который будет зашифрована доля, с ключом, который показывает само устройство. Пока ключи не совпали, Pert Mobile владельца долю не выдаёт.

Сверка одинакова для подписанта с Pert Mobile и для Co-Signer.

Кто что делает

Участник Где Что делает
Подписант с Pert Mobile экран «Ключ устройства»: открывается сразу после привязки и доступен в профиле показывает владельцу QR-код и отпечаток
Оператор Co-Signer терминал Co-Signer, см. Ключ устройства передаёт владельцу QR-код или отпечаток
Владелец workspace карточка «Новый подписант» в Pert Mobile сканирует QR-код или сверяет отпечаток, затем нажимает «Добавить»

Как сверить

  1. Подписант открывает ключ устройства: экран в Pert Mobile или вывод терминала Co-Signer.
  2. Владелец в карточке «Новый подписант» нажимает «Сканировать QR» и наводит камеру на QR-код подписанта. Приложение сверяет ключ целиком и показывает «Ключ совпадает с устройством подписанта».
  3. Если устройство подписанта не рядом, он диктует отпечаток по каналу, где владелец узнаёт собеседника: телефонный или видеозвонок. Владелец сверяет все восемь групп на карточке и пропускает сканирование.
  4. Владелец нажимает «Добавить», и устройство получает долю ключа.

Ключ не совпадает

Если сканирование показало «Ключ не совпадает», кнопка «Добавить» заблокирована: долю пришлось бы шифровать на ключ, которого у устройства подписанта нет, и оно не смогло бы её расшифровать. Разблокирует кнопку только повторное сканирование с совпадением. Нажмите «Отклонить» и свяжитесь с подписантом.

Отпечаток не пересылайте

Не принимайте отпечаток в почте или мессенджере, где нельзя убедиться в отправителе. Тот, кто может подменить ключ, может подменить и такое сообщение.

Формат отпечатка

Отпечаток считается из публичного ключа шифрования устройства: 32 байта X25519, которые устройство регистрирует при привязке. В том же формате Pert Mobile и Pert Backup показывают ключ восстановления.

  1. SHA-256 от 32 байт ключа.
  2. Первые 16 байт результата.
  3. Шестнадцатеричная запись заглавными буквами.
  4. Восемь групп по четыре символа через пробел.
300C 9C96 03B9 2A4B 39ED 3958 BF92 4011

Формат QR-кода

QR-код содержит сам ключ, а не отпечаток:

pert://device-key?v=1&pkc=<ключ>
Параметр Значение
v версия формата, сейчас 1; QR-код с другой версией не принимается
pkc 32 байта ключа в base64url без символов =

Сканер декодирует pkc и сравнивает 32 байта с ключом, на который будет зашифрована доля. Строковые записи ключа не сравниваются.

Тестовые векторы

Ключи взяты из RFC 7748, раздел 6.1: их можно получить из опубликованных там приватных ключей.

Вектор 1 Вектор 2
Ключ, hex 8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f
Ключ, base64 hSDwCYkwp1R0i33ctD73Wg2/Og0mOBr066SpjqqbTmo= 3p7bfXt9wbTTW2HC7OQ1Nz+DQ8hbeGdNrfx+FG+IK08=
Отпечаток 300C 9C96 03B9 2A4B 39ED 3958 BF92 4011 F35E 5616 160A 30BF 3C6E 79FA 73C5 76D4
QR-код pert://device-key?v=1&pkc=hSDwCYkwp1R0i33ctD73Wg2_Og0mOBr066SpjqqbTmo pert://device-key?v=1&pkc=3p7bfXt9wbTTW2HC7OQ1Nz-DQ8hbeGdNrfx-FG-IK08

Отпечаток можно проверить командой:

printf '%s' 'hSDwCYkwp1R0i33ctD73Wg2/Og0mOBr066SpjqqbTmo=' | base64 -d \
  | openssl dgst -sha256 -binary | head -c 16 | xxd -p -u \
  | sed 's/..../& /g'

Почему так

  • Отпечаток и сверка считаются на каждой стороне из самого ключа. Отпечаток, полученный от платформы, не принимается: подмена ключа при передаче подменила бы и его.
  • 16 байт SHA-256 дают 128 бит: подобрать другой ключ с тем же отпечатком практически невозможно.