Schnorr 签名与 multisig 聚合

·阅读 9 分钟·作者:SSP Editorial Team
深蓝色 SSP 封面,钥匙、盾牌、CPU 与闪电图标置于深色渐变上,Multisig Deep Dive 系列的 Schnorr 章节

上一篇我们走过了 SSP 在链上是如何真正构造一只 multisig 钱包的:BIP48 路径、按字典序排列的两把 xpubs、链所校验的 redeem script。整套机制都建立在一种特定签名方案之上 — secp256k1 曲线上的 ECDSA,也是 Bitcoin 2009 年随机制一起出场、被大多数链继承下来的同一套方案。

这一篇说的是另一种签名方案 — Schnorr — 以及在它之上构造 multisig 时会变化的部分。最显眼的变化是 Schnorr 支持聚合(aggregation):在合适的协议下,ncosignern 份签名可以合并成一份签名,链上看上去就像来自单一密钥的一份普通签名。钱包行为上仍是 multisig 钱包,但链根本看不到 multi 的那一面。这对手续费、隐私,以及哪些种类的 multisig 在经济上变得可行,都有真实后果。

TL;DR

  • ECDSA 是当前大多数 multisig(包括 SSP 今天)用来签名的方案。每个 cosigner 产出一份独立签名;链一一校验。开销和体积随 n 而增。
  • Schnorr 是另一种签名方案,2021 年通过 Taproot 升级在 Bitcoin 上启用。它有一项 ECDSA 缺失的数学性质 — 线性。线性让多份 Schnorr 签名能被相加成对一个组合密钥而言有效的单一签名。
  • MuSig2 是把这项数学性质变成可用 multisig 协议的现代、实用协议。n 个 cosigner 跑一段短的交互协议,每个贡献一轮 nonce 和一份部分签名;结果是一份与单密钥签名无法区分的单一 Schnorr 签名。
  • 这在校验侧是严格的胜利 — 手续费、链膨胀和隐私都受益。但在签名侧不是免费胜利:聚合需要小心地处理 nonce,写得有问题会泄露私钥。
  • SSP 今天在它支持的所有链上使用 BIP48 + ECDSA multisig。路线图是:在链支持的地方加上 Schnorr/MuSig2 路径,而不破坏用户已有的 2-of-2 模型。

30 秒回忆一下签名做什么

一次数字签名向验证方证明两件事:这条确切的消息是由持有此公钥对应私钥的人签的。链上,"消息"是一笔交易的哈希,"公钥"是地址(或派生出地址的东西),"验证方"是网络上的每个节点。如果签名校验通过,交易就有效;否则被拒。

ECDSA — Bitcoin 与大多数 EVM 链用的方案 — 已经被研究透、保守、并且在单个签名者的场景下表现良好。麻烦在于:当你想要多个签名者一起授权同一笔交易时会怎样。ECDSA 没有合并签名的办法。如果你要 two-of-two,链就得把两份签名都存下来、并都校验。Three-of-five 就是五份签名。交易随着 cosigner 数量增长而变大。

What is multisig 描述了协议层面 — m of n 密钥、redeem 规则、由链来执行门槛。那一篇没有停下来讲的是成本:在 ECDSA 下,所有那些签名都活在交易里。一笔 2-of-2 P2WSH 交易,与达到同样效果的 single-sig 交易相比,确实更大、更贵地被广播。

Schnorr 改变了什么

Schnorr 签名最早在 1980 年代末被提出,因为当时存在专利不确定性而在 Bitcoin 原始设计中被避开。它们在一个具体方面比 ECDSA 干净:它们是线性的。如果 s1 是消息在密钥 P1 下的有效签名,s2 是同一消息在密钥 P2 下的有效签名,那么 s1 + s2 是该消息在 P1 + P2 下的有效签名。密钥和签名都可以相加。

为什么重要:突然之间,可以在签名到达链之前就把它们合并。不是在交易里存两份签名,而是存一份 — 它们的和。验证方对照两份公钥的校验那一份签名,而两份公钥的和两位签名者都可以提前算出来。从链的视角看,结果交易看起来与一份由单一密钥签出的交易毫无区别。

ECDSA 做不到这件事。ECDSA 的数学里有一个乘性逆元,破坏了线性;ECDSA 签名的和不是有效签名。所以基于 ECDSA 的 multisig 必须把所有单独签名都送上链。链一一分开检查。

Bitcoin 在 2021 年的 Taproot 软分叉里发布了 Schnorr 签名(通过 BIP340)。签名本身略小于 ECDSA 签名(64 字节对 ~71),但远更大的事是 — 当你把这种线性与 multisig 结合时,能开出来的能力。

MuSig2 — 链上看起来像一份签名的 multisig

"你可以把 Schnorr 签名加起来"的诚实版本是:你必须小心地这样做。朴素的做法 — 让每个 cosigner 选个 nonce,分享自己的部分签名,把一切相加 — 在反复签名下会泄露密钥材料,并对一类"rogue key"攻击脆弱。一份实用的聚合协议必须能防御这两种风险。

MuSig2 是大约十年精炼这道难题的结果。它是 n-of-n Schnorr multisig 的事实标准:在签名时,cosigner 们交换两轮 nonce,每人产出一份部分签名,其中一位把部分签名加总成最终的聚合签名。结果是一份单一的 Schnorr 签名,对一把单一的聚合公钥有效,在链上和单密钥签名无法区分。

几个关于 MuSig2 的要点:

  • 目前是 n-of-n 要在聚合下实现真正的 m-of-n(比如 2-of-3),还需要额外的机制 — FROST 是领先的提案 — 还在产品化中。所以在 2026,SSP 能干净地聚合的,是 2-of-2 默认。来自选择器一文的 2-of-3 及更高的配置目前大多还在用 ECDSA 风格的链上可见性。
  • 仍然需要两位 cosigner 上线才能签。聚合并不减少所需签名者数量;它只是压缩最终的输出。UX 与今天一样 — 两台设备签同一笔交易 — 但结果的链上脚印变小了。
  • 写得有问题的 MuSig2 实现会泄露密钥。Nonce 处理很微妙。生产部署因此倚赖经过良好审计的库(libsecp256k1 的 MuSig2 模块、rust-bitcoin 栈等)。

这对今天的 SSP 意味着什么

SSP 今天在每条它支持的链上,都使用 BIP48 派生的 ECDSA multisig。两台设备、两把私钥、链上两份独立的签名。这是正确的,是经过审计的(由 Halborn — 参见现有 2-of-2 文章中的 inside-ssp-2025-halborn-audits 引用),并且与任何其他 BIP48 兼容的钱包可互操作。代价是你付出 2-of-2 的全部链上成本。

从这里向前的路线图,用白话讲:为 Bitcoin(Taproot 已经活跃且稳定的地方)加一条 Schnorr/MuSig2 代码路径,用聚合的方式签同一只 2-of-2 钱包。钱包的门槛语义不变 — 两台设备仍必须签名。链上字节数缩小,结果交易看起来就像一笔 single-sig 花费。

对用户来说,这主要会以以下方式显现出来:

  • 每笔交易的 Bitcoin 手续费略低
  • 隐私改善 — 钱包停止向链分析方喊"我是 multisig 钱包"。
  • 钱包 UI 对账更快(每个地址需要抓取和解析的数据稍微少一点)。

不是 — 也值得明确地说 — 安全升级。它的密码学难度与现行方案相当,只是结构不同。采纳它的理由是效率与隐私,不是原始的安全性。

这对成本、隐私和 UX 意味着什么

聚合在一条链上被广泛部署后,会落到三处:

成本。 Bitcoin 按交易大小(以 vbytes 计)收取手续费。一笔 ECDSA P2WSH 2-of-2 交易明显大于等效的 Taproot-MuSig2 交易。对发送小额、余额较小的钱包来说,相对手续费节省可能在 20–30%。对高吞吐量的业务,年度手续费的绝对节省是真金白银。

隐私。 今天,当一只钱包广播一笔 P2WSH 2-of-2 花费时,这一事实对任何运行区块链浏览器的人都是可见的。复杂的链上分析公司按花费模式聚类地址,"这地址是 multisig" 是强烈的聚类信号。Schnorr 聚合的花费看起来与 single-sig 花费完全一致。聚类信号消失。

UX。 SSP 的签名 UX —— 在浏览器签名、再在手机上确认 —— 不会变。两台设备仍然产出部分签名;钱包只是在广播之前把它们合并,而不是分别广播。从用户视角看,唯一可见的改变是"钱包用起来感觉更便宜"。

地平线上还有一个更深的 UX 收益。一旦 m-of-n 聚合(通过 FROST 或类似方案)准备好上生产,你就可以想象一只 SSP 2-of-3 钱包 —— 像上一篇文章描述的单人加恢复设置那样 —— 在链上看起来就像一只普通的 single-sig 钱包。第三把"恢复"密钥确实是一把第三签名密钥,但链永远不必知道。

这对你意味着什么

三个要点:

  1. 你不必为正确地使用 SSP 而去想 Schnorr。 你今天拥有的 2-of-2 配置是建立在经过良好审计的 ECDSA multisig 之上的,无论聚合最终怎么落地,它都保持那样。本系列的下一篇 (社交恢复 vs multisig) 故意忽略聚合,因为谁可以花钱这个问题,与签名在链上长什么样是独立的。
  2. 聚合是一次"手续费与隐私"升级,不是一次"安全"升级。 如果你哪天看到某只钱包把"MuSig2 = 更安全"作为卖点,要保持怀疑。一份实现良好的 MuSig2 的密码学安全性,与一份实现良好的 ECDSA multisig 是可比的;胜利在别处。
  3. 看链的支持,不要看钱包的市场宣传。 Schnorr 在 Bitcoin 上活着,并通过账户抽象在 EVM 世界被采用。良好支持它的链会是 SSP 最先上线聚合 multisig 的地方;在其它地方,BIP48 + ECDSA 仍然是正确且安全的默认。

本系列的下一篇 社交恢复 vs multisig 把视角从密码学切换到操作:何时该用 multisig,何时社交恢复更优?两者都防御丢失密钥;它们回答的是不同的问题。要快速复习 SSP 今天用了哪些设备及原因,Meet SSP Wallet 仍然是起点。

分享本文

相关文章