能增强隐私的多签和潜在复杂脚本扩展性,是比特币下一次分叉的核心改进。

撰文:潘致雄

一次比特币协议的升级,可能会预示着未来 3 至 5 年的趋势,虽然大家并不关心比特币的技术迭代,更关注安全和主流人群接受度,但最终所有人都会受益于这次升级。

那个被你们认定为技术上不思进取的比特币协议,终于引来了一次值得关注的技术升级。比特币协议中具有里程碑意义的技术升级 Schnorr Signature(施诺尔签名)和 Taproot(树的主根)已集成到刚刚发布的 Bitcoin Core 0.21.0 版本中——这绝对值得关注,因为该升级有可能会影响未来 3 至 5 年的比特币生态,特别是针对机构级用户和多签的各种应用场景。

当然,对于比特币协议目前重要的关键词是「稳健」和「安全」,所以哪怕这些技术上线之后,社区和生态通常都会相当谨慎,就算不集成支持其实也没什么问题,不然还可能会引入不必要的风险和漏洞。

由于这次的升级是需要经过软分叉才能激活的,所以后续还需要看矿池和矿工对于该提案的支持程度,至少目前来看,矿池和矿工相当积极,大于 90% 的算力已经宣布会支持该升级。

Schnorr Signature 是以德国数学家和密码学家 Claus-Peter Schnorr 命名的数字签名算法,由于在 2008 年之前处于专利保护的状态,所以中本聪在设计比特币协议时并未使用该签名算法,而是选用了当时更适合且开源的椭圆曲线数字签名算法(ECDSA)。

但是比特币核心开发者在将近十多年后却认为,Schnorr Signature 才是比特币的未来,因为它在密码学特性上的优势,可以在几乎同等(甚至更好)安全的基础上,更方便和「低调」地构建多签名交易,也能为寸土寸金的区块节省不少空间。

比特币协议中除了签名算法之外,还设计了一套脚本语言定义如何使用比特币。Taproot 就是一套可以在 Schnorr Signature 的特性之下,让比特币更强大的全新脚本语言体系,并且,还设计了 Tapscript 脚本语言,对花费比特币的方式进行了微调——具体的技术细节,这里就不继续展开。

在这些技术的组合下,比特币多签类地址可以不用暴露出自己的「多签」身份,也可以支持数量众多的多签场景,同时在经济层面上也有些许优势,可以降低链上的交易费用,特别是对于需要高频操作的地址而言,可以节省不少的成本。

比特币协议是如何升级的?

在介绍 Schnorr Signature 和 Taproot 之前,有必要先回顾一下比特币协议升级的流程步骤,毕竟这是一件相比其他区块链网络升级低频许多的事件,甚至许多区块链从业人员也不甚了解。

粗略来说,比特币协议的升级分为六个阶段:

第一阶段:所有的一切都诞生于一个点子或一个创新的想法,然后比特币的核心开发者们会在邮件中进行初步的阐述和讨论。第二阶段:提交 BIP (比特币改进提案)的草案,这个阶段可能会通过 GitHub 进行归档。第三阶段:核心开发者们在邮件中针对提案进行详细的讨论,涉及所有的技术细节或可能的问题、挑战。第四阶段:进入正式的开发阶段,以及后续的测试,并将功能加入比特币核心客户端。第五阶段:进行投票,然后等待网络逐步激活,也就是最终的上线。第六阶段:第三方应用集成支持。

如果我们回顾此前比特币比较重要的协议升级,会发现其实新功能的采用率并不高,而且通常是 3 年之后也仅仅是极低的采用率。

比如,约三年前的隔离见证(SegWit)升级,为区块提供了些许的扩容,使用隔离见证的地址可以降低一些转账成本。而根据 txstats.com 的数据,目前储存在隔离见证地址中的比特币数量不到 8%。(数据来源:https://txstats.com/dashboard/db/bech32-statistics)

出现这样的情况,一方面的原因是很多 BTC 资产可能已经丢失,或者对于大型机构而言改造这套体系需要付出太多成本,同时也会引入一些不必要的风险,毕竟安全更重要。不过从积极的方面来看,网络中接近一半的新交易都采用了隔离见证。(数据来源:https://txstats.com/dashboard/db/segwit-usage)

而闪电网络协议也是比特币自 2018 年以来持续迭代更新的 Layer 2 扩容支付通道技术,目前这个网络的容量还处于一个非常小的规模(约 1000 个 BTC),仅占 BTC 总量不到万分之一。

所以对于 Schnorr Signature 和 Taproot 而言,虽然在最新客户端中已经植入了该功能,但是功能是否会激活启用,以及后续的生态如何支持,还需要看之后三至五年的发展了。钱包、托管商、交易所、大型机构都会按照自己的用户需求、安全需求、功能需求综合考虑,逐步引入。

三年多的布局,由 Blockstream 主导

当我们整理比特币核心开发者针对 Schnorr Signature 和 Taproot 进行讨论和研究的时间线时,发现这个方案从提出到集成已经超过了 3 年的时间。

虽然 Schnorr Signature 是 Taproot 得以实现的基础,但是最早被提出的其实是 Taproot——这是一套可以丰富比特币脚本的方案,最初由 Blockstream 联合创始人 Gregory Maxwell 在比特币核心开发者邮件组中提出。

半年后,Blockstream 另一位联合创始人 Pieter Wuille 则提出 Schnorr Signature 替代比特币现有的椭圆曲线签名(ECDSA),通过其特有的「线性」特点,实现密钥的聚合、提升区块验证速度。

在此之后,这两个技术也就被组合起来作为一个大的方案,共同推进,最后在去年初形成了三个正式版 BIP,进入开发阶段:

BIP-340: 在 secp256k1 曲线上实现 Schnorr Signature (注:此前比特币使用的椭圆曲线签名也是采用的 secp256k1 这一条)BIP-341: Taproot:隔离见证 V1 版本的花费规则 (注:此前在 2017 年底推出隔离见证升级中,使用的是 V0 版本规则)BIP-342: Taproot 脚本的验证方式(注:该文档描述了修改部分比特币操作码)

虽然 Gregory Maxwell 和 Pieter Wuille 先后离开了 Blockstream,但是 Schnorr Signature 和 Taproot 的大多数核心参与者都来自于 Blockstream,只有 Anthony Towns 一人除外——他之前是 Xapo 的工程师,后来加入了投资机构 Paradigm。

Schnorr Signature 有什么用?

在比特币协议中,判断用户是否有权限使用一笔资产时,除了需要经典的「数字签名」算法这个密码学组件之外,还构建了一种基于「锁定脚本」和「解锁脚本」的概念。

在此之前,中本聪在设计比特币协议时,需要考虑到签名算法的签名长度、是否开源、是否有专利、是否经过足够长时间的安全验证、性能等多种条件,最终选择了椭圆曲线数字签名算法(ECDSA),还在其他专家的建议下选择了一条特殊的椭圆曲线 secp256k1。

但是能满足上述这些条件的数字签名算法不止有 ECDSA,特别是有 Schnorr Signature 这个从各个方面都不亚于 ECDSA 的数字签名算法。而此前中本聪没有采用的理由可能是因为在比特币白皮书诞生的那一年,Schnorr Signature 的专利才失效。

没错,德国数学家和密码学家 Claus-Peter Schnorr 在 1990 年提交了相关专利申请并获批,而对于开源社区来说,在专利失效前是无法采用这套技术的,不然中本聪还真有可能在初版比特币协议实现中采用这套签名算法机制。

相比较 ECDSA,Schnorr Signature 更像是比特币签名算法应该有的样子。性能提升和签名长短的优势就不提了,更重要的是它的「线性」特点,可以很方便的进行密钥聚合,而不是通过其他特殊技巧实现多签。

这个「线性」也很好理解,各个密钥的参与方可以通过简单的机制处理就可以聚合生成一个新的密钥。而这个聚合的机制可以通过很多种方式进行,比如 Blockstream 就提出了 MuSig 和后面的更新版 MuSig2。在 MuSig2 的方案中,多个签名可以从他们各自的私钥中创建一个聚合公钥,然后共同为该公钥创建一个有效签名,并且从原来的三轮交互(MuSig)优化为只需要两轮的交互即可。

所以以一个 2-3 的多签交易来看,原来的传统方式是需要三个公钥加上两个签名才可以发起交易。

在 Schnorr Signature 场景中,链上交易只需要一个聚合的公钥和一个签名即可,同时也就能降低很多的交易字节数,也就是降低了转账成本。

所以,这也就又能带来两个额外的优势:私密性和超级多签。

由于只需要暴露一个签名和公钥,所以对于使用 Schnorr Signature 的地址,很难判断这是否是一个多签的地址,那也就无法得知多签的组成是什么样的,对于外部观察者而言,这就是一个普通的地址。

而对于之前的比特币脚本,在交易时是需要暴露出部分多签细节的,所以这也是为什么可以知道地址的多签构成。

BitInfoCharts 的比特币富豪榜,后面这个小标记标注了多签地址以及多签规则

此前,因为脚本的限制而无法支持很大数量的多签,也因 Schnorr Signature 得以实现,这可能会打开很多此前无法想象的应用场景,比如开启一个几百个地址规模的多签地址,实现更去中心化或更多样化的资产托管等。但可能会提升链下交互的复杂度,只能寄希望于 MuSig2 这些机制可以更快的研发和迭代。

Taproot 是什么?

Taproot 是一套全新的比特币脚本结构,定义了如何使用和收取 Taproot 类交易的地址。它最早的概念来自于比特币开发者提出的 MAST(默克尔抽象语法树),所以 Taproot 可以算是 MAST 的一种特殊实现。

相比之前的比特币脚本逻辑,MAST 概念中最主要的优势是可以以更私密的方式,实现更多样化的逻辑。

在构建一个 MAST 结构时,可以支持数量很多的脚本,如果这里以两个为例,用户可以提前准备一个主要的支付脚本和一个备用的支付脚本,最终生成一个递归上去的 MAST 根的哈希值。在使用这笔资产时,用户可以解锁主要的支付脚本,且不暴露备用的支付脚本细节,而是用它的哈希值。

这也就意味着,对于一个无论多复杂包含多少解锁方案的的 MAST 根,用户在解锁这笔资产时,只需要暴露其中的一个脚本即可,其他更多的逻辑都可以用哈希值体现,而不暴露任何其他细节。

说回到 Taproot,其本质也是类似的。而且这其中需要签名算法的「线性」特性,所以 Taproot 才需要和 Schnorr Signature 绑定在一起。

Taproot 也是隔离见证的延续在比特币协议中,「锁定脚本」(输出脚本)定义了如何收取比特币(UTXO)的规则,「解锁脚本」(输入脚本)定义了如何使用比特币(UTXO)的规则,如果说前者是创造一个锁,那后者就是一把钥匙。

在三年前的隔离见证(Segwit)升级时,比特币的脚本规则进行了一次大规模的升级,提出了两种全新的脚本规则 P2WPKH(Pay to Witness Public Key Hash)和 P2WSH(Pay to Witness Script Hash),也就是现在那些以 bc1 开头的地址,都是采用了上述的脚本规则之一。P2WPKH 通常用在普通的地址上,P2WSH 通常用在多签地址中。

另外在隔离见证的升级中,脚本中还预留了一个版本号的概念,所有之前的 Segwit 脚本规则都采用了 V0 作为版本号,所以也可以称为 Segwit V0。而 Taproot 则是在 Segwit 的框架上进行了升级,版本号升级为 V1,这也就是 BIP 341 标题中 Segwit V1 的由来,或者这套脚本规则也可以称为 P2TR(Pay to Taproot),以对应 P2WPKH 和 P2WSH 的名字。

比如在某一笔交易中,输出脚本中 Segwit 版本号是 V0甚至可以构建多样化的多签体系在 Schnorr Signature 和 Taproot 的组合下,构建多签的方式也是多种多样的,比如比特币布道者 Steve Lee 就介绍(https://www.youtube.com/watch?v=fDJRy6K_3yo)过两种方法,分别是门限签名和 Musig 树(Musig Keytree)。

比如对于一个交易所的热钱包而言,可能是通过三个私钥进行 2-3 的多签,分别是「交易所私钥」、「可信第三方私钥」、「冷钱包备份私钥」。

在门限签名中,多个签名者需要利用 MuSig 机制预先构建收款地址;使用时将两个签名进行聚合,即可实现交易。

而在树状结构(Musig Keytree)中构建多签,就可以充分利用 Taproot 和 MAST 的优势了。同样是三种可以花费 BTC 的情况,将一种花费方式放在 MAST 的外部,而另外两种方式储存在 MAST 的两个节点中,以此构建收款地址。

如果拥有交易所密钥和第三方密钥的签名,就可以绕过 MAST 树状结构,直接生成一个聚合的 Taproot 签名,以花费这笔交易。

或者用户可以通过解锁「第三方密钥+冷钱包密钥」的脚本,加上 MAST 树另一边脚本的哈希,就可以构建出 Taproot 签名,以花费这笔交易。当然,用户还有第三种方式花费,也是一样的逻辑。

兼容性:问题不大

Schnorr Signature 和 Taproot 需要通过软分叉的形式升级,也就是旧版本协议和客户端可以继续运行,无需做其他调整。

但是未升级的节点是无法验证 Segwit V1 版本的 Taproot 类脚本的,会把他们当作是任何人都可以花费的脚本(anyone-can-spend scripts)。而对于那些未升级的钱包,可以继续接受和发送 SegWit V0 版本隔离见证地址,或者更早的传统地址类型(P2PKH)。对于部分实施了 BIP 173(Bech32 地址)逻辑的钱包而言,可能是可以支持将 BTC 发送给 Taproot(Segwit V1)地址。

不过,核心开发者依旧是鼓励大家升级,以便支持验证这些新型的交易。

矿工算力支持度已超过 90%

软分叉一般可以通过多种方式激活,之前多次软分叉是使用 BIP 9 的规则激活的,需要依据大量的算力发出支持的信号,而 BIP 8 也是类似的规则。

所以最终这套方案的上线还是需要矿工和矿池来投票和激活的。根据币印矿池整理的这份 Taproot 软分叉升级算力支持度来看,目前支持度已经超过 90%。而选择哪个具体的激活规则,很多矿池还未公开确认。

来源:https://taprootactivation.com

激活提案的种类还是挺多的,不过从目前已经投票的情况来看,很多都倾向于 BIP8(false,1y)的这个方式,也就是这个软分叉并不会强制激活,有 1 年的投票区间,如果投票通过阈值,就会激活。

但 Taproot 生态发展速度可能更慢

在 Taproot 激活后,接下去的事情就交给下游生态了,不过这应该是一个相比 Segwit 更漫长的普及之路。

由于 Schnorr Signature 和 Taproot 改进的更多是多签相关的场景,所以可以预料到第三方钱包、交易所都会比较谨慎,毕竟这不是一个立竿见影的技术升级。而对于那些有更复杂多签需求的专业用户、专业机构、甚至是依赖于多签的项目(比如跨链方案),更可能是第一批吃螃蟹的人。

无论如何,哪怕这不是一个用户感知度很高的技术升级,它最终也会因为各种基础设施的集成,实现更多样化的多签、私密性更强的地址类型、潜在的复杂逻辑支持、降低交易成本等各个方面,最终影响到生态内所有的用户。