ZooBC 维基
集成

签名消息与加密消息

并非每个签名都需要一笔交易。签名消息可以证明你持有某个密钥,既不转移任何资金,也不支付手续费;加密消息则只让其接收方能够阅读。本页介绍这两者,以及节点 API接受的两种相关签名。

证明你控制某个地址

想确认你控制某个 ZooBC 地址的网站,会向你发送一个随机质询。你用 zbc-cli sign-message,或用公共命令行工具任一移植版中的同一功能对它签名,网站再根据你的地址检查签名。对于原生 ZBC_ 地址,地址本身就是公钥,因此不需要其他任何东西。发送一笔付款同样能证明控制权,但那是一笔交易,需要支付手续费。永远不要用把私钥交给别人的方式来代替。

这一方案称为 ZBC-MSG-v2。它用 Ed25519 签署:

SHA3-256("ZBC-MSG-v2" ‖ genesis hash ‖ message)

这个摘要中有两部分很重要:

  • 标签。 交易是在另一个标签“ZBC-TX”下签署的。因此,消息签名永远不可能作为交易签名有效,交易签名也永远不可能作为消息签名有效。
  • 创世哈希。 它把签名绑定到一个网络:为 devnet 签名的消息永远无法在 testnet 或 mainnet 上通过验证(链绑定签名)。

在一段过渡期内,工具的 verify-message 也接受不带链信息的旧形式 ZBC-MSG-v1(对“ZBC-MSG”和消息做 SHA3-256)。过渡期在工具中写定的截止时间结束;此后只有 ZBC-MSG-v2 能通过验证。

标签 ZBC-MSG-v2、创世哈希和消息经 SHA3-256 哈希后用 Ed25519 签名,再根据 ZBC_ 地址验证;ZBC-TX 与 ZBC-MSG-v2 两个标签永远不能互换
标签 ZBC-MSG-v2、创世哈希和消息经 SHA3-256 哈希后用 Ed25519 签名,再根据 ZBC_ 地址验证;ZBC-TX 与 ZBC-MSG-v2 两个标签永远不能互换

消息签名是公共工具以及采用它的服务之间的一项约定,而不是链的功能。链上不存储任何内容,节点也没有对应的端点。

加密消息

每笔交易都可以携带一条消息(交易信封)。普通消息最多 256 字节。加密消息以标记“ZBE1”开头,后接一个发给接收方密钥的 libsodium 密封盒(sealed box),只有接收方的私钥才能打开。加密消息最多可达 320 字节,其中最多留出 268 字节给文本。

只有消息被加密。交易的其余部分,例如发送方、接收方和金额,与其他任何交易一样公开。

签名的 API 请求

节点 API 的大部分是开放的读取,交易也不需要 API 密钥,因为它自带签名。在请求本身必须签名的地方,签名是对文本 METHOD:PATH:TIMESTAMP:BODY 的 Ed25519 签名,有效期 300 秒。在 5 分钟内有 20 次签名认证失败的客户端会被锁定 300 秒。

取消待处理的交易

正在节点交易池中等待的交易,可以用 DELETE /api/v1/transactions/pending/ 后接其哈希,从该节点撤回。该请求带有对以下内容的签名:

SHA3-256("ZBC-CANCEL" ‖ genesis hash ‖ transaction hash)

它只从该节点的交易池中移除这份副本。已经持有该交易的其他节点仍可能把它打包进区块,因此取消只是一个请求,而不是保证。

另见