比特币 私钥 比特币多重签名

币种 2周前 (06-20) 14次浏览 0个评论

概述

在《比特脚本解析》一文中提到,比特币脚本的一种应用是多重签名(Multi-)。顾名思义,多重签名(以下简称多重签名)是指一笔交易需要多个私钥签名才能执行。

大多数情况下,交易是一对一进行的,买方将比特币支付给卖方给出的地址(即卖方的公钥哈希),卖方在需要时提供他的数字签名使用比特币。验证您的数字签名是否有效。但也会有这样的场景:一个钱包是多人共同持有的。例如,如果一家公司有 5 个合作伙伴,则公司钱包有 5 个私钥,每个合作伙伴持有 1 个私钥。为防止其中一位合伙人想充实自己的腰包或大肆挥霍,五分之三的人必须同时签名,才能取出钱包里的硬币。在这种情况下比特币 私钥,需要使用“多重签名”。

比特币中,多重签名的意思是:如果一个钱包有m个私钥,则交易需要n(1≤n≤m)个私钥的签名才能执行交易。对应现实,可以想象成这样一个场景:m个人共同管理一个基金(比特币),每个人都持有一个私钥。要使用这笔资金,至少需要获得其中 n 人的同意(签名)。执行。对应这个场景,m为5,n为3。

使用多重签名具有以下优点:

实现多重签名主要有两种方式:

下面描述这两种实现方式。

实现多重签名

为了实现多重签名,输出脚本(也称为锁脚本)具有以下形式:

1
2
3
4
5
6
7

n
OP_PUSHDATA(publicKey_1)
OP_PUSHDATA(publicKey_2)
...
OP_PUSHDATA(publicKey_m)
m
OP_CHECKMULTSIG

比特币 私钥_比特币钱包导出私钥_比特币 私钥 地址 关系

如果输出脚本是这种形式,则该交易为支付到多重签名(P2MS,Pay to Multi)交易,也常用来表示。其中,m表示一共有m人,每个人都有一个公钥,一共有m个公钥。这笔钱将支付给 m 个人并由他们共同持有;n 表示当 m 人想用钱赚钱时,需要 n 人的数字签名(即 n 人的同意)才能使用这笔钱。

解锁UTXO(可以理解为输出脚本支付的比特币的ID)时,需要提供一个输入脚本(也称为解锁脚本),其形式如下:

1
2
3
4

OP_PUSHDATA(sig_1)
OP_PUSHDATA(sig_2)
...
OP_PUSHDATA(sig_n)

可以理解为需要n个签名(即n个人的同意)才能使用这笔钱。当钱需要使用时,n个人提供输入脚本,将输入脚本和输出脚本拼接在一起,得到一个完整的执行脚本,然后执行该脚本。拼接脚本的形式如下:

1
2
3
4
5
6
7
8
9
10
11

OP_PUSHDATA(sig_1)
OP_PUSHDATA(sig_2)
...
OP_PUSHDATA(sig_n)
n
OP_PUSHDATA(publicKey_1)
OP_PUSHDATA(publicKey_2)
...
OP_PUSHDATA(publicKey_m)
m
OP_CHECKMULTSIG

其执行过程如图:

可见比特币 私钥,一条语句就可以完成整个多重签名验证。

比特币 私钥 地址 关系_比特币 私钥_比特币钱包导出私钥

但这种验证方式也有不足之处,它需要付款人(输出脚本)提供所有收款人的公钥。也就是说,要向有 5 个合作伙伴的公司付款,付款人需要先获取每个合作伙伴的公钥,这很不方便。

如果5个合作伙伴可以提供一个支付地址,而不需要付款人一一列出他们的公钥,这是最简单的,这可以通过P2SH来实现。

P2SH实现单点登录

P2SH(Pay to Script Hash)是除了 P2K(Pay to public key)和 P2KH(Pay to public key hash)之外的另一种支付方式。在 P2SH 的输入脚本中需要提供被调用的脚本,在 P2SH 的输出脚本中需要提供哈希。在讨论 P2SH 中多重签名的实现之前,我们先讨论一下 P2SH 中实现单签名的简单案例。

P2SH的输出脚本格式如下:

1
2
3

OP_HASH160
OP_PUSHDATA(redeemScriptHash)
OP_EQUALVERIFY

输入脚本格式如下:

1
2

OP_PUSHDATA(sig)
OP_PUSHDATA(redeemScript)

比特币 私钥 地址 关系_比特币 私钥_比特币钱包导出私钥

拼接后的脚本如下:

1
2
3
4
5

OP_PUSHDATA(sig)
OP_PUSHDATA(redeemScript)
OP_HASH160
OP_PUSHDATA(redeemScriptHash)
OP_EQUALVERIFY

使用 P2SH 支付时,收款人只需向付款人提供一个地址,付款人就可以向该地址支付比特币。这个地址是收款人Redeem Script的hash;当收款人要花这个金额汇款时,需要提供相应的Redeem Script和收款人的数字签名。如果Redeem Script执行后栈顶等于TRUE,则表示整个支付的验证通过。

执行拼接后的脚本,执行流程如下图所示:

上图中,如果执行结果为TRUE,接下来会执行,不过是收款人自定义的,我们也可以用它来实现多重签名。

P2SH实现多重签名

使用P2SH支付方式,可以使用Redeem Script实现多重签名。

P2SH实现多重签名时的输出脚本格式如下:

比特币钱包导出私钥_比特币 私钥 地址 关系_比特币 私钥

1
2
3

OP_HASH160
OP_PUSHDATA(redeemScriptHash)
OP_EQUALVERIFY

可以看出,P2SH在实现多签和单签时输出的脚本格式是一样的。

输入脚本格式如下:

1
2
3
4
5

OP_PUSHDATA(sig_1)
OP_PUSHDATA(sig_2)
...
OP_PUSHDATA(sig_n)
OP_PUSHDATA(redeemScript)

可以看出,在实现多签时,输入脚本的格式与单签略有不同。此时,不再只有一个数字签名,而是多个数字签名。

拼接后的脚本如下:

1
2
3
4
5
6
7
8

OP_PUSHDATA(sig_1)
OP_PUSHDATA(sig_2)
...
OP_PUSHDATA(sig_n)
OP_PUSHDATA(redeemScript)
OP_HASH160
OP_PUSHDATA(redeemScriptHash)
OP_EQUALVERIFY

比特币 私钥_比特币 私钥 地址 关系_比特币钱包导出私钥

执行拼接脚本。如果它等于 TRUE,它将开始执行。格式如下:

1
2
3
4
5
6
7

n
OP_PUSHDATA(publicKey_1)
OP_PUSHDATA(publicKey_2)
...
OP_PUSHDATA(publicKey_m)
m
OP_CHECKMULTISIG

至此,执行过程将与之前的“实现多重签名”部分相同。

以上就是通过多签实现的过程,整个过程如下图所示。

参考

[1] 比特币脚本如何实现多重签名?

[2]“支付到多重签名”和“支付到脚本哈希”

[3] 多重签名

[4] 比特币和 Arvind、Joseph Bonneau 等。3.2 节

挖矿网Ethos中文站简单易用的挖矿系统,为挖矿产业提供教程软件以及矿机测评交易信息等,挖矿网各种数字货币挖矿收益对比计算,挖矿网介绍挖矿的工具,以及矿场的最新消息等。http://www.ethospool.com/

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址