比特币的 P2SH 多签和以太坊的合约多签,目前依然是市场主流。

原文标题:《多重签名发展 9 年,门限签名技术会是未来吗?》
撰文:谈国鹏,Ownbit 创始人

2011 年,BIP0011 将多重签名引入到比特币。自此,多重签名就作为比特币的核心功能之一,不断向前发展。

M-N 标准交易

该 BIP 提议将 M-N 的交易作为新的「标准交易」。

BIP0011,2011-10-18

BIP0011 提议将 M-N 交易作为新的「标准交易」(标准交易是比特币里的一个术语,是相对非标准交易而言的)。比特币为了实现软分叉升级,发明了标准交易和非标准交易。节点对于不同类型的交易,其验证的严格程度和接受程度不同,从而达到包容未来可能不认识的交易(非标准交易)。

将 M-N 交易类型升级为标准交易,意味着比特币网络正式具备了多重签名的能力。实现 M-N 多重签名的具体方式是引进了新的 OP_CHECKMULTISIG 操作符。例如,一个标准的 M-N 多签交易的 scriptPubKey 写成:

    m {pubkey}...{pubkey} n OP_CHECKMULTISIG

M-N 标准交易是 1.0 版本的多重签名,它也被称为:P2MS (Pay to Multisig Script)。

2012 年 1 月 30 日,比特币发展史上第一个多重签名交易被广播至网络,它是一个 1-2 的多签,发送金额为 0.01 BTC。

多重签名发展 9 年,门限签名技术能否后来居上?60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1

P2SH 多签

紧接着,2012 年 1 月,P2SH (Pay to Script Hash)通过 BIP0016 被引入到比特币。P2SH 对应于 P2PKH (Pay to Public Key Hash)。P2PKH 是 1 开头的地址,而 P2SH 是 3 开头的地址。P2SH 的作用是让比特币拥有自定义合约的功能。

P2SH 允许简单的逻辑控制(如 if... else...),并允许操作符(OP_CODE)列表范围内的任意逻辑组合。P2SH 是最早的智能合约(非图灵完备,相对后来的以太坊智能合约而言,其灵活程度大打折扣)。P2SH 也给比特币网络带来了更好的隐私性。

P2SH 可以包括任意逻辑,自然包括多签逻辑(即前文提到的 m {pubkey}...{pubkey} n OP_CHECKMULTISIG),因此 P2SH - MultiSig 就产生了。使用 P2SH 包裹的多签地址和其他 P2SH 地址一样,由 3 开头。花费 P2SH-MultiSig Output 的逻辑和花费普通 P2SH Output 的逻辑是一样的,提供出 Hash 值相等,且可以执行通过的原脚本。以 2-3 多签为例,其原脚本为:

<OP_2> <A pubkey> <B pubkey> <C pubkey> <OP_3> <OP_CHECKMULTISIG>

发送给 P2SH 多签地址的 Output 比起 P2MS 而言小了很多,下面是一个例子:

多重签名发展 9 年,门限签名技术能否后来居上?

60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1

相比 P2MS,P2SH 多签的优势是明显的,主要有二 :

  1. 交易输出(Output)要小得多,因此交易变小,所需矿工费也变少;
  2. 隐私性更强,单从交易输出无法判断接收方是否是多签地址。

花费 P2SH 多签的 Output 时,我们只需提供相应的签名(例如 2-3 多签,需要有 2 方各自提供签名)组装起来,并提供出相应多签的原脚本(以 2-3 多签为例,即为三方的公钥 Pubkey),如下图:

多重签名发展 9 年,门限签名技术能否后来居上?其中,sig A 和 sig C 为两方签名,redeemScript 为多签源脚本

以太坊多签

2015 年 7 月,以太坊主网上线。相比于比特币,以太坊实现了图灵完备的智能合约,因此以太坊无需定义 OP_CHECKMULTISIG 操作符,也无需定义 P2SH 交易输出等等。以太坊可以用合约账户完成多签以及更加复杂逻辑的功能。

所以在以太坊上,一般是通过部署一个多签合约,得到一个多签地址,来实现多签功能。向多签账户的转账就是向合约地址进行转账,而花费多签余额,就是对多签合约进行合约调用。例如以下是 Ownbit 多签钱包的合约源码,在源码中通过检测调用参数是否是有效的参与方签名,来决定批准或拒绝多签资产的花费。

多重签名发展 9 年,门限签名技术能否后来居上?https://cn.etherscan.com/address/0xDa06a25Fa725B22Ea40546Be031A46dB6B5bbb18#contracts

门限签名

随着技术的发展,近两年,门限签名(Threshold Signature )开始变得越来越热门。门限签名是一个分布式的密钥生成和签名方案。

前面所讲的多签技术均作用于区块链交易层(或者说逻辑层,通过代码实现多签逻辑),而门限签名作用于密码学层(私钥生成和签名方案)。因此一套门限签名方案适用于同一密码学的多个币(例如:比特币、以太坊同属于 ECDSA-Secp256k1,而 Tezos 和 Stellar 同属于 EdDSA-Curve25519)。

传统公私钥的生成方式是:随机数 -> 私钥 -> 公钥 -> 地址。整个过程在一个设备上,且可以离线完成。而门限签名首先定义出:m-n,即由 n 方参与私钥生成,同时 m 方参与可以完成签名计算。生成私钥和签名时相关方需同时在线,协作生成。这种多方参与计算,并且保持各自私钥片段保密的协作方式也称为:多方计算(Multi-party computation)。

门限签名带来以下天然的优势:

  1. 天然支持 M-N 多签;
  2. 从区块链交易层去看,使用门限签名的交易和使用普通私钥签名的非多签交易没有区别。由此带来的好处是:隐私性强、交易小、矿工费 便宜

对于比特币而言,门限签名带来的好处主要是交易体积小、矿工费便宜、隐私性强。而对于以太坊而言,门限签名可以带来更多的好处。使用门限签名,以太坊可以在私钥层面实现多签,而无需部署多签合约。这样多签地址将更加灵活,无需特殊改造,就可以参与 DeFi 应用,DApp 签名等(合约版本的多签地址若想参与 DeFi 应用,需要编写合约,用原生的方式进行针对性的合约调用开发,相当麻烦)。

虽然门限签名有以上提及的优点,但是它也有很明显的不足。不足之一就是它将私钥的生成和签名的过程变得非常复杂。它需要参与方同时在线协作。这就意味着,发送交易时,如果有一方不能及时在线,那么则无法完成。

另外一个缺点是,门限签名的私钥生成不能像普通 HD 钱包那样通过 xpriv 快速层级式地生成私钥。对于比特币这样,需要生成大量地址(找零地址)的币而言,略显麻烦。

门限签名技术在个人钱包端的应用探索才刚刚开始。这里面做得比较突出的是 ZenGo 钱包。ZenGo 钱包的实质是用户和 ZenGo 服务器之间的 2-2 门限多签钱包。其优点和缺点都非常突出。优点是可以降低用户保管助记词(或私钥)的压力(ZenGo 将 iOS 用户的私钥加密存储在 iCloud 上,因为单破解此处资产仍是安全的),可以实现无助记词加密钱包,生物恢复等等。缺点是,用户不能完整掌控资产,也不能在它处恢复(用户资产的安全性和可用性依赖于 ZenGo 服务器)。

以上只是门限签名技术实现普通钱包(非多签)功能。对于个人多签钱包而言,门限还有更多的难题需要解决。例如,如何让普通用户钱包之间实现直连(虽然 p2p 技术比较成熟,这依然大大加大了钱包的复杂度)。因为这些缺陷,门限签名钱包在个人用户端暂时还未能发挥太大的作用。目前门限签名一般被应用在企业级。例如:交易所后台的多签资产管理。

结语

比特币的 P2SH 多签和以太坊的合约多签,目前依然是市场主流。门限签名技术是非常前沿的新技术。它的优点非常突出,其缺点也相当明显。它是在密码学层面的一个创新,但不是完全替代传统多签技术的方案。

在特定领域(例如,企业级),可以将参与方以服务器的方式同时部署在线的,使用门限签名利大于弊。而对于普通用户的钱包产品,多签方案需要综合考虑用户的易用性,P2SH 多签、以太坊合约多签依然是更合适的选择!