两三个人共管一份资产,比特币世界有 BIP-45 那样的派生规矩,Cardano 世界对应的答案是 CIP-1854。它在 2021 年 2 月提交,状态 Active,类别就写着 Wallets,解决的是多签钱包最底层的一件事:每个共同签署人的密钥,该从助记词派生树的哪一层、哪一个编号上取。
路径的四个编号
CIP-1854 给多签钱包单独换了一个 purpose:m / 1854' / 1815' / account_ix' / role / index。第一层 1854’ 把多签账户与普通账户(CIP-1852 用的 1852’)分开;coin_type 仍是 1815’,对应 Ada 在 SLIP-44 里的编号。角色层沿用 1852 的约定,0 是支付密钥,2 是质押密钥,1 留空未用。account_ix 可以取遍整个硬化区间,最后的 index 则限定在软派生域内。文档给的样例包括 m/1854'/1815'/0'/0/0 与 m/1854'/1815'/0'/2/42 这样的写法。

同索引纪律
多签的难点不在签名,在「对表」。CIP-1854 定的规矩是:拼同一个地址时,所有共同签署人必须用同一个派生 index——你出第 5 号密钥,我也必须出第 5 号。这样每个钱包都能凭自己手里的密钥独立推演出同一批地址。文档的示例场景里,两位用户交换账户公钥之后,双方钱包应当呈现出完全一致的 20 个地址,第 1 个地址用两人各自路径 .../0/0 上的密钥拼成,第 2 个用 .../0/1,依此类推。任何一方私自换索引,地址就对不上,问题会在对账时立刻暴露。
脚本模板与 cosigner 标签
钱包保存的脚本不是写死密钥哈希的成品,而是「模板」:脚本里用 cosigner#1、cosigner#2 这样的标签占位,标签与签署人的账户级公钥必须一一对应。要用新地址时,软件把所有标签替换成同一 index 下各签署人派生出的密钥,实例化出真正的脚本。签署人之间只需要共享第三层的账户公钥;由于支付与质押密钥都可以从账户公钥软派生,凑地址全程不必碰硬件设备——但签名时设备仍然必须在场。
谁先签、谁能广播
规范特意强调发起方的责任:组好交易后,发起方要先用自己的私钥签好、附上每个输入用到的脚本实例,再转给其他签署人。这一步相当于自证来处——如果发起方不先签,任何人都可以伪造一笔「看起来是 Alice 发来的」交易群发给所有共同签署人,而签名顺序让接收方能验证提案确实出自发起方。达到签名门槛后,任何一个认为交易合法的签署人都可以广播;几个人同时广播也不会有问题,账本保证只有一笔生效。规范的边界同样清楚:部分签名交易怎么在设备与手机之间传阅,不属于这份 CIP 的范围。
恢复与对账时这套规矩省了什么力
对日常使用而言,同索引纪律的价值在恢复与审计两刻。恢复时,任何一位签署人只要手里有助记词、电脑里存着其他签署人的账户公钥与脚本模板,就能离线重放出同一串地址,无需他人配合;这也是规范只要求共享到账户级公钥的原因——再往下派生全部走软路径,公开密钥就够用。审计时,钱包只需检查第 0 至第 19 号索引上的地址是否逐一吻合,索引错位这种最常见的实现 bug 会当场现形,不用逐笔对交易。规范还特意安排了一处防呆:模板标签与签署人账户密钥必须严格一一对应,多一个少一个标签都不允许实例化,从语法上堵死「换了人却沿用旧模板」的悬空签名。
为什么换 purpose,以及一处边界
把 1854’ 单列出来,好处是同一颗根种子(尤其是一台硬件钱包)可以并行管理普通账户和多签账户,互不污染,找回逻辑也各走各的。另一处容易被忽略的边界:如果有人往这条路径「不该有的形状」上打了钱——比如脚本不是按这套模板拼的——钱包会把它视为不属于自己的资产,不计入余额,但软件应当尽可能把这类异常提示给用户。多签与派生路径的基础概念,可对照比特币侧的 各管各的钥匙分支:BIP-45 给多方多签钱包定的派生路径 与 Cardano 主密钥派生的 同一句助记词恢复出不同地址?SLIP-0023 给 Cardano 主节点派立的两套规矩。共同签署人之间的信任与密钥管理各有风险,本文只是机制说明,不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。