新闻加密货币[[alloc] init] 发布 Shielded Bitcoin 提案,实现私密比特币交易

[[alloc] init] 发布 Shielded Bitcoin 提案,实现私密比特币交易

作者: Bitcoin Magazine·

要点速览

  • •由 [[alloc] init] 的 Clara Shikhelman、Misha Komarov 和 Aleksei Moskvin 撰写的 Shielded Bitcoin 白皮书描述了一种无需操作员、软分叉或更改比特币共识的隐私元协议。
  • •协议规则由 Shielded Bitcoin 索引器执行,交易数据通过 OP_RETURN 或见证字段嵌入比特币,基础链将其视为普通数据。
  • •零知识证明和作废符集合在不泄露已花费票据的情况下防止双花和通胀,使索引器只需拒绝重复的作废符,而无需维护已花费集合。
  • •该设计的隐私性被评估为可与 Zcash 的屏蔽资金池媲美,且与 coinjoin 不同,无需定期混币或隐私衡量。
  • •计划中的锚定使用 PIPEs v2 见证加密,在无操作员或联盟的情况下转移资金,即将发布的论文将定义锚定机制及进入/退出隐私。
[[alloc] init] 发布 Shielded Bitcoin 提案,实现私密比特币交易

[[alloc] init] 的研究人员 Clara Shikhelman、Misha Komarov 和 Aleksei Moskvin 发布了 Shielded Bitcoin,这是一份描述构建在比特币基础层之上的新型隐私元协议的白皮书。该设计无需操作员、软分叉或对比特币共识的任何其他更改,即可实现屏蔽比特币交易。白皮书及配套的博客公告已经发布,团队还在 X 上分享了这一消息。

该协议为强隐私保护交易定义了一套交易结构和索引协议,同时依靠 Bitcoin PIPEs 将资金锚定进出该系统。PIPEs 机制将在本文末尾详细探讨。

这一“无需更改共识”的特性意义重大:比特币的账本以公开方式记录金额和地址,而历史上对其规则的更改都需要广泛的全网协调。一种完全在现有规则集内运行的设计,则无需依赖这一流程即可推进。

仿照比特币的设计,细节却大不相同

该架构刻意效仿比特币自身的设计。系统中存在与 UTXO 等价的 concept,称为票据(note)。交易消耗票据作为输入,正如普通比特币交易花费 UTXO 一样。见证数据(witness)证明所消耗的输入已获得正确授权,而节点——在元协议场景下即索引器——则解析交易历史并构建关于哪些币已花费、哪些未花费的持续状态。

然而,每一个底层细节都截然不同。

比特币自身完全忽略的交易

一笔 Shielded Bitcoin 交易只是一段携带前缀的数据块——类似于 "shbtc:"——通过 OP_RETURN、见证字段(witness field)或其他数据承载方式嵌入比特币交易中。这正是元协议模式:协议规则由其自身的索引器而非比特币来执行,因此基础链看到的只是普通数据。该数据块对比特币而言毫无意义:网络不会对其进行任何验证,也不会对其执行任何规则。

因此,无效的 Shielded Bitcoin 交易完全可能出现在链上。这就要靠被动监视区块链的 Shielded Bitcoin 索引器来忽略验证失败的交易,并在更新网络余额状态时拒绝将其纳入。

用作废符取代已花费集合

索引器不会像比特币移除已花费 UTXO 那样从未花费票据集合中删除票据。相反,它维护的是一个作废符(nullifier)集合。这一机制允许用户公开发布一份加密证明和一个作废符,表明某张票据已被花费,但不泄露具体是哪一张。参与者无需检查某张票据是否在“未花费票据集合”中,而是检查某个作废符是否已被使用过。

索引器构建一棵只增不减、可永久增长的 merkle 树,其中包含曾经创建过的每一个票据输出,并辅以作废符集合。\n## 运行协议只需一个节点

使用该协议只需要一个比特币节点和一个 Shielded Bitcoin 索引器。恢复资金不需要任何服务商、协调器或链下状态。它的工作方式就像链上比特币:用户只需要自己的节点/索引器和密钥。

每个用户钱包都派生出一个主私钥,其他所有相关密钥集都由此创建——这一设计非常类似于比特币中的 HD 钱包,可以从中生成多组地址。sk_spend 作为花费私钥,sk_nf 用于作废票据输出,vk_in 用于解密和查看收到的票据,vk_out 用于查看发出的交易,sk_view 用于生成接收地址。

当用户想把地址交给他人以接收资金时,会生成一个类似于派生值的多样化因子(diversifier)d,并将其与自己的 sk_view 密钥相乘。得到的公钥 pk_d 连同 d 共同构成用户的地址。

随后,发送方生成一个随机值 r_seed,它既是加密票据输出所必需的,也用于作废操作(稍后会讲到)。交易输出中只包含三项加密内容:输出金额、接收方交给发送方的 d 值,以及发送方的 r_seed 值。在加密时,发送方使用一个临时的私密密钥对和接收方的公钥来创建共享密钥——双方都可以用自己的私钥乘以对方的公钥来计算出相同的密钥。票据输出使用该共享密钥加密,而临时密钥 sk_eph 则以未加密方式包含在内,以便接收方能够自行生成共享密钥。

零知识证明保证有效性

在输入端,一笔交易要有效需要两样东西:每个被消耗票据输出的公开作废符,以及一个零知识证明,用以证明 (1) 该票据输出包含在票据 merkle 树中;(2) 交易已由相应的 sk_spend 密钥授权;(3) 作废符被正确推导;(4) 没有发生通胀。

作废符融合了 sk_nf 密钥、从 r_seed 推导出的 ρ 值,以及该票据在票据输出 merkle 树中的位置。尽管没有人能知道某个作废符对应哪个票据输出,但每笔交易中的零知识证明都保证了加入集合的每个作废符都来自有效的票据输出。因此,索引器只需拒绝重复的作废符,而无需删除已花费的票据;只要没有重复,系统就能提供与比特币相同的双花防护。

最终效果是,加密的元协议交易可以嵌入比特币区块链,同时仍然保证没有任何东西被双花,也没有币凭空被通胀出来。

隐私特性

根据分析,该系统在隐私特性方面设计出色,可与 Zcash 的屏蔽资金池相媲美。这一对比勾勒出更宏观的格局:Zcash 通过内置于自身协议中的规则提供屏蔽交易,而该设计则在不触及共识的前提下,在比特币基础层上追求类似的特性。进入和退出该元协议时涉及的隐私考量将在即将发布的论文中详细说明,这使得系统的进入与退出点成为这项工作推进过程中值得关注的细节。与 coinjoin 不同,它不存在衡量隐私性或需要定期混币的问题。

使用 PIPEs v2 锚定资金

计划中的锚定依赖 PIPEs v2,这是一种见证加密(witness encryption)方案。PIPEs 允许用一个程序或机制对私钥进行加密,提供满足特定条件的 ZK 证明时才会交出密钥——例如某个 UTXO 的状态,或某笔交易已被确认。这将使锚定在无需操作员、联盟或任何第三方托管资金的情况下运作——这是一个值得注意的特性,因为扩展比特币的锚定设计通常都依赖这类托管方。它不需要对比特币进行任何软分叉或协议更改,并且完全在链下进行。

团队工作的下一阶段是一种锚定机制,允许用户使用 PIPEs 密码学控制的密钥将资金存入 Shielded Bitcoin,随后通过生成证明合法锚定取出交易已在链上确认的 ZK 证明来“解锁”这些密钥。定义该系统这一方面的论文目前正在撰写中,预计将在近期发布;加上进入/退出隐私论文,它们将补全白皮书尚未阐明的内容。


本文由 Shinobi 撰写,最初发表于 Bitcoin Magazine。