硬件钱包
硬件钱包是一种保存私钥、并在自身屏幕上完成签名的小型设备,因此密钥从不接触计算机。ZooBC 为这类设备的厂商编写了一份签名规范,规定了设备在签署 ZooBC 交易之前必须检查、显示和计算什么。
思路:由设备决定签署什么
计算机可能被攻破;设备才是用户信任的部分。因此,规范让设备掌握主导权。计算机只是提出一笔交易。设备逐个字段地读取它,向用户显示其含义,只签署用户批准的内容,并自己计算摘要。
密钥
设备按 m/44'/883'/account' 路径从助记词派生其密钥,Ed25519 采用 SLIP-0010,其中 883 是 ZooBC 的币种类型(密钥与账户类型)。因此签名是 Ed25519 签名,与任何原生 ZooBC 账户一样,而不是比特币设备所生成的 secp256k1 签名。密钥从不离开设备。
设备必须做什么
- 接收计算机发来的未签名交易字节和链的创世哈希。
- 自行解析每一个字段,并拒绝长度字段加总不完全吻合的任何交易。
- 检查发送方:除非发送方是设备自己派生的账户,否则拒绝。
- 显示网络、交易类型、金额、完整的接收方、手续费、任何存续押金(付费保存数据(存续))、消息以及任何托管(托管)。
- 等待用户批准。
- 自行计算链绑定摘要 SHA3-256("ZBC-TX" ‖ 创世哈希 ‖ 字节),并用 Ed25519 对其签名(链绑定签名)。
- 只返回签名给计算机。
为什么有这些规则
- 绝不签署现成的摘要。 计算机发来的 32 字节摘要可能是用户从未见过的某笔交易的哈希。设备必须用自己解析并显示过的字节来构建摘要。出于同样的原因,用于签署原始消息的命令会拒绝恰好 32 字节的输入,以免交易摘要被冒充为消息混进来。
- 完整显示接收方,绝不缩写。 可以造出一个相似地址,使其开头和结尾与缩写后的地址吻合。
- 显示网络。 创世哈希决定签名在哪条链上有效,因此要让用户看到这笔交易是面向哪个网络的(devnet、testnet 与 mainnet)。
从哪里开始
规范建议设备首先支持三种交易类型:SendZBC(付款)、TransferToken(代币转账,见 发行代币)和 ApprovalEscrow(批准一笔托管付款)。