31 / 736M-of-N

Multisig

用多个密钥共同授权付款

一笔付款不一定只由一个密钥决定。Multisig 可以要求三个独立密钥中的任意两个签名,付款才能发出。

Multisig 是一种保护比特币的方式:花费资金时,必须取得多个指定密钥的签名。在三取二规则中,三个不同密钥里的任意两个即可授权。因此,丢失一个密钥不一定意味着丢钱,小偷只拿到一个密钥也无法花费。这需要正确的备份,以及真正相互独立、分开保管的密钥。

Multisig:签名阈值模拟器查看 m-of-n 模型中剩余的密钥能否达到签名阈值。结果仅说明签名的可用性,并不代表钱包安全或能够完整恢复。

Alice 不希望全部积蓄都依赖一台设备。她用三个独立密钥 A、B、C 建立一个三取二钱包。A + B、A + C 或 B + C 都可以批准付款。每个签名都是由相应私钥生成、可用数学方法验证的授权;私钥本身不会发送到网络。如果 Alice 丢失 A,只要还保存着必要的钱包资料,就能使用 B 和 C。只偷到 A 的人无法独自转走资金。这里并不是把比特币分成三堆:同一规则保护的是相关资金整体。三个密钥可以由三个人持有,也可以由一个人保存在不同设备上。把同一份 Seed Phrase,也就是同一组恢复词,复制三份,并不会产生三个独立密钥。 [1] [2]

Alice 在应用中输入收款地址和金额。应用作为协调器,准备好交易草案,再交给签名设备。这个过程经常使用 PSBT,一种用于传递付款资料及逐步补充的签名的数据格式。因此,设备无须同时连接,也无须放在同一地点,私钥仍然彼此分离。签名前,Alice 要在每台参与设备的可信屏幕上核对收款人、金额和手续费。设备还应依据已核实的钱包规则,识别把剩余金额退回给她的找零输出。如果签的是被篡改的付款,两份签名也保护不了她。协调器无法伪造缺失的签名,却可以提交错误的交易草案。只有取得必要签名并完成交易的最终组装后,应用才会向网络广播。 [5]

每个独立密钥都需要各自安全的备份。但恢复整个钱包,并不一定只靠两组恢复词就能完成。还需要共同配置:签名门槛、三个密钥全部的公开资料、排列顺序,以及生成地址的方法。这些内容可以保存为 Output Descriptor,也就是钱包的精确技术描述,或等效的配置导出文件。不含私钥的公开描述符无法单独签署付款,但可能暴露地址和资金流向,因此也需要保护隐私。Alice 先用小额资金测试收款、付款和恢复。以后如果丢失 A 或怀疑它已泄露,仅在应用中删除那台设备不会改变旧规则。她必须用剩余密钥,把资金转移到由新密钥组合生成、且已重新核实的地址。 [4] [6]

三取二允许丢失一个密钥,二取二则不能丢失任何一个。同时,在三取二规则下,任意一对密钥都能花费资金,包括背着第三人达成一致的两个人。因此,适合的配置取决于它保护谁的资金,以及需要抵御什么故障。如果 Alice 把所有设备和备份放在同一个抽屉里,一次盗窃或火灾就可能让分离密钥的优势失效。核对付款、确认钱包兼容性和执行恢复,也会需要更多工作。这里的花费条件写在脚本中,脚本就是一段简短的程序。传统的脚本式多签交易通常比类似的单签交易占用更多空间,同样的费率下手续费也更高。对初学者来说,熟悉并能正确使用的简单钱包,可能比自己不理解的复杂配置更安全。 [1] [2]

一般写法 m-of-n 表示:从 n 个指定密钥中,需要取得 m 个有效签名。在传统脚本式 Multisig 中,公钥和这个门槛构成花费条件。交易输出会直接规定该条件,或与相应脚本建立密码学绑定。花费时,节点,也就是负责验证比特币规则的计算机,会检查所需签名和脚本数据,并非应用说同意就能通过。在描述符中,multi 保留给定的公钥顺序,而 sortedmulti 按精确规则排序。派生路径指定钱包应从起始密钥材料计算出哪些具体密钥。错误的顺序或不同的密钥派生路径,都可能生成不同地址。描述符让钱包能够重建这些条件;它本身不会作为配置文件存入区块链。这里讲的是传统的脚本式 Multisig。其他方案可以让多位参与者共同产生一个签名,但有各自的规则。 [3] [4] [7]

示例 · M-of-N

三取二规则

使用三个不同密钥的 Multisig 要求任意两个密钥的有效签名。仅偷走一个密钥不够;丢失一个后,只要仍有必要的脚本数据,其余两个就能支出。分开保管密钥及其备份,并保存完整的 Output Descriptor 或等效钱包策略。

要获得更完整的理解,请将本词条与以下词条结合阅读: Private Key, 钱包, PSBT. 反向关联还来自: HD Wallet, Cold Storage, Watch-only Wallet, Change Address.

01Multisig 一定比单个 Hardware Wallet 更安全吗?

不是。适当分离密钥和备份可以减少单点故障,但更多参与者会增加操作复杂性。需要经过核实的钱包策略和测试过的恢复流程;被攻破的共用协调器可能向所有人展示同一笔错误付款。

02签名时必须把所有 Multisig 密钥放在同一地点吗?

不必。PSBT 可以分别传递数据和签名,无需集中私钥。每个签名者都应检查收款人、金额和手续费。广播前必须用所需有效签名完成交易,并满足输入的所有其他条件。

DOC · 001Bitcoin Developer Guide — P2SH Multisig文档 DOC · 002BIP 11 — M-of-N Standard Transactions一手来源 DOC · 003BIP 67 — Deterministic key sorting一手来源 DOC · 004BIP 383 — Multisig output descriptors一手来源 DOC · 005BIP 174 — Partially Signed Bitcoin Transaction Format一手来源 DOC · 006BIP 380 — Output Script Descriptors一手来源 DOC · 007BIP 327 — MuSig2一手来源
修订日期: 来源优先 · 非投资建议