BIT:读懂比特币协议重要里程碑:Schnorr签名和Taproot软分叉升级

作者:潘致雄

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

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

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

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

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

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

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

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

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

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

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

第一阶段:所有的一切都诞生于一个点子或一个创新的想法,然后比特币的核心开发者们会在邮件中进行初步的阐述和讨论。

第二阶段:提交BIP的草案,这个阶段可能会通过GitHub进行归档。

第三阶段:核心开发者们在邮件中针对提案进行详细的讨论,涉及所有的技术细节或可能的问题、挑战。

第四阶段:进入正式的开发阶段,以及后续的测试,并将功能加入比特币核心客户端。

第五阶段:进行投票,然后等待网络逐步激活,也就是最终的上线。

第六阶段:第三方应用集成支持。

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

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

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

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

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

三年多的布局,由Blockstream主导

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

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

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

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

BIP-340:在secp256k1曲线上实现SchnorrSignature

BIP-341:Taproot:隔离见证V1版本的花费规则

BIP-342:Taproot脚本的验证方式

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

SchnorrSignature有什么用?

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

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

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

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

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

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

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

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

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

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

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

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

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

Taproot是什么?

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

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

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

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

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

Taproot也是隔离见证的延续

在比特币协议中,「锁定脚本」定义了如何收取比特币的规则,「解锁脚本」定义了如何使用比特币的规则,如果说前者是创造一个锁,那后者就是一把钥匙。

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

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

比如在某一笔交易中,输出脚本中Segwit版本号是V0

甚至可以构建多样化的多签体系

在SchnorrSignature和Taproot的组合下,构建多签的方式也是多种多样的,比如比特币布道者SteveLee就介绍(https://www.youtube.com/watch?v=fDJRy6K_3yo)过两种方法,分别是门限签名和Musig树。

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

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

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

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

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

兼容性:问题不大

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

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

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

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

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

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

来源:https://taprootactivation.com

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

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

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

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

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

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:15ms0-3:61ms