135 / 736SP

Silent Payments

一个收款联系方式,每次生成不同输出

鲍勃想在网站上公布捐款信息,却不想同时公开全部收款记录。Silent Payments 让他可以使用固定的收款联系方式,而每笔支付会派生不同的输出。便利也有代价:他的钱包必须自己从链上找出收到的资金。

Silent Payments 让人们通过一个可重复使用的标识收取比特币,而不必让每笔付款都进入同一个可公开追踪的地址。钱包是接收和发送比特币的应用程序或设备。付款方钱包会为这笔支付计算新的目标,收款方钱包之后在链上识别它。BIP352 说明了具体流程。收款人不必在线,也不必在每笔付款前提供新地址。

如果鲍勃在网站上放一个普通比特币地址,任何人都能用区块链浏览器追踪其收款。区块浏览器是用于查询特定网络上的交易和区块的应用。给每个人一个新地址更好,但需要有人分发。Silent Payments 解决的正是这个问题:鲍勃公布固定信息,爱丽丝据此为当前支付生成专属输出,也就是记录金额和今后花费条件的条目。公开联系方式不会作为同一个收款地址反复出现在链上。 [1] [3] [9] [7]

Silent Payments 地址包含公开的 scan key 和 spend key。私钥是一个秘密数值,对应的公钥可以向他人公开。名称说明了各自的作用:scan key 与寻找支付有关,spend key 与花费有关。对应的私钥仍由鲍勃保管。在比特币主网上,它以 sp1 开头,使用 Bech32m 编码。它不是以 bc1p 开头的普通 Taproot 地址,也不是钱包备份。这对公钥让兼容的付款方算出支付目标,却不赋予花费权,也不直接提供鲍勃的收款清单。 [1] [5] [9]

要向鲍勃付款,爱丽丝的钱包会选取之前收到的款项。对这些款项的引用构成新交易的输入。计算支付目标时,只使用符合 BIP352 规则的输入密钥,并非所有输入类型都适用。爱丽丝通过 ECDH 将这些私钥与鲍勃的公开 scan key 结合。这种密码学方法让双方无需交换私钥,就能各自算出相同的秘密。钱包把这个秘密与具体输入绑定,再据此调整鲍勃的公开 spend key,得到新输出的密钥。绑定输入可避免在重复使用某个输入密钥时复用支付目标。如果爱丽丝使用 RBF,也就是替换尚未确认的交易,例如提高费用,并且改变了输入,钱包就必须重新计算目标,不能直接沿用旧结果。 [1] [4]

鲍勃的钱包扫描符合条件的交易,用私有 scan key 和输入的公开数据计算可能的输出。找到匹配后,就将该输出记为自己的资金。链上看到的是没有特殊通知消息的 Taproot 输出。爱丽丝发送时,鲍勃不必在线,也不必提前回复,但钱包随后必须处理所需数据。 [1] [6]

scan key 用于寻找支付,spend key 配合派生数据用于花费。私有 spend key 可以与联网扫描器分开保存。仅泄露私有 scan key 并不足以花费资金,但结合公开信息可能暴露收款记录。因此,把它交给别人的扫描服务器会影响隐私。不能向该服务器发送 seed 或私有 spend key。 [1]

Silent Payments 不需要专门的通知交易,但计算和数据传输仍有成本。收款方要检查符合条件的交易,并进行前面介绍的密码学计算。对手机来说,索引、所需数据的来源以及上次扫描距今多久都很重要。普通地址列表本身并不够。节点是验证交易和区块、并与其他网络参与者通信的软件。个人节点和外部服务商的要求不同,对隐私及可用性的影响也不同。 [1] [2] [8]

鲍勃可以使用 labels,也就是派生的支付变体,例如为不同项目分别设置。这样不必为每个变体从头独立扫描。不过,公开变体共享 scan key,观察者能够识别它们属于同一主体。标签帮助鲍勃分类收款,而不是创造独立的匿名身份。 专用找零标签标记的是鲍勃自己付款后剩余的部分。如果他花费的一笔既有款项大于付款金额与手续费之和,剩余部分就回到自己的钱包。这不是商家退款。BIP352 为此保留了 m = 0 标签。钱包恢复时始终要查找这一标签,而且不能将它公开为接收他人付款的联系方式。 [1] [4]

假设鲍勃丢了手机,但还保存着备份。seed 是钱包派生密钥所用的秘密初始值,用户通常通过 Seed Phrase,也就是按指定顺序排列的恢复词,来备份它。不过,仅有这些词并不意味着任何应用都能找到 Silent Payments。应用必须支持相同的密钥派生方式,并能识别这些支付。备份已使用的 labels 和钱包开始使用的日期,有助于恢复。寻找现有资金时,可以扫描包含剩余 UTXO 的交易所需的数据;UTXO 是逐笔收到、尚未花费的款项。恢复完整历史则需要更广泛地扫描区块链。因此,在扫描完成前显示为空,不一定意味着资金丢失。 [1]

Silent Payments 减少因地址复用而产生的关联,但不会隐藏金额、确认时间或所花费输入的历史。爱丽丝知道自己付给鲍勃的那笔钱,订单也可能有个人信息。如果鲍勃后来把多个 UTXO 合并到一笔交易,可能再次暴露它们的联系。Silent Payments 不等于 CoinJoin,两者结合也不自动安全;BIP352 提醒,独立付款方协作场景仍缺少形式化安全证明。 [1] [3]

BIP352 列出的作者是 josibake、Ruben Somsen 和 Sebastian Falbesoner,编号于 2023 年分配。2026 年 10 月 17 日核查时,其状态为 Complete。但这不表示所有钱包都支持:发送、接收、扫描和恢复要分别确认。协议利用现有 Taproot,不需要新的 Soft Fork,即网络采用的有效性规则收紧。不支持它的旧应用无法正确处理 sp1 地址。 [1] [2]

要获得更完整的理解,请将本词条与以下词条结合阅读: Bitcoin 隐私, 假名性, Taproot, CoinJoin, Replace-by-Fee (RBF), UTXO. 反向关联还来自: Bitcoin 隐私, Transaction Labeling.

DOC · 001BIP 352 — Silent Payments规范 DOC · 002Bitcoin Optech — Silent payments文档 DOC · 003Silent Payments reference一手来源 DOC · 004BIP352 — reference implementation一手来源 DOC · 005BIP350 — Bech32m规范 DOC · 006BIP341 — Taproot规范 DOC · 007Bitcoin Developer Guide — Wallets文档 DOC · 008Bitcoin Developer Guide — Block Chain文档 DOC · 009Bitcoin Developer Reference — Transactions文档
修订日期: 来源优先 · 非投资建议