声明
Signet 证书只做出一项范围窄但效力强的声明:某个地址私钥的持有者在某个时间签署了某条挑战消息。仅此而已。它证明的是对密钥的控制权,而非身份。
已证明(无需信任第三方)
- 此地址针对这条挑战消息生成了此签名。
- 签名人在签名时持有私钥。
- 证书哈希在链上锚定时间之前已经存在。
未证明
- 签名人的身份。
- 控制权具有排他性,或密钥未被共享、未受胁迫使用。
- 签名人是请求方的客户。身份绑定属于请求方的 KYC 工作。
如何证明
请求方发出一条挑战消息,其中嵌入一个与该请求绑定的一次性随机数(nonce)。对方用自己的钱包签署挑战消息的确切字节。我们在正确的区块链上根据地址验证签名,然后对生成的证书计算哈希,并通过 Merkle 批次将该哈希锚定到链上。所用的是 BA 系列产品共用的同一个 Stamper 合约,因此公开验证工具无需任何改动即可验证。
随机数使重放成为不可能:针对一个请求的挑战消息所做的签名,无法挪用到另一个请求。我们逐字节验证所存储的挑战消息,绝不使用重新渲染的副本。
各区块链的密码学
每条区块链都有自己的签名标准。验证层的设计使新增区块链只需叠加,无需改动现有部分。
| 区块链 | 标准 | 验证方式 |
|---|---|---|
| Ethereum 及 EVM | EIP-191 personal_sign | 离线恢复签名人 |
| 智能合约钱包 | EIP-1271 | 链上调用 isValidSignature |
| Bitcoin(SegWit / Taproot) | BIP-322 | 离线 |
| Bitcoin(传统 P2PKH) | BIP-137 signmessage | 离线 |
| Litecoin、Dogecoin、Zcash (t1) | BIP-137,使用各网络的前缀 | 离线 |
| Solana | ed25519 | 离线 |
| Polkadot, Kusama | sr25519 / ed25519 | 离线 |
| TRON | TronWeb signMessageV2(也支持 Ledger TRON 应用) | 离线恢复签名人 |
自行验证
每份证书都可导出一个自包含的证明包。任何人都可以对照公链进行核验,无需账户,也无需信任 BA | Signet:
signature是address在所述区块链上对challenge的有效签名。仅此一点即可证明对密钥的控制权。- 重新计算规范化证书 JSON 的
SHA-256;结果必须等于contentHash(Merkle 叶子)。 - 用
merkleProof折叠叶子(keccak256,排序配对);结果必须等于merkleRoot。 - 在 Polygon 上的 Stamper 合约中调用
timestamps(merkleRoot);非零值即证书在此之前已存在的时间。 - 可选:对照 Bitcoin 区块验证 OpenTimestamps 证明。
我们存储的内容
对方不是我们的客户,也没有账户。我们只收集最少的数据:地址、挑战消息、签名、时间戳以及请求方的参考编号。我们绝不索要或接受私钥或助记词。除防范滥用所必需的情况外,不进行基于 IP 的用户画像。数据作为请求方的合规记录保存,可应要求删除。