Taproot与 Schnorr:比特币的可扩展性和隐私升级

发布时间:2019-07-04 20:39:23 来源:新锦福-新锦福官网-缅甸新锦福官网点击:33

  摘要:2019年5月6日,著名Bitcoin Core 开发者Pieter Wiulle向bitcoin-dev发送了一封名为“Taproot proposal”的邮件。这封电子邮件概述了三个新的BIP(比特币改进方案)的目标,它们正在争取加入Bitcoin Core 代码。其中两个BIP与Taproot有关,Taproot是一种增强隐私并且功能丰富的比特币脚本语言;最后一个BIP描述了Schnorr签名方案。Taproot和Schnorr签名一起提高了可扩展性和隐私性,这些更改可以在软分叉更新中实现,而不必强制进行广泛的协调来升级。

  软叉与硬叉

  需要注意的是,Taproot和Schnorr都可以作为软分叉实现。虽然在技术上可以在比特币中实现硬分叉,但它通常被认为是最糟糕的升级路径,原因如下:

  · 协调

  · 向后兼容性

  · 社区分裂的风险

  由于比特币的分散性,在这一点上,主要的经济、技术和社区参与者之间的协调几乎是不可能的。设置每个人都需要升级的最后期限是一个严重的挑战。软件开发团队有设计和迭代阶段,世界范围内的经济参与者并不总是使用相同的渠道。向后兼容性也是设计软件时不可忽视的一个重要设计决策。几乎所有保持向后兼容性的软件升级在长期运行中都会胜出,而那些破坏并使旧版本无法使用的设计则会失败。软分叉通常向后兼容,而硬分叉则不兼容。最后,当建议使用硬分叉时,存在社区分裂的主要风险。

  签名方案和多重签名

  1999年和2000年接受了数字签名算法 (DSA)、椭圆曲线数字签名算法 (ECDSA)作为 ANSI、IEEE 和 NIST 标准, 并提供了许多优点,包括更快的计算时间以及对内存和带宽的更低要求。值得注意的是, 比特币公钥和私钥可与 ECDSA 一起使用, 使用 secp256k1 曲线可用于生成 Schnorr 签名。

  在许多情况下,只需要一个签名就可以对消息进行签名。然而,很明显,在某些情况下,拥有多个密钥签名消息尤其有用,而且更安全。大多数多重签名方案通常需要来自多个人员、机构或编程脚本的m-of-n签名。这限制了资金的转移,直到满足m方之间合作的要求。

  比特币中的基本交易(将比特币发送到公钥)称为payto - public - key - hash (P2PKH)。与P2PKH不同,Pay to Script Hash (P2SH)是比特币中使用的一种高级交易类型,它允许发送方将资金提交到任意有效脚本的哈希值中。P2SH主要用于多重签名和非本地SegWit交易(P2WPKH-in-P2SH)。最初在BIP 16中概述,P2SH的目的是“将提供赎回交易条件的责任从资金的发送方转移到赎回方”。不会强制发送者在scriptPubKey中放入长脚本的消费条件,相反,发送者可以将其消费条件的哈希值放入到赎回脚本中。P2SH资金交易包含scriptPubKey中赎回脚本的哈希值。

  发送方可以资助赎回脚本,而其他人不知道脚本的具体支出条件——只有接收方知道进一步支出的条件。对于多团体交易,发送者可以在不知道多签名地址所需公钥的情况下发送资金。公钥只有在接收方使用资金时才会显示。当受助人选择使用资金时,必须披露整个脚本以及脚本的解决方案;任何人都可以验证提供的脚本确实是原始脚本。

  然而,P2SH也有缺点。必须揭示所有可能满足的条件。这自然会产生潜在的隐私问题,因为网络参与者可以了解所有可能满足条件的方法,比如使用哪种钱包,等等。此外,如果有许多可能的条件,计算和验证就会变得非常麻烦,在这种情况下,计算和验证就会变得非常繁重。

  其他多重签名方案包括Shamir的秘密共享(SSS)、Threshold ECDSA、Threshold Ed25519、Bohen-Lynn-Shacham (BLS)签名和Schnorr签名;这些方案之间有许多权衡,包括但不限于预图像、可信设置、交互轮、隐私和计算效率。

  Schnorr签名

  Schnorr签名于1991年获得克劳斯·施诺尔(Claus Schnorr)的专利,并于2008年到期。Schnorr签名的主要好处是它使区块链上的多签名和单签名交易无法区分。使用Schnorr签名,多个签名者可以生成聚合的公钥,然后使用一个签名联合签名,而不是在区块链上分别发布每个公钥和每个签名。这是一个重要的可扩展性和隐私增强的功能。Schnorr签名了取代ECDSA,使比特币的数字签名基础设施在多个方面变得更好,有三个关键的新功能:

  · 非延展性

  · 线性核查

  · 通过密钥聚合实现多签名隐私

  对于在比特币区块链上建立第二层网络来说,非延展性是一个显著优势。ECDSA的主要问题之一是: 接受一连串未经确认的交易是不安全的,因为后面的交易依赖于以前交易的哈希值,因此建议等到交易确认6次之后再进行。使用Schnorr,可塑性不再是一个问题,简化了第2层的采用并提高了安全性。

  Schnorr签名可以显著节省空间和验证时间。Schnorr签名验证是线性的,这意味着可以聚合签名验证步骤中的密钥和签名部分。这是一个称为批量验证的新特性,这意味着一次验证多个签名的速度比以前更快。它是通过一次验证多个签名而不是逐个线性验证来加速的。自然,随着签名集的增加,储蓄会增加,但最终会逐渐减少。

  

  分别验证n个签名和验证一批n个签名所需的时间之比随签名数量的增加呈对数增长;验证一批100个签名的时间要快1.75倍,

  BIPSchnorr使钱包软件能够将密钥聚合在一起。Schnorr的多签名输出看起来像单个签名输出。在Schnorr之前,多签名交易很容易被发现,并且可以与网络上的正常交易区分开来。在P2SH中,网络知道存在多签名交易、签名者是谁以及有多少签名者。使用Schnorr,外部观察者不可能看出其中的区别,因为签名者创建了一个具有单个签名的聚合公钥。这有助于提高可扩展性、可替换性和隐私性。

  Schnorr还获得了其他小的收益。Schnorr签名是一个固定的64字节签名,它低于现有的70-72字节ECDSA签名。

  Schnorr有正式的安全证明,ECDSA没有。Schnorr具有自适应签名,这是一个有助于原子交换的特性,也可以用于一般的支付渠道。

  Taproot & Tapscript

  Merkelized Abstract Syntax Tree (MAST)

  MAST最初是由比特币协议开发者刘江森博士于2016年提出的。MAST提出了一个新的witness程序,它使用Merkle树在脚本中编码互斥分支,从而实现更复杂的阻碍条件,通过隐藏未执行的条件来改善隐私,其成本非常低。MAST允许在Merkle树中构造多个支出条件,并且只需要公开满足的条件(与P2SH要求公开所有条件相反)。 如果满足任何条件,可以使用Merkle root和path来验证条件是否驻留在Merkle树中,同时隐藏Merkle树的其余部分。

  除了隐私方面的好处,MAST还可以创建更小的交易大小。非主交易大小在成本上呈线性增长,而主交易大小仅呈对数增长,为更复杂的产权负担情况提供了显著的缩放效率。鉴于比特币的字节大小受到严格限制,这一点尤其重要;裸脚本和SegWit有10,000字节的限制,P2SH交易有520字节的限制。

  

  具有和不具有 MAST 的子脚本和保留项数据大小的数量

  Taproot

  Taproot 升级是 MAST 协议的一个特殊实现, 它使输出和协作支出之间无法区分。[3, 4]与 MAST 一样, taproot 使用 Merkle 分支来隐藏脚本中未执行的分支。此脚本更新 (称为 Tapscript) 意味着部分执行的脚本在使用之前将其其余执行代码隐藏, 同时在以后由对等方验证和验证该代码时仍保留该代码的完整性。Taproot 和 Tapscript 从一开始就被设计为可控制和升级的版本。它们加入代码库并不是什么大的变化, 总的来说, 实现 Taproot 和 Tapscript 的共识变化只有500行代码左右。

  使用专门的比特币脚本很容易识别,而且从一个地址到一个外部观察者的简单支出看起来也不一样。对于Taproot,所有输出看起来都一样。Taproot真正的创新之处在于它对保护隐私的合作开销的灵活性:在某些情况下,Merkle树存在的证据不需要发布,只需要发布一个公钥和一个签名。比特币用户可以将比特币作为可编程货币使用,而无需识别他们是否在为此目的使用比特币,从而提高了比特币的隐私性和可替代性。

  脚本的所有参与者都可以就结果达成一致,而不考虑现有的条件,只需一起签署一个消费交易。这种“合作关闭”使用了Schnorr的Threshold签名”,使交易看起来像一个常规交易——参与者的公钥聚合在一起成为Threshold公钥。对于链,此合作交易作为常规交易的出现,具有传统的公钥和签名。

  只有在非协作的支出下,Merkle树的存在才会被揭示出来。在非协作开销中,可以使用满足条件的脚本对初始阈值公钥进行调整,以创建调整后的阈值公钥;这证明了只要满足剧本的具体条件,剧本的资金是可以使用的。或者,可以使用桅杆结构的Merkle root对阈值公钥进行调整,该结构适用于支出脚本资金的所有不同条件。这种方式只需要暴露满足的支出条件,其余条件可以隐藏,从而提高隐私,优化网络资源的使用。

  未来的升级路径

  使用Tapscript的Schnorr签名和主Taproot根通过隐藏脚本和模糊密钥提高了可扩展性和隐私性,并限制了第三方确定发生的交易类型的能力。这些改进可以极大地改进多签名交易的采用。未来,比特币开发者及其社区计划将这些增强功能集成到核心代码中。比特币的核心代码还将进行各种以隐私为重点的升级,这将使交易更安全、更私密以及使比特币更具可替代性。