多重签名
在数字签名应用中,有时需要多个用户对同一个文件进行签名和认证。比如,一个公司发布的声明中涉及财务部、开发部、销售部、售后服务部等部门,需要的到这些部门签名认可,那么,就需要这些部门对这个声明文件进行签名。能够实现多个用户对同一文件进行签名的数字签名方案称作多重数字签名方案。
多重签名就是多个用户对同一个消息进行数字签名。
多重签名,可以简单的理解为一个数字资产的多个签名。签名标定的是数字资产所属和权限,多重签名预示着数字资产可由多人支配和管理。在加密货币领域,如果要动用一个加密货币地址的资金,通常需要该地址的所有人使用他的私钥(由用户专属保护)进行签名。那么,多重签名,就是动用这笔资金需要多个私钥签名,通常这笔资金或数字资产会保存在一个多重签名的地址或帐号里(就比特币而言,多重签名地址通常以3开头)。
Alice和Bob怎么对同一个数字文件签名呢?不用单向散列函数,有两种选择:
第一种选择是Alice和Bob分别对文件的副本签名,结果签名的消息是原文的两倍;
第二种就是Alice首先签名,然后Bob对Alice的签名再进行签名。这是可行的,但是在不验证Bob签名的情况下就验证Alice的签名是不可能的。
采用单向散列函数,很容易实现多重签名:
(1)Alice对文件的散列签名。
(2)Bob对文件的散列签名。
(3)Bob将他的签名交给Alice。
(4)Alice把文件、她的签名和Bob的签名发给Carol。
(5)Carol验证Alice和Bob的签名。
Alice和Bob能同时或顺序地完成第(1)步和第(2)步;在第(5)步中Carol可以只验证其中一人的签名而不用验证另一人的签名。
关于 MultiSig(多重签名),从原理角度上讲,多重签名本身并不复杂,简单来说,一句话就够了:“用 m 把钥匙生成一个多重签名的地址,需要其中的 n 把钥匙才能花费这个地址上的比特币,m >= n,这就是 n/m 的多重签名”
在实际的操作过程中,一个多重签名地址可以关联n个私钥,在需要转账等操作时,只要其中的m个私钥签名就可以把资金转移了,其中m要小于等于n,也就是说m/n小于1,可以是2/3, 3/5等等,是要在建立这个多重签名地址的时候确定好的。
多重签名给了加密货币腾飞的翅膀,让它单一单项支付的能力更具吸引力,让加密货币技术应用到各行各业成为可能。这里简单的罗列几个应用场景,供探索和思考:
- 电子商务。比较常见的是2/3的模式。上面电子商务网站的例子,就是最典型的场景之一,目前已经有成功的案例了。延伸一下,这类应用本质就是中介,所以还可用在各类中介机构性质的服务上。
- 财产分割。比如夫妻双方共有财产,可以使用1/2的模式,一个账户谁都可以使用,跟各自拥有帐号一样,好处是系统忠实记录了每个人的花销,闹掰的时候很容易清算。扩展到公司合伙经营,可以使用1/n模式,n个人合伙人,都可以直接支配共有资金,具体清算时,一目了然。
- 资金监管。其实,这是多重签名的最直接作用,一笔钱需要多个人签名才能使用,任何一个人都无法直接动用资金,这在生活中太常见了,只要灵活设置多重签名的比重模式,就能解决生活中很多问题。比如,接着上面夫妻的例子,夫妻要储备一笔资金,供孩子上大学使用,在这之前谁都不能动,那么把模式改为2/2,不仅限制了夫妻双方,也给黑客攻击增加了难度。
多重签名的设计,让各种业务去中心化充满无限可能。