摘要:
10月15日,由比特币核心开发者Pieter wuille领导的三项提案准则(bip340-342)正式纳入比特币准则的主要分支[1]。这三个提案包括Schnorr、taproot和tapscript。社区评估是比特币在隔离见证后**的技术更新。
Schnorr签名的主要目标是替换比特币的当前ECDSA签名。与比特币区块链中目前使用的ECDSA相比,Schnorr有一些优势:
(1) 签名的安全性可以从数学上得到证明,且不能推广;
(2) 签名可以为多签名参与者提供隐私保护;
(3) 签名的线性特征可以作为taproot等技术的基础,进一步提高交易的隐私性;
(4) 签名长度较短,可聚合多个签名,节省存储空间,实现比特币变相扩展;
(5) 可批量验证签名,提高验证效率;
但是,它也有一些不足之处
(1) 用户使用前需要多轮互动;
(2) 签名将消耗一些额外的资源;
(3) 签名要求随机数具有很高的随机性。
Schnorr签名作为一种可能取代椭圆加密算法ECDSA签名机制的技术更新,是比特币底层技术发展的重要里程碑之一。代码加入后,意味着技术已经基本成,需要等待社会各界确定软分叉的正式激活时间,但目前还没有最终结论。
1背景
Schnorr签名机制最早由德国密码学家和数学家Claus Peter Schnorr发明(见图1)。Schnorr数字签名也以他的名字命名。Schnorr的安全性是基于特殊的离散对数问题,它的安全性和简单性早已为人所知。但是Schnorr为他的签名申请了专利,所以技术很好,但是很长一段时间以来,有些应用程序无法直接使用它。
直到2008年,施诺尔的签名专利才到期。同时,业内也没有广泛接受的具体实施方案。因此,同年发布比特币白皮书的中本在当时并没有选择Schnorr签名方案,而是选择了当时比较成熟的ECDSA签名方案。随着施诺尔技术专利的到期,这项技术逐渐走向实用。随着核心开发者Pieter wuille等在比特币社区的推广,社区开始认真考虑应用Schnorr签名来取代目前的ECDSA签名,并以软分叉的方式进行升级。
2018年7月,比特币的核心开发者Pieter wuille提议升级Schnorr的BiP。随后,blockstream和开源社区也参与了相关的开发工作。在比特币正式采用之前,Schnorr已经通过BCH的hard fork提前部署。也就是说,在2019年5月,BCH将签名方案升级为Schnorr签名。它之所以会提前被激活,是因为它是通过硬分叉升级的。然而,比特币不能采用硬分岔方案,需要更精细的软分岔方案。随后,Pieter wuille进一步提出了直根/Schnorr软分叉的升级方案,并于今年1月正式发布,即本文提到的BIP 340-342。这一次,Schnorr的升级建议被正式纳入了代码库。已经纳入比特币主干网的三个提案是bip340:secp256k1的Schnorr签名[2]和bip341:1主根:segwit版本1支出规则[3]、BIP 342:主根脚本验证[4],其中第一个方案是Schnorr签署的主方案。Taproot是Merkel树的抽象语法树升级。与Schnorr签名一起,taproot将允许比特币以私有方式执行更多的智能合约脚本。**一个方案是对比特币前两个方案的补充,主要是对原来的比特币脚本进行升级,以支持Schnorr签名、批验证和签名哈希。不过,值得注意的是,施诺尔算法仍没有被业界标准化。BiP 340提案中采用的Schnorr仍然是基于比特币定制的。
2Schnorr签名和BiP提案
2.1 Schnorr签名到底是什么?
Schnorr本质上是一种密码签名技术,我们可以简单地理解,在比特币系统中,Schnorr将是ECDSA的替代升级方案。ECDSA的全称是椭圆曲线数字签名算法。它在比特币中的作用我们并不陌生。比特币网络的每个特征码都采用了ECDSA技术。例如,如果Alice想要发送一个事务,miner必须确认只有Alice拥有私钥并且有权处置资产。因此,Alice需要使用ECDSA生成一个不可修改的唯一签名来证明Alice拥有私钥并确认事务部分的具体数量。当Schnorr被正式激活时,这个工作将被Schnorr取代。这个过程如图2所示
2.2为什么需要更改签名方案?
在过去的10年里,ECDSA运行良好,似乎能够胜任生成签名这一关键任务。然而,ECDSA始终存在一个问题,即业界一直未能提供严格的数学和密码证明来证明ECDSA在数学上是安全的。相比之下,施诺尔可以。在一定条件下,Schnorr签名技术在数学上是安全的[5-6]。对于像比特币这样高度依赖安全性的加密货币来说,能够证明安全性的技术比在实践中没有问题的技术更可靠。同时,对于比特币,更重要的是,Schnorr签名具有“线性”特性,通过线性计算,可以将多个用户的公钥聚合为公钥,并生成相应的聚合签名。为什么“线性”特性对当前的比特币非常重要?ECDSA本身不支持多重签名。比特币现在由p2sh脚本处理,但p2sh类脚本将向网络公开多签名事务的存在并揭示所有签名者。Schnorr签名可以将多个签名聚合为一个签名,增强交易的隐私性,节省解锁脚本中多个签名占用的空间,节省链上宝贵的空间,实现变相扩展。总的来说,如果应用广泛,比特币的性能可提高5%~20%。另外,由于签名被聚合为一个,因此在签名验证过程中只需要一个验证,这将降低计算成本。下一章将详细介绍这一部分的技术细节。Schnorr签名对于比特币具有重要意义,因为它可以成为主根的技术基石。主根也是bip341第二个提案的内容。主根是从mast(merkelized abstract syntax tree)派生出来的,它可以用Merkel树的形式来表达复杂的脚本。我们知道,Merkel树的一个重要特征是它可以快速地验证节点值的存在性,而不需要揭示不相关分支的真实数据。因此,它被广泛应用于存储区块链中的交易和状态数据。基于这个特性,taproot可以运行脚本,而不显示脚本中未使用的分支条件。相反,p2sh需要显示所有脚本内容。结合Schnorr签名技术,taproot甚至可以使一个复杂脚本的事务(包括闪电网络事务、多签名事务、多判断分支事务等)看起来像一个普通的P2P KH事务。它不像普通的脚本那样保护隐私,也不能像普通的脚本那样保护事务,也不能用脚本来保护复杂的事务。这是主根与施诺联合作用的结果。
2.3 Schnorr将采取什么形式?
与许多以前的BIPS类似,Schnorr是以一种软分叉的方式进行的。BiP的全称是比特币改进建议(bitcoin improvement proposals)。一般来说,包括比特币底层区块链的技术更新、新功能引入和信息补充。自2009年中本网发布比特币区块链客户端的第一个版本以来,大部分技术更新都是以BiP的形式添加到比特币技术中的。目前,比特币社区已经采纳了100多个BiP方案,如隔离见证(BiP 144)、p2sh多重签名结构(BiP 49)和助记词(BiP 39)。我们可能对硬叉和软叉的区别并不陌生。在hard fork中,当社区在某些功能和技术上存在强烈差异时,主链将被分成两条链,新老客户互不兼容,如BTC和BCH、BCH和BSV。在软fork升级中,如segwit升级,虽然社区可能有差异,但仍然可以保持一个链,并且新老客户可以在一定程度上兼容。硬盘有时会给社区带来强烈的动荡,因此比特币社区对主动硬盘升级长期持保留态度,尽量避免通过硬盘升级。此次,比特币的施诺尔升级将通过软分叉完成,这是社区顺利激活的重要原因。替换ECDSA签名似乎是一个很大的变化。为什么Schnorr可以用软叉子来做这个?从施诺尔本人开始。Schnorr的安全性是基于一个特定的离散对数问题很难解决的假设,这种安全性可以用数学方法加以证明。换言之,只要这个假设成立,Schnorr签名的难解性将等同于离散对数问题。同时,在椭圆曲线中,存在一个与离散对数非常相似的问题。过去,比特币底层区块链技术中椭圆曲线数字签名算法(ECDSA)的安全性也是基于椭圆曲线离散对数问题(ECDLP)的棘手性。Schnorr签名仍然使用了原比特币的椭圆曲线,但采用了新的计算方法,可以**限度地兼容不想升级的版本,实现了软分叉升级。另一方面,施诺尔对赛格威特客户端做了很小的改动,目前赛格威特客户端的渗透率超过90%。根据卢克·达什尔据统计,到2020年10月,90%以上的比特币网络节点已经将客户端更新到0.16或更高版本,即segwit的升级版本。Segwit将签名信息与事务信息分离,并将其作为单独的结构附加到末尾。由于签名信息只起验证作用,不影响交易的关键参数,如传输地址、数量等,Schnorr签名主要影响签名信息。对于升级了segwit特性的客户端,Schnorr签名只涉及签名验证信息,**附加了一个单独的结构,因此影响较小。综上所述,Schnorr Signature可以通过软叉升级的形式添加到比特币区块链的底层,不需要硬分叉,不会给社区带来分裂。拒绝Schnorr签名的客户端仍然可以正常入网,完成打包等操作。作为区块链账本的升级方式,soft fork的实现难度更大,往往需要精巧的设计来绕开一些规则。但是,它具有更好的兼容性,不会导致共识分歧。这是一种渐进和温和的更新方法。由于soft fork的温和升级特性,以及由核心开发者(bitcoin core)驱动的Schnorr的小缺点,它具有很高的激活可能性。
3Schnorr签名技术的详细分析
接下来,我们来分析一下Schnorr签名的技术细节:
3.1高安全性
Schnorr签名的安全性在数学上得到了证明,但ECDSA尚未得到证明。虽然ECDSA多年来没有出现任何安全问题,但它就像一座从未喷发过、沉寂许久的火山,你不知道有一天它会不会突然爆发。一个经过数学证明的算法必须比一个可能有“隐患”的算法更值得信赖。在David pointcheval、Yannick seurin等学者[5-6]的数学证明下,我们知道在随机预言模中,很难假设椭圆曲线离散对数问题,而突破Schnorr签名的唯一途径就是解决离散对数问题。因此,在某种程度上,Schnorr签名更安全可靠。另外,Schnorr签名具有不可扩展性,与ECDSA(一种可扩展的签名算法)相比,这一点可以得到充分的证明。具体地说,基于ECDSA生成的签名,攻击者可以针对给定的消息生成具有相同有效性的新签名,而不必知道密钥。比特币中还提出了一种特殊的bip146来解决这个问题。然而,Schnorr签名自然是不可扩展的,可以直接避免这种安全问题。
3.2支持签名聚合,节省存储空间
签名聚合主要是指多个签名的聚合。多重签名是比特币中控制资金使用的一种技术。例如,我们常见的“三分之二”多重签名要求三方中至少有两人签署交易,然后资金才能使用。
例如,上面的图4是一个“2/3”多重签名输入脚本。您可以看到红色框中有两个ECDSA签名。有了这两个签名,基金就可以合法使用了。但是,ECDSA的多重签名并不聚合这些签名。它只是将每个签名放在输入脚本中,两个签名者的公钥也需要放在输入脚本中。如果存在“9/10”多重签名,则需要在块中存储9个签名和9个公钥,这会占用大量空间。但是如果使用Schnorr签名,这个问题可以得到改善。通过密钥聚合技术,Schnorr签名可以将任意一个60115“m of n”多个签名的m个签名聚合为一个签名,m个签名者的公钥也可以聚合成一个公钥。无论M有多大,只要在输入脚本中填充一个签名和一个公钥,就可以大大减少多个签名在块中占用的空间。
上图(图5)显示了Pieter wuille对比特币历史数据的模拟计算。将比特币历史数据中的所有多重签名替换为Schnorr的聚合签名后,比特币块的存储空间可以大大减少。以上只是Schnorr聚合签名中的一个,即“在utxo的单个输入中聚合多个签名”实际上,Schnorr签名有一个更强大的功能,可以“在utxo的多个输入中聚合多个签名”,使得整个utxo只有一个Schnorr签名。然而,这种聚合的前提条件更为严格,实施也更为复杂。
3.3缩短签名长度,节省存储空间
根据Pieter wuille的方案,比特币中使用的Schnorr签名算法的长度为32字节,签名长度为64字节。比特币目前使用的ECDSA签名算法公钥长度为33字节,**签名长度为72字节。比特币区块节省一点空间意义重大。
例如,对于图3中具有两个输入和两个输出的utxo,红色框中选择的部分是输入中填充的ECDSA签名,长度为72个字节,后跟一个33字节的公钥。在Schnorr签名后,签名和公钥占用的空间可以减少到64字节和32字节。实际上,Schnorr签名还有另一种变体,它可以将签名缩短到48字节。但是,Pieter wuille并不推荐它,因为它不支持批量验证。
3.4加强隐私保护
Schnorr可用于将多个密钥聚合为一个密钥。它可以使比特币“多重签名”钱包发布的交易仅显示其中一个聚合交易,使多个钱包更加简洁和私密。过去,当用户使用基于ECDSA签名的“多重签名”钱包时,由于要显示多个公钥,很容易暴露在钱包的多重签名中。然而,基于Schnorr签名,多个密钥在链下聚合,使得多签名事务看起来像普通事务(即单签名事务)。在上面的“2/3”多重签名的例子中,我们可以看到提供签名的双方的公钥是公开的,即参与多重签名的两方是公开的。然而,如果使用Schnorr的聚合签名,公钥也将聚合为一个,这将不会揭示哪两方参与了多重签名。聚合的多重签名与普通的“单签名”看起来甚至没有区别,这意味着外部世界甚至不知道这是一个多重签名。这极大地保护了多个签名者的隐私。
3.5可批量验证签名,提高验证效率
Schnorr签名由于其线性特性,可以自然地支持批量验证。其实,原理并不复杂。Schnorr签名的验证过程是判断一个等式是否为真。其中,在前面的方程中引入的方程,根据乘法的分布规律,很容易看出方程成立。批验证是当有n个这样的方程需要验证时,我们可以将它们的左右两边相加。这样,我们只需验证一次等式是否为真,就可以判断N个签名是否合法。而原来验证n个方程,计算时需要做n次乘法,现在可以组合成,只需要做n-1加法和1次乘法,大大提高了验证效率。Schnorr签名的这种线性特性是自然的,因此即使来自不同用户、不同TX甚至不同块的签名也可以组合起来进行批量验证。新的完整节点在同步块数据时需要做大量的验证工作。如果比特币使用Schnorr签名,批量验证可以显著提高整个节点的同步速度。
3.6一些不足之处
以上这些都是Schnorr签名的优点。事实上,这些福利是要付出代价的。由于Schnorr聚合私钥签名的特点,它需要参与者之间进行多轮交互,这比以往的ECDSA更麻烦。而且,它对随机数的要求很高,必须保证随机数不易被攻击者猜到,一些传统的伪随机数生成方法也不一定适用。同时,PC机计算这些签名和生成随机数的过程相当繁琐,这将导致发送事务时稍有延迟,需要PC机消耗更多的计算带宽资源。然而,在现有的技术条件下,这些问题可以在一定程度上得到解决和克服。
4与ECDSA相比,Schnorr签名比ECDSA安全可靠,同时也带来了比特币链上空间的扩展,使得比特币的性能略有提高。同时,Schnorr签名可以保护参与者的隐私多重签名和闪电网络技术,更多的智能合约脚本可以用taproot添加。目前,该方案由核心小组成员推动,并以软叉方式升级。未来成功激活的概率很高。施诺尔签名也有望为比特币和区块链世界带来更多新鲜的技术活力。
文章标题:热线观点:为什么施诺尔签名被认为是比特币赛格威特之后最大的技术更新
文章链接:https://www.btchangqing.cn/133765.html
更新时间:2020年10月31日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。