Вики ZooBC
Интеграции

Аппаратные кошельки

Аппаратный кошелёк — небольшое устройство, которое хранит закрытый ключ и подписывает на собственном экране, так что ключ никогда не касается компьютера. ZooBC написал спецификацию подписания для производителей таких устройств. Она определяет, что устройство должно проверить, показать и вычислить, прежде чем подписать транзакцию ZooBC.

Идея: устройство решает, что подписывать

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

Ключи

Устройство выводит свои ключи из фразы восстановления по пути m/44'/883'/account', используя SLIP-0010 для Ed25519, где 883 — тип монеты ZooBC (ключи и типы аккаунтов). Поэтому подпись — Ed25519, как у любого нативного аккаунта ZooBC, а не подпись secp256k1, которую делает устройство для Bitcoin. Ключ никогда не покидает устройство.

Что должно делать устройство

  1. Получить от компьютера неподписанные байты транзакции и хеш генезиса цепочки.
  2. Разобрать каждое поле само и отклонить любую транзакцию, поля длины которой не сходятся в точности.
  3. Проверить отправителя: отклонить, если отправитель — не собственный выведенный аккаунт устройства.
  4. Показать сеть, тип транзакции, сумму, получателя полностью, комиссию, любой платёж survival (плата за сохранение данных (долговечность)), сообщение и любое эскроу (эскроу).
  5. Дождаться одобрения пользователя.
  6. Вычислить дайджест, привязанный к цепочке, само — SHA3-256("ZBC-TX" ‖ хеш генезиса ‖ байты) — и подписать его ключом Ed25519 (подписи, привязанные к цепочке).
  7. Вернуть компьютеру только подпись.
Компьютер отправляет неподписанные байты и хеш генезиса; устройство разбирает каждое поле, проверяет отправителя, показывает сеть, полного получателя, сумму и комиссию, ждёт одобрения, само вычисляет дайджест и возвращает подпись Ed25519; готовый 32-байтовый дайджест отклоняется
Компьютер отправляет неподписанные байты и хеш генезиса; устройство разбирает каждое поле, проверяет отправителя, показывает сеть, полного получателя, сумму и комиссию, ждёт одобрения, само вычисляет дайджест и возвращает подпись Ed25519; готовый 32-байтовый дайджест отклоняется

Почему такие правила

  • Никогда не подписывать готовый дайджест. 32-байтовый дайджест, присланный компьютером, может оказаться хешем транзакции, которую пользователь никогда не видел. Устройство должно строить дайджест из байтов, которые оно разобрало и показало. По той же причине команда подписания сырых сообщений отклоняет входные данные длиной ровно 32 байта, чтобы дайджест транзакции нельзя было подсунуть под видом сообщения.
  • Показывать получателя полностью, никогда не сокращая. Похожий адрес можно подобрать так, чтобы он совпадал с началом и концом сокращённого.
  • Показывать сеть. Хеш генезиса определяет, в какой цепочке действительна подпись, поэтому пользователь видит, для какой сети предназначена транзакция (devnet, testnet и mainnet).

С чего начать

Спецификация рекомендует, чтобы устройства сначала поддерживали три типа транзакций: SendZBC (платёж), TransferToken (перевод токена, см. Выпуск токена) и ApprovalEscrow (утверждение платежа через эскроу).

См. также