技术深度解析
BBS+ 签名最初由 Boneh、Boyen 和 Shacham(故称 BBS)提出,后经 Au 等人扩展(即 + 号),是一种支持高效知识证明的多消息数字签名形式。其核心创新在于:单个签名可认证多条消息(属性),而证明者随后能生成一个零知识证明,表明这些消息的子集已被签名,同时不泄露其他消息或原始签名本身。
mattrglobal/bbs-signatures 架构
该代码库使用 BLS12-381 椭圆曲线实现 BBS+ 方案,这是一条由互联网工程任务组(IETF)标准化、广泛应用于区块链和身份系统的配对友好曲线。库采用 TypeScript 编写,编译为 CommonJS 和 ESM 模块,并通过 `ffi` crate 与 Rust 核心进行原生绑定。这种混合方法使其在保持 JavaScript 级别易用性的同时,性能接近原生代码。
关键组件:
- 密钥生成:生成一个私钥 `sk` 和一个公钥 `pk`(G2 中的一个群元素)。
- 签名:接收一组消息 `m_1, ..., m_n`,生成单个签名 `(A, e, s)`,其中 `A` 是 G1 中的一个群元素,`e` 是一个随机素数,`s` 是一个随机标量。该签名是对私钥和消息的知识证明。
- 选择性披露证明:持有者选择要披露的消息子集。利用签名和隐藏消息,持有者计算一个零知识证明 `π`,以证明:(a) 披露的消息在签发者的公钥下已被签名,且 (b) 隐藏消息存在且与签名一致。该证明是一个使用 Fiat-Shamir 启发式的非交互式零知识(NIZK)证明。
- 验证:验证者根据公钥和披露的消息检查证明。证明大小恒定(几百字节),与隐藏消息的数量无关。
性能特征
| 操作 | 时间 (ms) | 证明大小 (字节) | 备注 |
|---|---|---|---|
| 密钥生成 | 5.2 | — | 单线程,BLS12-381 |
| 签名(10 条消息) | 8.7 | 112 | 包括哈希到曲线 |
| 创建证明(5 隐藏,5 披露) | 12.4 | 256 | 证明大小恒定 |
| 验证证明(5 披露) | 6.1 | — | 配对检查 |
*基准测试来自 mattrglobal/bbs-signatures v0.6.0,运行于 Node.js 20,Apple M2。时间为 100 次运行的中位数。*
数据要点:证明生成是最昂贵的操作,但仍低于 15ms,使其适用于实时移动钱包。证明大小恒定且小巧,这是相对于 Merkle 树方法的关键优势,后者的证明大小随属性数量呈对数增长。
与替代方案比较
| 方案 | 选择性披露 | 证明大小 | 属性数量 | 密码学假设 |
|---|---|---|---|---|
| BBS+ | 是 | 恒定(约 256B) | 无限制 | q-SDH, LRSW |
| CL 签名 | 是 | 与隐藏属性线性相关 | 有限(实际 <20) | 强 RSA |
| Merkle 树(基于哈希) | 是 | O(log n) | 无限制 | 抗碰撞哈希 |
| JSON-LD 签名(如 Ed25519) | 否 | 固定 | 单条消息 | 离散对数 |
数据要点:BBS+ 在多属性凭证的证明大小与灵活性之间提供了最佳权衡。CL 签名较旧,对于大型属性集效率较低。Merkle 树更简单,但需要预先提交属性位置,且无法隐藏属性数量。
相关开源生态系统
- mattrglobal/bbs-signatures:本文讨论的主要实现,拥有 127 颗星。API 成熟,文档完善,已在 MATTR 身份平台的生产环境中使用。
- hyperledger/aries-framework-go:为 Hyperledger Aries 生态系统实现 BBS+,用于去中心化身份代理。
- zkcrypto/bbs:zkcrypto 团队的 Rust 实现,专注于形式化验证与可审计性。拥有约 80 颗星。
- microsoft/VerifiableCredentials:微软的 ION 和 Entra Verified ID 在其 DID 实现中使用 BBS+ 进行选择性披露。
关键参与者与案例研究
MATTR(新西兰身份公司)
MATTR 是该代码库的主要企业支持者。他们提供商业身份平台(MATTR VII),在政府和金融服务领域使用 BBS+ 进行可验证凭证。其策略是提供全栈解决方案:签发者、持有者钱包和验证者,全部利用 BBS+ 保护隐私。他们已在新西兰政府的数字驾驶执照试点以及澳大利亚银行的 KYC 验证中部署。
微软
微软的 Entra Verified ID 将 BBS+ 作为其 W3C 可验证凭证的签名方案之一。其基于比特币区块链构建的 ION(Identity Overlay Network)DID 方法支持 BBS+ 证明。微软的做法是将 BBS+ 集成到其现有身份基础设施中,瞄准企业级应用。