证明语义

Signet 证书究竟证明什么。

本页面是产品的一部分,而不是营销内容。只有当各方对证明的声明内容达成一致时,证明才有意义。以下是声明本身、其背后的密码学原理,以及如何在无需信任我们的情况下进行核验。

声明

Signet 证书只做出一项范围窄但效力强的声明:某个地址私钥的持有者在某个时间签署了某条挑战消息。仅此而已。它证明的是对密钥的控制权,而非身份。

已证明(无需信任第三方)

  • 此地址针对这条挑战消息生成了此签名。
  • 签名人在签名时持有私钥。
  • 证书哈希在链上锚定时间之前已经存在。

未证明

  • 签名人的身份。
  • 控制权具有排他性,或密钥未被共享、未受胁迫使用。
  • 签名人是请求方的客户。身份绑定属于请求方的 KYC 工作。

如何证明

请求方发出一条挑战消息,其中嵌入一个与该请求绑定的一次性随机数(nonce)。对方用自己的钱包签署挑战消息的确切字节。我们在正确的区块链上根据地址验证签名,然后对生成的证书计算哈希,并通过 Merkle 批次将该哈希锚定到链上。所用的是 BA 系列产品共用的同一个 Stamper 合约,因此公开验证工具无需任何改动即可验证。

随机数使重放成为不可能:针对一个请求的挑战消息所做的签名,无法挪用到另一个请求。我们逐字节验证所存储的挑战消息,绝不使用重新渲染的副本。

各区块链的密码学

每条区块链都有自己的签名标准。验证层的设计使新增区块链只需叠加,无需改动现有部分。

区块链标准验证方式
Ethereum 及 EVMEIP-191 personal_sign离线恢复签名人
智能合约钱包EIP-1271链上调用 isValidSignature
Bitcoin(SegWit / Taproot)BIP-322离线
Bitcoin(传统 P2PKH)BIP-137 signmessage离线
Litecoin、Dogecoin、Zcash (t1)BIP-137,使用各网络的前缀离线
Solanaed25519离线
Polkadot, Kusamasr25519 / ed25519离线
TRONTronWeb signMessageV2(也支持 Ledger TRON 应用)离线恢复签名人

自行验证

每份证书都可导出一个自包含的证明包。任何人都可以对照公链进行核验,无需账户,也无需信任 BA | Signet:

  1. signature 是 address 在所述区块链上对 challenge 的有效签名。仅此一点即可证明对密钥的控制权。
  2. 重新计算规范化证书 JSON 的 SHA-256;结果必须等于 contentHash(Merkle 叶子)。
  3. 用 merkleProof 折叠叶子(keccak256,排序配对);结果必须等于 merkleRoot。
  4. 在 Polygon 上的 Stamper 合约中调用 timestamps(merkleRoot);非零值即证书在此之前已存在的时间。
  5. 可选:对照 Bitcoin 区块验证 OpenTimestamps 证明。

我们存储的内容

对方不是我们的客户,也没有账户。我们只收集最少的数据:地址、挑战消息、签名、时间戳以及请求方的参考编号。我们绝不索要或接受私钥或助记词。除防范滥用所必需的情况外,不进行基于 IP 的用户画像。数据作为请求方的合规记录保存,可应要求删除。