
关于资金:CypherpunkGuide可能通过文中链接的购买指南获得推荐佣金。本文不含直接购买商品的联盟推广链接。本次工作未接受任何钱包厂商赞助。
协调签名的钱包应用已无法使用,一台签名设备也坏了,手中还剩两份种子备份。种子是派生私钥的基础秘密。2-of-3多签本来就是为了应对这种故障,似乎应该足够。
是否足够,取决于另一个问题:你能否重建这些密钥原先用于签名的钱包。2-of-3规定的是签名数量,没有写出完整的恢复步骤。
本文只讨论使用sortedmulti的常规Bitcoin P2WSH钱包。这类脚本要求指定公钥集合中的一定数量密钥提供签名。本文不评测硬件设备、Taproot签名方案,也不验证不同钱包产品之间的恢复兼容性。如果你还在建立基本的自托管流程,可先做到账、签名与恢复三项检查。
两把签名密钥之外,还需要完整配置#
两把签名密钥可以满足2-of-3脚本的授权条件。重建地址则需要完整脚本配置,包括相应派生位置上的全部三把公钥、签名门槛和脚本类型。三把密钥也不一定由三个不同的人持有。
**输出描述符(descriptor)**用结构化文本说明钱包应识别哪些脚本。它可以包含扩展公钥及派生路径;扩展公钥能进一步派生出一系列公钥。BIP380说明,只有私钥的备份可能缺少明确的脚本类型和派生路径。BIP383定义了多签描述符表达式,其中sortedmulti会对派生后的公钥排序。
恢复资料至少要分清三类:
| 资料 | 能提供什么 | 单靠它不能证明什么 |
|---|---|---|
| 签名备份 | 正确恢复后,可提供授权所需的私钥 | 资金属于哪一套完整多签配置 |
| 钱包配置 | 签名门槛、全部共同签名者的公钥、脚本类型和派生信息 | 你是否持有足够的签名私钥 |
| 查找条件 | 要搜索的分支、地址范围和相关历史数据 | 交易签名是否完整、有效 |
一个钱包文件可能保存其中几类资料,描述符也可能保存大部分配置。关键是导出文件实际包含什么,以及恢复软件能否识别。文件名或校验和都不能回答这两个问题。
Sparrow的备份对话框实现明确提到所需种子和全部扩展公钥,并列出钱包文件或描述符作为配置备份。这是对源代码的观察,不是对当前界面的实测,也不能证明其他产品可以兼容导入。
隔离恢复实验验证了哪些条件#
2026年9月24日,我们用Core 31.1的regtest本地测试网络,分别检查地址重建、指定测试输出的发现、签名完成和本地节点受理。测量区间为13.3秒,不含开始时的版本与文件哈希检查,也不含结束时的关闭与清理。实验只用公开的虚拟输入,不涉及实资;对等网络通信已禁用,结束时连接数为0。
前五种情况分别创建了新的仅观察钱包来重建配置。需要找到的是同一笔0.01000000 regtest BTC测试输出,也就是测试交易分配给某个地址的金额。A、B、C三把密钥从公开指定的虚拟输入派生,没有在实体设备上输入种子。
| 提供的资料 | 收款地址是否一致 | 是否找到指定测试输出 | 签名是否完成 | 本地节点受理测试 |
|---|---|---|---|---|
| 完整配置+A/B | 一致 | 找到 | 完成 | 接受 |
| 完整配置+A/C | 一致 | 找到 | 完成 | 接受 |
| 完整配置+B/C | 一致 | 找到 | 完成 | 接受 |
| 完整配置+仅A | 一致 | 找到 | 未完成 | 拒绝 |
| 仅公开配置 | 一致 | 找到 | 未完成 | 拒绝 |
| 去掉C,改用2-of-2策略 | 不一致 | 未找到余额 | 未测试 | 未测试 |
| 脚本封装类型错误 | 不一致 | 未找到余额 | 未测试 | 未测试 |
| 派生分支错误 | 不一致 | 未找到余额 | 未测试 | 未测试 |
后三种情况比较的是已入账、索引为1的收款地址,导入范围内也未发现钱包余额。这不能说明范围以外的地址如何。“缺少C”的测试只是把2-of-3错换成2-of-2,没有穷尽恢复方法,也没有验证其他备份或历史脚本能否补回资料。
随后,我们把A/B签署的交易提交到私有测试链。包含两个分支的钱包找到了0.00599000 regtest BTC找零输出;只包含收款分支的钱包虽然此前找到原始测试入账,却没有找到这笔找零。这是在比较特定输出,不是说后者的总余额变成了零:实验中还有单独的挖矿输出。我们还故意破坏描述符校验和,确认它遭到拒绝;紧接该测试之前和之后,原始描述符都通过了检查。
随文提供实验脚本、实测结果、安全回归测试和空白恢复检查清单。导入的地址范围为0至2,重新扫描的时间戳为0。签名测试使用派生出的虚拟私钥,正确脚本和前序交易输出数据则由完整的参考钱包提供。因此,这不是完整种子恢复流程、硬件钱包恢复或跨产品兼容性的实证。本地受理测试本身不会广播交易。这一次受控运行也不能估计现实中的恢复成功率。
实验说明列有复现要求和命令。绝不要把这些公开测试密钥用于真实资金。
找到资金,不等于能够支出#
恢复后的钱包可能识别一笔输出,却无法花费它。反过来,搜索条件不完整,也可能让钱包显示找不到匹配余额。
收款地址与找零地址通常使用不同派生分支。如果恢复配置遗漏找零脚本,一次付款便可能把余款转到该钱包无法识别的地址。internal分类标记本身,并不等于包含或排除某个分支。
Core的描述符导入代码和帮助说明分别处理导入时间戳、地址范围和内部地址分类。同步状态以及历史区块是否可用,也可能影响结果。余额显示为零,需要查明原因;单凭这个数字,不能断定资金已经消失。
同样,“导入成功”或名为“solvable”的字段,都不能证明可以签名。签名能力需要以满足脚本条件的完整交易来验证。本地regtest只能说明受控条件下的行为,不是主网确认,也不是设备兼容性测试。
公开配置也可能暴露财务隐私#
只含公开信息的描述符不能独自签名,却可能暴露其公钥和路径所能派生的地址。拿到它的人可能据此关联该范围内的余额与交易。
“公钥”不意味着应该公开钱包配置。应限制接触这些资料的人,并分清公开描述符与可能包含私钥的私有描述符。也不要承诺公开公钥在任何情况下都不影响资金安全:BIP32说明,父扩展公钥与非硬化派生的子私钥同时泄露,可能暴露父私钥。
这种组合泄露,与仅持有公开描述符是两种不同情况。无论哪一种,都不能成为把钱包资料贴到恢复论坛的理由。有关交易关联的更多问题,可参阅Bitcoin链上隐私指南。
记录恢复准备状态,不要汇集秘密#
有用的检查清单应记录资料是否存在、是否验证过,而不是变成一份容易被随手分享的秘密合集。
我们的空白清单涵盖签名门槛、配置备份、收款与找零分支、支持的导入格式,以及分开的资金查找和签名检查。它没有供你填写种子词、附加口令、公钥或实际描述符的栏目。只记状态,不填具体值。
请使用钱包或签名设备提供商文档中的恢复检查流程。不要向网站、聊天或本实验脚本输入真实种子;本实验的公开虚拟密钥也不适合真实资金。普通的加密备份恢复测试可以证明文件能够取回,但不能证明文件内容足以从某个Bitcoin钱包支出。
多签会增加需要保存、协调和验证的事项。如果你无法承担这些工作,增加签名设备不一定能改善恢复方案。本文帮助你检查这些复杂之处,并非建议购买更多设备。
要点#
恢复时常见的疑问#
丢失描述符,就一定无法恢复吗?#
不一定。其他兼容的钱包备份可能保留了配置,已知脚本也可能提供部分资料。例如,BIP141规定,花费P2WSH输出时会公开其见证脚本。但这不会自动公开全部扩展公钥,也不会自动重建整个钱包的地址集合。能否恢复,要看还剩哪些资料。
校验和有效,能证明配置正确吗?#
不能。校验和帮助发现描述符抄写错误,但别人也能生成另一个描述符,并为它配上有效校验和。应对照可信备份及你要恢复的钱包核实配置;语法有效不等于来源真实。
来源与存档#
以上说明依据以下一手资料。存档链接用于日后核对所引用的内容。
| 来源 | 原始 URL | 存档 |
|---|---|---|
| BIP380 | 原始 URL | 存档 |
| BIP383 | 原始 URL | 存档 |
| Sparrow — MultisigBackupDialog.java | 原始 URL | 存档 |
| Bitcoin Core 31.1 — backup.cpp | 原始 URL | 存档 |
| BIP32 | 原始 URL | 存档 |
| BIP141 | 原始 URL | 存档 |


