全球区块链监管查询平台

简体中文
下载WikiBit

比特币刚更新了自闪电网络后的最大技术拓展:Taproot和Schnorr

比特币刚更新了自闪电网络后的最大技术拓展:Taproot和Schnorr WikiBit 2021-01-14 21:08

2021年1月14日,Bitcoin Core在GitHub上发布了0.21.0正式版源代码,距离上一个大版本0.20.0的发布接近6个月。在0.21.0版本中,最重要的变化是BitcoinCore已经植入了Schnorr Signature和Taproot相关提案的功能实现。Taproot/Schnorr概念在2019年5月由比特币核心开发人员Pieter Wuille提出采用。Taproot/Schnorr升级将是比特币自闪电网络上线后最大的技术拓展。那么什么是Schnorr Signature和Taproot?Schnorr 签名算法的优势是什么?Taproot是要解决什么问题?

  2021年1月14日,Bitcoin Core在GitHub上发布了0.21.0正式版源代码,距离上一个大版本0.20.0的发布接近6个月。在0.21.0版本中,最重要的变化是BitcoinCore已经植入了Schnorr Signature和Taproot相关提案的功能实现。Taproot/Schnorr概念在2019年5月由比特币核心开发人员Pieter Wuille提出采用。Taproot/Schnorr升级将是比特币自闪电网络上线后最大的技术拓展。那么什么是Schnorr Signature和Taproot?Schnorr 签名算法的优势是什么?Taproot是要解决什么问题?

  Schnorr 签名算法的诞生和落地

  在现实工作和生活中,我们使用签名来表达对一份文件的认可,其他人可以识别出你的签名,且无法伪造你的签名。数字签名就是对现实签名的一种电子实现。

  Schnorr 签名机制最初由德国密码学家、数学家 Claus-Peter Schnorr 发明,Schnorr 数字签名也以他的名字命名。Schnorr 为他的签名注册了专利,因此这项技术虽好,但是很长一段时间内,一些应用无法直接使用它。直到 2008 年时,Schnorr 签名的专利过期。

  但由于业界没有广泛接受的具体实现方案,所以在同年发布比特币白 皮 书的中本聪,在当时并没有选择 Schnorr 签名方案,而是选择了当时更为成熟的 ECDSA 签名方案。

  随着 Schnorr 技术专利的过期,这项技术逐渐落地,在比特币社区 Pieter Wuille 等核心开发者的推动下,社区内开始认真考虑应用 Schnorr 签名替代现行的 ECDSA 签名,并以软分叉的方式进行升级。

  Schnorr的优势

  比特币目前使用的 ECDSA 签名算法与Schnorr 签名算法,都属于椭圆曲线数字签名算法,它们使用同样的椭圆曲线 secp256k1 和哈希函数 SHA256,具有同样的安全性。Schnorr 签名算法主要有以下优点:

  第一,Schnorr 签名算法有可证明安全性。如果不知道 Schnorr 签名的私钥,即使有针对任意消息的有效 Schnorr 签名,也没法推导出其他有效 Schnorr 签名。而 ECDSA 签名算法的可证明安全性则依赖于更强的假设。

  第二,Schnorr 签名算法具有不可延展性(Non-malleability)。签名延展性的含义是,第三方在不知道私钥的情况下,能将针对某一公钥和消息的有效签名,改造成针对该公钥和信息的另一个有效签名。ECDSA 签名算法则有内在的可延展性,这是 BIP 62 和 BIP 146 针对的问题。

  第三,Schnorr 签名算法是线性的,使得多个合作方能生成对他们的公钥之和也有效的签名。这一特点对多重签名、批验证(Batch Verification)等应用非常重要,既能提高效率,也有助于保护隐 私。而在 ECDSA 签名算法下,如无额外的见证数据,批验证相对逐个验证并无效率提升。

  第四,Schnorr 签名算法因为使用同样的椭圆曲线 secp256k1 和哈希函数 SHA256,能兼容目前的比特币公私钥生成机制。

  Taproot的介绍和解决方案

  Taproot 升级可以视为默克抽象语言树(Merkelized Abstract Syntax Tree,简称 MAST)的一个应用。

  MAST 使用默克树来加密复杂的锁定脚本,其叶子是一系列相互不重叠的脚本(比如,多重签名或时间锁)。要支出时,只需披露相关脚本以及从该脚本通向默克树根的路径。MAST 又与支付到脚本哈希(Pay-to-Script-Hash,简称 P2SH)有关。但 P2SH 与常见的支付到公钥哈希(Pay-to-Public-Key-Hash,P2PKH)在表现上不一样,仍然有隐 私保护问题。Taproot 要解决的问题就是让 P2SH 和 P2PKH 在链上看起来一样,以解决隐 私保护问题。

  在介绍Taproot 的解决方案前,需要介绍下“协作式支出”和“非协作式支出”。涉及有限数量签名者的脚本,可以分解成两部分:第一部分是多重签名,所有签名者都同意某一支出结果,称为「协作式支出」;第二部分称为「非协作式支出」,可以有非常复杂的脚本结构。这两部分是「或」的关系。

  Taproot 的解决方案如下:

  (1)对“非协作式支出”脚本,采取MAST形式,用MerkleRoot表示默克树根;

  (2)对“协作式支出”脚本,采取基于Schnorr签名的多重签名算法。用Da和Db分别表示Alice和Bob的私钥,Pa和Pb分别表示Alice和Bob的私钥。因此,聚合公钥公钥是P=Pa+Pb,对应的私钥是Da+Db。

  (3)将“协作式支出”与“非协作式支出”合在一起表示成P2PKH形式,其公钥是:P=P+H(P||MerkleRoot)G;对应的私钥是Da+Db+H(P||MerkleRoot)。

  (4)当Alice和Bob同意“协作式支出”,他们用Da+Db+H(P||MerkleRoot)(只需他们中的一个人在自己的私钥上加上H(P||MerkleRoot))就行。在链上,这表现得如同P2PKH交易,有一个公钥和对应的私钥,而不需要披露底层的MAST。

  只有在“非协作式支出”时,才需要披露MAST的存在,但也只需披露被执行的那部分脚本。

免责声明:

本文观点仅代表作者个人观点,不构成本平台的投资建议,本平台不对文章信息准确性、完整性和及时性作出任何保证,亦不对因使用或信赖文章信息引发的任何损失承担责任

  • 通证换算
  • 汇率换算
  • 购汇计算
/
当前汇率
可兑换金额

0.00