在加密货币中,多重签名是指使用多个私钥签名同一笔交易。被多重签名所保护的资金只能通过 M-of-N 的密钥签署来获得使用权。 用例:
- 共享账户(1-of-2; 双方可单独的使用账户资金)
- 共识账户(2-of-2; 双方必须一起同意方可使用他们的资金)
- 门槛帐户(2-of-3; 如果买卖双方不同意,托管服务作为独立的第三方与卖方或买方共同签署。 )
- 安全账户(2-of-3; 一个所有者控制所有3个密钥,但通过不同的方式分散风险来保护它们)
- 任意门限帐户(M-of-N; 一些加密货币在签名者数量上提供了完全的灵活性)
Monero多重签名
Monero 并不直接实现多重签名(至少在按曾经的说法不是),而是通过分裂来实现这个功能。
交易仍然使用单个spend key进行签名,spend key是N个私钥的总和,这种设计的基本原理是将多重签名与环签名分离。
让我们假想一下2-of-3的方案, 我们有3个参与者,每个参与者被授予2个私钥,这样3把私钥就不会在参与者之间重复配对。这样一来,任何两个参与者一起拥有创建私有支出密钥所需的所有3个私有密钥。
多重签名是一个钱包级别的功能, 因此无法从区块链中知道哪些交易是使用多重签名创建的。
同样值得注意的是,在Monero中没有这样的多组地址。地址结构不关心底层的private spend key是如何创建的。
在 钱包设置多重签名之后,每个参与者最终都知道公共地址和private view key。 这对于参与者识别和解释他们应该共同签名的事务是必要的。
多重签名钱包设置
多重签名功能只能通过命令行钱包使用。 在使用多重签名之前,您应该熟悉 CLI 钱包。
让我们考虑一个2-of-3的方案,因为它推广得很好。
0. 打开你的钱包
访问你的钱包:
. / monerod -- stagenet -- daemon # 运行您的完整节点; 确保它完全同步
. / monero-wallet-cli-stagenet-wallet-file... # 运行你的钱包; 确保你有一些资金可以使用
1. 准备多重签名
每个参与者都独立地生成初始化数据(这并不是地址)。
每个参与者通过安全通道手动将他的初始化数据发送给所有其他参与者。
2. 生成多重签名
每个参与者使用来自其他参与者的初始化数据运算,得到的结果为第二轮初始化数据(second round of initialization data),但这仍然不是地址。
每个参与者通过安全通道向所有其他参与者发送他的第二轮初始化数据数据(second round of initialization data)。
3. 完成多重签名
每个参与者通过使用所有其他参与者的第二轮初始化数据数据(second round of initialization data)来完成钱包创建。 这最终会产生一个钱包公共地址和private view key,供所有参与者使用。
请注意操作对所有参与者都是对称的, 尽管我们考虑的是2-of-3的方案,但每个参与者都与其他参与者合作,秘密分割是由钱包内部执行的。
参与者之间安全地共享初始化数据是手动的, 钱包本身不提供任何安全的通信通道, 这超出了范围。
接受资金
由多重签名设置构建的地址类似于任何其他地址。
您可以基于它生成集成地址和子地址。
所有参与者都能够看到传入的资金,因为他们共享private view key。
对于 CLI,使用以下命令查看收到的付款:
address
refresh
show_transfers
支出资金
TODO
参考
本章内容由 JasonWan 翻译制作,欢迎打赏作者。 JasonWan 的门罗币钱包地址 为:
49UFRTW47HQ5dbpCPF5Ly36gP1s77Hg7j2Wcqe7VJ5wEW4fsywdyiR81x1Uey13pCWG26skGdj9CfG6Mk6xrKZmW7GKC35h