← 返回总目录 · 区块链技术与应用笔记(BTC)
多重签名(Multisignature,简称 multisig)是比特币协议中的一个强大的功能,它允许在比特币交易中使用多个签名来授权某个操作。多重签名要求多个密钥的签名才能完成一笔交易,从而提供更高的安全性和灵活性。
原理:
假设有 3 个密钥(K1, K2, K3),并且要求至少 2 个密钥 来签署并批准交易。这样就构成了一个 2-of-3 多重签名(2-of-3 multisig)的模型。这意味着:
- K1, K2, K3 都有独立的私钥。
- 任何两个人(持有 K1, K2 或 K3)签署交易,交易才会生效。
如何创建多重签名地址:
- 生成公钥:首先,所有签名者各自生成自己的公钥(而不是直接用私钥)。例如,签名者 A、B 和 C 各自拥有公钥 P_A, P_B, P_C。
- 组合公钥:然后,所有参与者的公钥会一起组合成一个 多重签名地址。例如,假设我们使用 2-of-3 签名模型,则会生成一个地址,表示需要至少两个公钥的签名来完成交易。
- 脚本化输出:比特币的交易输出(Output)会使用特殊的脚本语言(Script)来表示这一多重签名要求。对于 2-of-3 的多重签名,其脚本(P2SH)将包含一个指定的条件:交易必须由至少两个签名者签署。
- 交易签名:当你发起交易时,必须满足多重签名条件,才能成功地将比特币转移到其他地址。这些签名会包含在交易的 输入 部分,并通过每个签名者的私钥签署。
比特币多重签名地址示例:
一个典型的 2-of-3 多重签名地址 的脚本结构类似于下面的示例:
2表示需要两个签名。
<P_A> <P_B> <P_C>是三个参与签名的公钥。
3表示地址可以由最多三个公钥中的任意两个签署。
OP_CHECKMULTISIG是比特币的脚本操作符,用于验证多重签名的有效性。
多重签名的实际用途:
- 增加安全性:
- 使用多重签名可以减少因单一私钥泄露导致资金丢失的风险。例如,一个企业钱包可以设置成 3-of-5 签名,意味着只有当至少三位管理人员签署交易时,资金才会被转移,这样即使某个签名者的私钥被盗,资金也不会轻易丢失。
- 保险机制:
- 多重签名可以作为保险的一种形式。例如,在一个团队或公司中,可以通过设置 2-of-3 签名,保证在两个或以上的人同意的情况下,资金才会被转移,避免个人滥用资金。
- 联合钱包:
- 多重签名常用于 “联合钱包” 或者“合作钱包”中,在这种钱包中,多个签名者共同控制一个钱包的资金。例如,一个家庭的多个成员可能都需要参与确认资金转移,或者两个合作伙伴都需要批准资金的转移。
- 智能合约:
- 多重签名也可以与其他智能合约结合使用。比如,可以设置一个多签的条件,当满足某个特定的条件时,才需要执行特定的交易。
- 冷存储和热存储的结合:
- 多重签名地址可用于结合使用“热钱包”和“冷钱包”。例如,一个冷钱包用来存储长期资金,只有当需要用到这笔资金时,热钱包中的私钥才能参与签署交易,从而确保资金的安全。
创建多重签名地址的示例(Python):
假设我们需要创建一个 2-of-3 多重签名地址,我们可以使用
bitcoinlib 或 bitcoin 等库来实现。使用
bitcoinlib(一个 Python 库)的示例:多重签名交易流程:
- 生成多重签名地址:如上所示,使用至少两个签名者的公钥创建一个多重签名地址。
- 发起交易:某个签名者发起交易并生成原始交易。
- 收集签名:所有需要签名的参与者用自己的私钥签署这笔交易。
- 广播交易:交易签名完成后,广播到比特币网络。交易会被矿工验证,确保所有签名者的签名是有效的。
- 交易确认:矿工确认交易后,它将被打包到区块中,完成确认。
如果某个交易输出,其锁定脚本以
OP_RETURN操作码开头:我们称这是一个数据记录输出(Data Recording Output),这笔交易也被称为 OP_RETURN 交易,或 Null Data 交易。
1.
OP_RETURN 的定义OP_RETURN是比特币脚本的一种操作码,其作用是允许用户在交易输出中嵌入数据。该操作码的使用使得输出不再是一种可消费的比特币,而是表示一条数据。通常,在这样的输出中,不可使用这些比特币。这也意味着比特币被销毁了;因为你的utxo会减少,但是并不会有其他人拥有你少的这部分utxo,这部分比特币永久无法使用(等于被销毁)
2.
OP_RETURN 的使用目的- 数据存储: 通过
OP_RETURN,用户可以在区块链上存储小段的数据。这通常用于标记、记录或存储与该交易相关的信息,例如智能合约的状态、身份识别信息、文档指纹等。
3. 特点和限制
- 不可消费: 标记为
OP_RETURN的输出是不可消费的,即无法被后续的交易使用。这意味着这些比特币不会被转回到系统中。也意味着这笔交易并不会占用utxo的空间,因为矿工知道这笔交易的比特币永远不可能使用,自然就不会将其写入utxo集合中浪费空间;
这种方式更现实的意义是利用区块链不可篡改的作用,来记录重要信息,比如把自己的专利加上作者时间戳等信息,取哈希值写入其中,可以保证专利的所有权且不被篡改;或者加一些其他各种信息,比如有人在里面加入表白信息
(该交易id为b17a027a8f7ae0db4ddbaa58927d0f254e97fce63b7e57e8e50957d3dad2e66e可以自己查看):

- 作者:JIAHE
- 链接:https://blog.jiaheliu.top/Study-Notes/BTC-Multisig-and-On-Chain-Data-Recording
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。


