主页 > imtoken多签钱包 > 为什么 Schnorr 签名被誉为比特币自隔离见证以来最大的技术更新

为什么 Schnorr 签名被誉为比特币自隔离见证以来最大的技术更新

imtoken多签钱包 2023-01-17 00:01:51

10 月 15 日,由比特币核心开发者 Pieter Wuille(BIP340-342) 的代码)牵头的三个提案正式合并到比特币代码的主分支中,三个提案分别包括 Schnorr、Taproot 和 Tapscript。内容。社区将这一变化评为自隔离见证以来比特币最大的技术更新。

Schnorr 签名的主要目标是替换比特币中当前的 ECDSA 签名。与比特币区块链目前采用的 ECDSA 相比,Schnorr 有一些优势:

签名安全性高,安全性可以数学证明,不可扩展;签名可以为多签参与者提供隐私保护;签名的线性特征可以作为Taproot等技术的基础,进一步增强交易的隐私性;签名长度更短,可聚合多重签名,可节省存储空间,实现比特币相对于兑换的扩容;可以批量验证签名,提高验证效率;

但是,它也有一些缺点,分别是:

用户在使用前需要多轮交互;签名会消耗一些额外的带宽和计算资源;签名对随机数的随机性有很高的要求。

作为可能取代椭圆加密算法ECDSA签名机制的技术更新,Schnorr签名是比特币底层技术发展的重要里程碑之一。加上这段代码后,意味着技术已经基本成型,还需要等待社区确定软分叉的正式激活时间,但这个时间点还没有最终确定。

1 背景介绍

Schnorr签名机制最初是由德国密码学家和数学家Claus-Peter Schnorr发明的(见图1),Schnorr数字签名也是以他的名字命名的。Schnorr的安全性是基于一个特定的离散对数问题,长期已知为了安全和简单。但是 Schnorr 申请了他的签名专利,所以这个技术很好,但是很长一段时间,一些应用程序不能直接使用它。

Schnorr 签署的专利直到 2008 年才到期。同时,没有被业界广泛接受的具体实施方案,因此同年发表比特币白皮书的中本聪没有选择 Schnorr 签名方案,但选择了当时比较成熟的ECDSA签名方案。随着施诺尔技术专利的到期,这项技术也逐渐落地。在比特币社区 Pieter Wuille 等核心开发者的推动下,社区开始认真考虑应用 Schnorr 签名替代目前的 ECDSA 签名,并进行软分叉。升级。

2018 年 7 月,比特币核心开发者 Pieter Wuille 提出升级 Schnorr 的 BIP,随后 Blockstream 和开源社区也参与了相关的开发工作。在比特币正式采用之前,Schnorr 是通过比特币分叉 BCH 中的硬分叉提前部署的。即2019年5月,BCH将签名方案升级为Schnorr签名。之所以会较早激活,主要是因为它是通过硬分叉完成的升级,而比特币不能采用硬分叉方案,需要更复杂的软分叉方案。

后来,Pieter Wuille 进一步提出了 Taproot/Schnorr 软分叉升级方案,于今年 1 月正式发布,即本文提到的 BIP 340-342。这一次,Schnorr 的升级提案已经正式并入代码库。已合并到比特币骨干网中的三个提案是 BIP 340:用于 secp256k1、BIP 341 的 Schnorr 签名:Taproot:SegWitversion 1 支出规则,以及 BIP 342:验证 Taproot 脚本。

比特币 私钥丢失_比特币怎么比特币钱包_比特币密钥丢失

其中,第一个提案是施诺尔签署的主要提案。Taproot 是 Merkle 风格的抽象语法树升级,与 Schnorr 签名一起,将允许比特币以私有方式执行更多智能合约脚本;而最后一个提案是对前两个关于比特币的提案的补充,主要是对原有的比特币脚本进行了升级,以支持Schnorr签名、批量验证和签名散列等。但是值得注意的是,Schnorr算法仍然没有被标准化行业,并且此 BIP 340 提案中使用的 Schnorr 仍然是基于比特币量身定制的。

2 Schnorr 签名和 BIP 提案2.1 Schnorr 签名到底是什么?

Schnorr本质上是一种加密签名技术,我们可以简单理解为,在比特币系统中,Schnorr将是ECDSA的替代升级。

ECDSA的全称是Elliptic Curve Digital Signature Algorithm。它在比特币中的作用我们并不陌生,我们对比特币网络中的每一个签名都使用了 ECDSA 技术。例如,如果 Alice 想要发送一笔交易,矿工必须确认只有 Alice 拥有私钥并且有权处置该资产。因此,Alice 需要使用 ECDSA 生成唯一且不可修改的签名,以证明 Alice 拥有私钥并确认交易部分的具体金额。而当施诺尔正式激活后,这项工作将由施诺尔接手。这个过程如图 2 所示。

2.2 为什么我们需要更改签名方案?

在过去的 10 年中,ECDSA 运行良好,似乎可以胜任生成签名的关键工作。然而,有一个问题困扰着 ECDSA,即业界一直无法提供严格的数学和密码学证明来证明 ECDSA 在数学上是安全的。相比之下,施诺尔可以。Schnorr 签名技术被证明在某些条件下在数学上是安全的。对于比特币这样严重依赖安全性的加密货币来说,能够证明安全性的技术肯定比在实践中没有问题的技术更让人放心。

同时,对于比特币来说,更重要的是Schnorr签名具有“线性”的特性,可以让多个用户的公钥通过线性计算聚合成一个公钥,并生成对应的聚合签名.

为什么“线性”特征对当前的比特币很重要?ECDSA 本身不支持多重签名。比特币现在通过 P2SH 脚本进行处理,但类似 ​​P2SH 的脚本会将多重签名交易的存在暴露给网络,并显示所有签名者。使用 Schnorr 签名可以将多个签名聚合为一个签名,增强交易隐私,节省解锁脚本中多个签名占用的空间,节省宝贵的链上空间,实现变相扩展。总体而言,如果它被广泛普及,它可能会带来 5% 到 20% 的比特币性能提升。

此外,由于签名合二为一,签名验证时只需进行一次验证,降低了计算成本。这部分的技术细节将在下一章详细介绍。

Schnorr 签名对比特币很重要,但也因为它们可以成为 Taproot 等技术的基石。Taproot 也是第二个提案 BIP 341 的内容。 Taproot 源自 MAST(Merkelized Abstract Syntax Tree),它可以用基于 Merkel 树的形式表达复杂的脚本。我们知道,Merkle 树的一个重要特性就是它可以快速验证一个节点值的存在,而不会泄露无关分支的真实数据,因此被广泛用于将数据存储在区块链中。事务、状态数据等。 Taproot 基于这个特性可以完成脚本的执行,而不会泄露脚本中没有用到的分支条件。相比之下,P2SH 需要显示所有脚本内容。

比特币怎么比特币钱包_比特币 私钥丢失_比特币密钥丢失

结合 Schnorr 签名技术,Taproot 甚至可以让复杂脚本的交易(包括闪电网络交易、多签名交易、多判断分支交易等)看起来像普通的 P2PKH 交易。支持复杂脚本,保护脚本隐私,不暴露签名者,让判断条件复杂的交易看起来和普通交易一样简单,形式上无法区分。这就是 Taproot 和 Schnorr 结合的效果。

2.3 施诺尔会采取什么形式?

和之前很多 BIP 类似,这次 Schnorr 是以软分叉的形式进行的。

BIP的全称是Bitcoin Improvement Proposals。一般来说,它包括比特币底层区块链技术的更新、新特性的引入和信息的补充。自 2009 年中本聪发布第一版比特币区块链客户端以来,大多数技术更新都以 BIP 的形式添加到比特币技术中。目前,比特币社区已经采用了100多个BIP提案,例如:隔离见证(BIP 144)、P2SH多重签名结构(BIP 49)和助记词(BIP 39)@ >). 等等。

你可能对硬分叉和软分叉的区别并不陌生。在硬分叉中,当社区对某些特性和技术存在强烈分歧时,主链将分为两条链,并有新老两种客户端。互不兼容,比如BTC和BCH,BCH和BSV等。在软分叉升级中,比如Segwit升级,虽然社区可能存在差异,但还是可以维持一条链,新旧不换客户端可以在一定程度上兼容。

硬分叉有时会给社区带来强烈的动荡,因此比特币社区长期以来对主动硬分叉升级持保留态度,尽可能避免硬分叉升级。本次比特币 Schnorr 升级将通过软分叉完成,这也是它很可能被社区成功激活的重要原因。

替换 ECDSA 签名似乎是一个很大的变化,为什么 Schnorr 可以通过软分叉来完成?这要从 Schnorr 本身说起。

Schnorr 的安全性是基于这样一个假设,即一个特定的离散对数问题非常难以解决,并且这种安全性可以用数学方法证明。换句话说,只要这个假设成立,Schnorr 签名的不可破解性将等于离散对数问题的不可破解性。

同时,在一条椭圆曲线中,也存在一个与离散对数非常相似的问题。以往比特币底层区块链技术中椭圆曲线数字签名算法(ECDSA)的安全性也是基于椭圆曲线离散对数问题(ECDLP)的难解性。

Schnorr签名仍然使用原始比特币使用的椭圆曲线,但采用了新的计算方式,最大程度兼容不想升级的版本,实现软分叉升级。

另一方面,Schnorr 对目前流行率超过 90% 的 Segwit 客户端进行的改动很少。根据luke.dashjr的统计,截至2020年10月比特币密钥丢失,比特币网络中超过90%的节点已经将客户端更新到0.16或以上版本,即隔离见证的升级版。Segwit 将签名信息与交易信息隔离开来,并将其作为单独的结构附加到末尾。因为签名信息只起验证作用,不影响交易的关键参数:如转账地址、数量等。Schnorr签名主要影响签名信息。对于升级了隔离见证功能的客户端,

比特币密钥丢失_比特币 私钥丢失_比特币怎么比特币钱包

综上所述,Schnorr 签名可以通过软分叉升级的形式添加到比特币区块链的底层,无需硬分叉比特币密钥丢失,也不会引起社区分裂。拒绝 Schnorr 签名的客户端仍然可以正常加入网络并完成打包等操作。作为区块链账本升级的一种手段,软分叉的实现难度更大,往往需要复杂的设计来规避某些规则,但它们的兼容性更强,不会导致共识分裂。这是一个渐进的过程。,一种温和的更新方法。

由于软分叉的温和升级特性,再加上 Schnorr 弊端较少且由核心开发者(Bitcoin Core)驱动,因此具有较高的激活概率。

3 Schnorr签名的技术细节分析

接下来,我们来解析一下 Schnorr 签名的技术细节:

3.1 高安全性

Schnorr 签名的安全性已经过数学证明,而 ECDSA 尚未得到证明。虽然ECDSA多年来一直没有出现安全问题,但它就像一座从未喷发过的火山,沉寂了许久,却不知道有一天它会不会突然喷发。并且经过数学证明的算法一定比可能存在“隐患”的算法更值得信赖。

借助 David Pointcheval 和 Yannick Seurin 等学者的数学证明,我们知道在随机预言模型中,很难假设椭圆曲线离散对数问题是困难的,而突破 Schnorr 签名的唯一方法是解决离散对数问题。

所以在某种程度上,Schnorr 签名更加安全和无需信任。

此外,Schnorr 签名不具有延展性,这与 ECDSA 这种具有延展性的签名算法相比得到了充分证明。具体来说,基于 ECDSA 生成的签名,对于给定的消息,攻击者可以在不知道密钥的情况下生成同样有效的新签名。BIP 146 也专门针对比特币提出来解决这个问题。但是,Schnorr 签名本质上是不可扩展的,可以直接规避这个安全问题。

3.2 支持签名聚合,节省存储空间

签名聚合主要是指多个签名的聚合。多重签名(简称多重签名)是比特币中控制资金使用的一种技术。比如我们常见的“2 of 3”多重签名,要求授权的 3 方中至少有 2 方签署交易,资金才能使用。

比特币 私钥丢失_比特币密钥丢失_比特币怎么比特币钱包

例如,上面的图 4 是一个“2 of 3”多签名输入脚本。可以看到红框中有两个 ECDSA 签名。有了这两个签名,资金就可以合法使用了。但是ECDSA的多重签名并没有做任何签名的聚合,只是简单的把每个签名放在输入脚本中,两个签名者的公钥也需要分别放在输入脚本中。如果存在“9 of 10”多重签名,则需要在区块中存储 9 个签名和 9 个公钥,占用大量空间。

但是如果使用 Schnorr 签名,这个问题可以得到改善。Schnorr签名可以通过一种称为Key Aggregation的技术将任意“m of n”多重签名中的m个签名聚合为一个签名,并且m个签名者的公钥也可以聚合为一个公钥。无论 m 多大,在输入脚本中只需要填写 1 个签名和 1 个公钥,可以大大减少区块中多重签名占用的空间。

上图为 Pieter Wuille 对比特币历史数据的模拟计算。将比特币历史数据中的所有多重签名替换为 Schnorr 的聚合签名后,可以显着减少比特币区块的存储空间。

上面提到的只是 Schnorr 的聚合签名之一,它是“在一个 UTXO 的单个输入中聚合多个签名”。事实上,Schnorr 签名有更强大的特性,可以“将多个输入的多个签名聚合到一个 UTXO”,从而使整个 UTXO 只有一个 Schnorr 签名。但是,这种聚合的前提条件苛刻,实现起来也比较复杂。

3.3 签名长度更短,节省存储空间

根据 Pieter Wuille 提出的方案,在比特币使用的 Schnorr 签名算法中,公钥长度为 32 字节,签名长度为 64 字节。对于比特币目前使用的ECDSA签名算法,公钥长度为33字节,签名最大长度为72字节。比特币区块价格昂贵,节省一点空间意义重大。

例如图3中2输入2输出的UTXO中,红框选中的部分为输入填写的ECDSA签名,长度为72字节;后面是 33 字节的公钥。那么使用 Schnorr 签名后,签名和公钥占用的空间可以减少到 64 字节和 32 字节。

其实 Schnorr 签名有一个变种,可以将签名缩短到 48 字节,但是 Pieter Wuille 不推荐,因为它不支持批量验证。

比特币怎么比特币钱包_比特币密钥丢失_比特币 私钥丢失

3.4 更强的隐私保护

Schnorr 可用于将多个密钥聚合为一个,它允许比特币“多重签名”钱包发送的交易只显示聚合的一个,这使得多个钱包更加简洁和私密。过去,当用户使用基于 ECDSA 签名的“多重签名”钱包时,由于需要显示多个公钥,很容易暴露钱包的多重签名状态。但是,如果基于 Schnorr 签名在链外聚合多个密钥,则多签名交易看起来与普通交易(即单签名交易)相同。

在上面的“2 of 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签名更加安全可信,顺便也带来了比特币链上空间的扩大,使得比特币的性能略有提升。隐私,结合 Taproot 也可以让更多的智能合约脚本增加隐私。

目前该提案由Core团队成员推动,采用软分叉方式进行温和升级。未来顺利激活的概率非常高。我也希望 Schnorr 签名能够为比特币和区块链世​​界带来更多新鲜的技术。活力。