Сверка ключа устройства
При привязке устройства подписанта владелец workspace выдаёт этому устройству долю ключа, зашифрованную его публичным ключом. Перед выдачей владелец сверяет ключ, на который будет зашифрована доля, с ключом, который показывает само устройство. Пока ключи не совпали, Pert Mobile владельца долю не выдаёт.
Сверка одинакова для подписанта с Pert Mobile и для Co-Signer.
Кто что делает
| Участник | Где | Что делает |
|---|---|---|
| Подписант с Pert Mobile | экран «Ключ устройства»: открывается сразу после привязки и доступен в профиле | показывает владельцу QR-код и отпечаток |
| Оператор Co-Signer | терминал Co-Signer, см. Ключ устройства | передаёт владельцу QR-код или отпечаток |
| Владелец workspace | карточка «Новый подписант» в Pert Mobile | сканирует QR-код или сверяет отпечаток, затем нажимает «Добавить» |
Как сверить
- Подписант открывает ключ устройства: экран в Pert Mobile или вывод терминала Co-Signer.
- Владелец в карточке «Новый подписант» нажимает «Сканировать QR» и наводит камеру на QR-код подписанта. Приложение сверяет ключ целиком и показывает «Ключ совпадает с устройством подписанта».
- Если устройство подписанта не рядом, он диктует отпечаток по каналу, где владелец узнаёт собеседника: телефонный или видеозвонок. Владелец сверяет все восемь групп на карточке и пропускает сканирование.
- Владелец нажимает «Добавить», и устройство получает долю ключа.
Ключ не совпадает
Если сканирование показало «Ключ не совпадает», кнопка «Добавить» заблокирована: долю пришлось бы шифровать на ключ, которого у устройства подписанта нет, и оно не смогло бы её расшифровать. Разблокирует кнопку только повторное сканирование с совпадением. Нажмите «Отклонить» и свяжитесь с подписантом.
Отпечаток не пересылайте
Не принимайте отпечаток в почте или мессенджере, где нельзя убедиться в отправителе. Тот, кто может подменить ключ, может подменить и такое сообщение.
Формат отпечатка
Отпечаток считается из публичного ключа шифрования устройства: 32 байта X25519, которые устройство регистрирует при привязке. В том же формате Pert Mobile и Pert Backup показывают ключ восстановления.
- SHA-256 от 32 байт ключа.
- Первые 16 байт результата.
- Шестнадцатеричная запись заглавными буквами.
- Восемь групп по четыре символа через пробел.
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 бит: подобрать другой ключ с тем же отпечатком практически невозможно.