你的币能单花也能共管吗:Taproot 两条花费路径的隐私取舍 图 1
你的币能单花也能共管吗:Taproot 两条花费路径的隐私取舍 · 图 1

一个地址,两副面孔

比特币 Taproot(BIP 341)地址在链上只是一段三十二字节的程序数据,看不出任何结构:没有脚本,没有密钥列表。同一份数据支持两种完全合法的打开方式——密钥路径与脚本路径。选择哪条路径,不只是签名技术问题,它决定了每一笔花费向全网络泄露多少信息。

密钥路径:最普通的一笔签名

密钥路径的见证堆栈只有一个元素:一条 BIP 340 格式的 Schnorr 签名。链上观察者的视角里,它与任何一笔“普通单密钥”花费完全无法区分。这个密钥怎么来非常自由:它可以是一把单人私钥,可以是参与方用 MuSig2 聚合出来的协作密钥,也可以是把“所有人一致同意”写成一条分支后的聚合结果。这正是 Taproot 设计手册的推荐姿势:把现实中最容易发生的情形(比如所有共管人都点头的单签化)做成密钥路径,让绝大多数花费以最普通的形态混入人群。

脚本路径:摊牌的时刻

当密钥路径不可用——比如两人离线有一人失联、只凑得齐门限里的两把钥匙——就转入脚本路径。见证堆栈要交出实际执行的脚本和一段控制块,用来证明这个脚本真的被承诺在地址的默克尔树里。规范说得很直白:脚本路径的花费向观察者泄露“存在脚本路径,且这次没走成密钥路径”这一事实。对一笔普通消费,这等于广播了“我的是一个有剧本的账户”;再结合脚本内容,阈值、结构一览无余。隐私代价不是bug而是设计代价:协议用“平时隐形、例外摊牌”换来了灵活性。顺带的技术红利是,Tapscript 不再受旧式单脚本一万字节上限约束,签名操作预算改为按见证大小逐输入计算,多分支复杂策略在重量预算内成为可能。

顺路警告:别碰 Annex

Taproot 验证规则里有一条容易踩雷的细节:如果见证堆栈至少两个元素、最后一个元素首字节是十六进制 50,它会被解释为 annex——一块为未来软分叉预留的空间。规范对此的措辞罕见地严厉:在它被软分叉赋予含义之前,用户不应在交易里包含 annex,否则可能造成永久性资金损失。普通钱包不会自己生成 annex,需要警惕的是把来路不明的“增强参数”“特殊选项”手工塞进 PSBT 的工作流。

用户能核对什么

从地址本身,你无法判断它是单人还是多人共管;从一笔已发生的交易,你最多判断它走了哪条路径。对收款方,这意味着“对方是不是多签”不是可用的风控信号;对持有者,这意味着长期方案值得把最常见的花费路径做成密钥路径——日常小额像呼吸一样无痕迹,恢复与继承的复杂剧本只在真正需要时才摊牌。本文只讨论隐私与脚本机制,不构成投资建议。

内部密钥的选择里藏着一条隐私决策

Taproot 地址里的输出公钥是内部密钥经过一次承诺哈希微调后的结果,承诺哈希把脚本树的根与内部密钥绑在一起。这意味着“内部密钥放什么”本身就是一次隐私设计:如果所有花费条件里有一条是“某人单独就能花”,把它选为内部密钥,日常花费就天然走密钥路径;如果一种情形都不存在,规范给出的建议是选一个无人知晓离散对数的 NUMS 点作内部密钥,并且推荐再随机加一个偏移,以免看起来像某个已知的固定点。这条建议的技术动机很有意思——它是为了让旁观者连“这个地址根本没有密钥路径”这一点都推断不出来,代价是放弃了单签化的全部便利。也就是说,隐私在 Taproot 里不是开关,而是由谁当内部密钥、脚本分支怎么排、哪条路径承担日常花费这三个设计决定共同塑造的。

给不同使用者的一句话建议

对普通自托管用户:正常用支持 Taproot 的钱包即可,不要手工往交易里塞不认识的见证元素,尤其避开 annex。对多签方案设计者:把“所有共有人一起在线”这一最常见情形做成密钥路径或聚合密钥分支,把时间锁恢复、继承这类低频剧本放进脚本树,日常支出便无需向网络摊牌家庭治理结构。对企业与机构:Taproot 让链上数据公司更难从花费形态反推账户类型,这是它相对旧式多签地址的现实收益,但地址复用与付款结构泄露等其他聚类渠道依然存在,不能把一处改进当成全链路隐私方案。所有涉及具体金额与资产处置的决定仍应以你自身的法律与风控需求为准,本文只谈密码学机制。