首页 > 新手入门 > 正文

比特币的多重签名

分类:教程区块链资讯之家区块链资讯之家 2019-11-30 19:54

  今年1月份,加拿大的一家交易所QuadrigaCX的CEO叫Gerald Cotten在印度旅行的时候突然去世了,凑巧的是Cotten是唯一一个掌握交易所钱包密钥的人,所以CEO去世以后密钥也相当于是永久性丢失了,于是交易所迫于无奈只能停止服务,而交易所至少还欠用户2.5亿美元的资金,这样的悲剧是否可以避免呢?多重签名技术就是一个很好的解决方案。

1.多重签名定义

  什么是多重签名?比如工作中我们经常会碰到一个文件是要多个人签署才有效的情况,比如说当我们要离开一家公司的时候,一份离职报告需要找你的部门主管、人事主管、财务主管三个人来签名,这个离职才能够生效,这就是多重签名。

  在比特币这类加密货币当中也存在着多重签名机制,想要动用一个地址里的比特币进行转账,就需要多个人用私钥来签名表示同意。我们之前讲的都是一个私钥对应一个比特币地址,即发起交易的时候用一把私钥进行签名,就可以动用对应地址里的比特币。

  而比特币的交易除了一个私钥对应一个比特币地址之外,还有一种类型就是多个私钥对应一个比特币地址,想要动用这个地址里的比特币,就需要用多把私钥同时签名。通过之前的文章,我们已经知道了比特币的地址生成流程,1个私钥通过椭圆曲线算法生成1个公钥,这个公钥再通过哈希函数来生成地址,想要动用这个地址的比特币,就需要有相应的私钥,而多重签名则是利用多把公钥来生成一个地址。

  多重签名的原理:是用n把公钥生成一个多重签名的地址,我们可以自己去设定,至少需要其中的m把私钥签名才可以花费这个地址上的比特币,n≥m,叫做m-of-n的多重签名。

  

  赎回脚本对应着普通地址的公钥,是多重签名地址里面特有的,普通的比特币地址只是用公钥去生成的,多重签名则是把几个公钥拼接起来,形成一个赎回脚本,用赎回脚本去生成地址。

  上图中赎回脚本冒号后面这一串就是它的拼接方式:

  第1部分:是m字母,m代表着想花费这个地址里的比特币,至少需要几把私钥签名才能够去动用,m就是这个至少需要几把私钥的数字;

  第二部分:是pubkey公钥,需要n把公钥;

  第三部分:op(operation)是操作的意思,

  op_checkmultisig就是检验多重签名指令的操作。

  m是私钥签名的数量,n是生成这个多重签名地址时用到的公钥数量,目前可以做到的技术是m≤20,m≤n,也就说n最大能做到20。常见的m和n的组合是1-of-2,2-of-2和2-of-3。

  

2.多重签名的类型

  根据生成过程中参与方数量需要的私钥签名数的不同,多重签名交易可以分成很多的类型,最常见的是3种:

  第1种是1-of-2,是指有2个公钥参与,只要有1方私钥进行签名就可以生效。这种方式可以用于防止私钥丢失带来的损失。当其中一把私钥丢失的时候,还可以用另外一把私钥来支配地址中的比特币。

  像QuadrigaCX这个交易所就可以采用这种方式,比如说1把私钥由CEO保管,另1把私钥由其他的主管保管,这样即便CEO去世了,其他的主管也可以凭借备份的私钥来使用对应地址里的比特币。

  第2种是2-of-2,有两个公钥参与,且需要2个私钥同时签名才能够生效,这种可以用于家庭夫妻双方共同管理资产,必须要夫妻双方的私钥签名,才可以动用这个多重签名地址里的钱。当然这样的签名地址的风险是,如果其中1个人突然去世了,那地址里的比特币就永远都被锁住了。

  高晓松曾经发过这么一条微博,如下图:

  

  这种就可以看作一个简化版的2-of-2的多重签名,原本一个账户是对应着一个密码,现在他们把密码分成了两半,一个账户要两个密码同时输入才有效。

  第3种是2-of-3,有3个公钥参与且只需要其中任意2个私钥签名,交易就可以生效了。

3.多重签名地址的生成流程

  接下来我们实操生成一个2-of-3的多重签名地址,如下图:

  

  目前国内常用的几个钱包软件像im token,比特派等都还不支持多重签名。所以这里我们用上图中的这个工具网站来做,准备3对私钥和公钥来生成一个多重签名地址。

  第一步:把3个公钥分别粘贴进去,设置发起交易需要的签名数(enter the amount of signatures required to releasethe coins)为2,点击submit,就生成了一个多重签名地址,以3开头。

  

  我们来看一下这个赎回脚本的具体构成,如上图,52这个黑色的字体开头,到最后ae红色的字体结尾这一长串的字符串就是赎回脚本的构成。

  我们可以在这个赎回脚本里面来找一下公钥分别在哪里。

① 这里的3个公钥都已经用不同的颜色标出来了,第1个公钥是标成绿色;第2个公钥标成蓝色,第3个公钥标成紫色,它们都是04开头,是非压缩格式的公钥。

  ② 开头和末尾的52和53代表的是多重签名地址里面2/3的类型,52和53代表的就是2和3,只不过在进行指令进行输入的时候写的是52和53。

  ③ 最后红色的这两个字符ae表示终止,表示多重签名的赎回脚本到这里就结束了。

  ④ 中间标黄的41代表的是把后面65个字节的数据压入堆栈,65个字节是130个字符,也就是非压缩格式公钥的长度。

  普通比特币地址的生成方式,之前的文章已经讲过了,是先用私钥通过椭圆曲线乘法得到公钥,再通过base58check编码得到的。这里,我们讲多重签名地址的生成流程之前,先简单回顾一下比特币普通地址的生成流程。

  第1步是对公钥做SHA256,第2步呢是把SHA256得到的哈希值做RIPEMD160(这两部分组合起来叫做hash160),第3步是加版本号(比特币主网的版本号是00,多重签名的版本号是05,测试网络的版本号是6f),第4步呢,是把加了版本号之后的公钥哈希值做两次SHA256,第5步把得到的哈希值的前8个字符作为校验码加到公钥哈西的尾部,最后一步是把带有版本号前缀和校验码后缀的公钥哈希做base58check编码。

  多重签名地址的生成流程也是差不多的,只不过用于生成多重签名的地址是公钥拼接起来的赎回脚本,如下图:

  

  第1行public key公钥这一行粘贴赎回脚本,第4行里由于这个网页它默认的版本号设置成的是00,3开头的赎回脚本的地址签名版本号应该是05,这里手动把00改成05。

  多重签名里的赎回脚本就是类似于普通地址交易当中的公钥,能够进行多重签名交易的地址叫做多重签名地址,多重签名地址与普通地址不同,普通地址开头是1,多重签名地址是3开头,3开头的不止多重签名地址,隔离见证当中有一种地址也是3开头的,3开头的隔离见证和多重签名都是p2sh支付到脚本哈希类型的。

  多重签名地址如果是作为交易过程中加密货币的接收方来讲的话,它跟普通地址是没有什么区别的,但是如果是作为发起方要发起一笔交易的时候,就需要几把私钥一起进行签名,这个交易才可能生效。

4.

  多重签名地址的交易流程


  接下来我们来看一下多重签名地址里的交易具体是如何操作的,如下图:

  

  打开coinb.in这个工具页面,在New这个选项的下拉菜单栏里选择transaction,输入赎回脚本Redeem script,点击load,网页会自动跳出来这个赎回脚本对应的地址是什么。接下来在下面的地址里面输入收款方地址。如上图,收款方地址填了两个,第2个是找零地址,然后点击submit提交。

  

  在绿色的方框内跳出了这笔交易的信息,如下图:

  把这笔交易信息进行复制,然后点击上面的Sign签名,如下图:把交易信息粘贴在第2个方框内,private key这个方框中,从3个私钥当中选择1个填入(点击show就能看到输入的私钥了,如果不点的话,它会默认是不显示的,为了保密起见)。接着点submit提交,下面的绿色方框内跳出来的信息用私钥进行签名后的信息了。复制这个信息,把这个签名信息分享给第2个需要签名的人,和刚才的操作一样,在第2个方框中填入我们复制的签名信息,第一行的私钥方框内输入第2个私钥点击submit提交,第2个签名也完成了。

  这笔交易需要的签名就都有了,可以进行广播,点进broadcast广播界面,在第1个方框内输入两次签名之后的交易信息,点击submit提交就广播成功了,我们会得到一个transaction ID。如下图:

  在浏览器中去查询这笔交易信息的ID,你会发现这笔交易已经被广播在区块链上了,加入广播之后,矿工首先会检查这个地址是什么类型的多重签名地址,然后再用解锁脚本里的那些公钥对这笔交易进行验证,如果可以满足2-of-3这个条件,那么交易就可以通过了。

5.

  普通地址和多重签名地址的不同


  普通的地址交易类型是pay-to-public key hash(支付到公钥哈希),缩写的就是p2pkh,用公钥哈希进行编码之后作为地址,版本号是00,编码后地址是1开头的。

  而多重签名的交易类型是属于pay-to-script-hash(支付的脚本哈希),缩写为p2sh,把赎回脚本的哈希值进行编码作为地址,编码时版本号是05,编码之后地址是3开头的。

6.多重签名地址的利弊

  优点:多重签名的地址可以大大地增加地址当中加密货币的安全性,不会出现这种持有私钥的人意外去世了,地址里的加密货币就取不出来的悲剧情况,也更不容易被盗。

  缺点:多重签名地址的数据是要比普通地址的交易信息量要大得多,会占用更多的空间,也就意味着会支付给矿工的手续费更多一点,因为产生的交易信息数据更多。

  小 结

  1、多重签名是用n把公钥去生成一个多重签名的地址,至少需要其中m把私钥签名才可以花费这个地址当中的比特币,m≤n,目前常见的是三种类型:1/2,2/3和2/2。

  2、普通地址以1开头,交易类型是p2pkh(支付到公钥哈希),多重签名地址以3开头,交易类型是p2sh(支付到脚本哈希)。

  3、多重签名有利有弊。

  

  抓住时代红利 实现财富自由

  长按识别二维码关注

  ❖❖注:本文的发布或转载旨在传递更多信息

  如有侵权,请您联系小编,我们将尽快处理,谢谢

据说在看的都是躺赚哦
本文标签:多重签名 比特币

上一篇:炒币:玩比特币这么久,它的优点你知道么?

下一篇:区块链知识普及:数字钱包

猜您喜欢
关于我们联系我们作者投稿APP下载