前言

多重签名:multi-signature,顾名思义就是多个用户对同一个消息进行数字签名。
“用N把钥匙生成一个多重签名的地址,需要其中M把钥匙才能执行完成这个地址上的交易,N>=M,这就是M/N的多重签名”。

意义

多重签名的作用意义非常,
如果采用单独的私钥,尽管以目前的密码学可以保证无法被暴力破解,
但是这个私钥不保证会以其他方式(如黑客通过木马,自己不小心暴露等)暴露出去的话,那么对应的数字资产也同时暴露无遗。
此时如果公钥是由多重签名方式生成,那么即便被盗取了其中一个私钥,盗取者也无法转移对应的数字资产(除非窃取满足M的私钥能力)。
即多重签名使资产更加安全和多样化管理,尤其在需要暴露私钥的交易过程中。

在类似EOS区块链网络中,私钥的丢失往往不能一定导致帐户的泄露,这是由于EOS的权限管理导致,拥有帐户的私钥只能说明有下一步操作的前置条件。

原理

由于一笔交易需要收集够M个私钥签名之后,才可以去执行。
所以大概思路就是

  • 发起者发起交易之后,将交易存储在一个容器之中,这个可以是一个类似pending队列的或者是eosio中的提案表的概念。
  • 然后对外监听这个发起交易的事件,对于其他的私钥拥有者可以对其签名通过或者不通过。
  • 待收齐签名之后,方可执行这笔交易。

实现

对于多重签名的实现还是很简单的,因为‘多重签名’中的签名并不是类似密码学中签名,而是可以理解为一个消息的反馈、确认。
也参考了以太坊solidity和EOS的eosio.msig的代码实现,也是如出一辙。
这里就不堆砌代码了,额外放在了仓库中。

源码分析