Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
本文作者为万向区块链、PlatON首席经济学家邹传伟。
. R. ?) F0 Q- j' j7 \, F9 B
# x2 K0 C( n: g  ~8 a2020 年 1 月,由比特币核心开发人员 Pieter Wuille 于去年 5 月提出的 Taproot/Schnorr 软分叉升级提案已正式作为比特币改进提案(BIPs)发布,相关提案序号为 BIP 340-342。Taproot/Schnorr 升级如果获得社区支持,将是比特币自闪电网络上线后最大的技术拓展。本文查询了 BIP 340-342 相关文档 ,对 Taproot/Schnorr 升级做一个简单介绍。本文分三部分,第一部分简单介绍比特币目前的 ECDSA 签名算法,第二部分详细介绍 Schnorr 签名算法,第三部分介绍 Taproot。
9 Y5 e/ [, {0 t- D3 K. Q- n/ a7 w
; d. R9 {  o- z) _' ~" y& ^一、比特币 ECDSA 签名算法
6 i; N" w+ Z/ M$ S
. B, n9 H6 A0 H' ]" R) U比特币目前使用的 ECDSA 签名算法与建议的 Schnorr 签名算法,都属于椭圆曲线数字签名算法,它们使用的椭圆曲线都是 secp256k1。这一部分先介绍椭圆曲线 secp256k1,再介绍 ECDSA 签名算法。
$ R2 Y" F, w- M% D9 N5 w+ P# C
  }+ @1 `* F( U( f- H% w3 ?(一)椭圆曲线 secp256k1
! f( X* z/ y5 U5 l" g' P% n! z+ t! r/ B6 `6 W$ L

- S$ z9 D4 j% {6 u5 Y6 N" U6 i/ h8 M9 \
(二) ECDSA 签名算法
! O9 o- q  i' V+ J  }7 ^0 P
. {3 |' O5 G. g; z, G9 k/ z注: G 坐标为 (79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8), 阶等于 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141, 均采用 16 进制表达。5 Z! ?& W3 x9 R4 |( s1 e4 i* ]) T: ?( M* {
3 s; s# ]9 h& T+ {( C2 T
二、Schnorr 签名算法$ b2 ]4 B6 h/ V) M  X! G$ \
% M0 E* m& K) I
这一部分先介绍 Schnorr 签名算法主要特点,再分步骤介绍 Schnorr 签名算法及批验证,最后介绍基于 Schnorr 签名的多重签名算法。0 K# D+ P: S9 J- W; {2 {2 t

  v5 f) q4 t6 n7 o(一)主要特点Schnorr 签名算法与 ECDSA 签名算法使用同样的椭圆曲线 secp256k1 和哈希函数 SHA256,所以在这个层面它们具有同样的安全性。Schnorr 签名算法主要有以下优点。- b2 u8 S& Q; G+ c
0 _: ]5 j" g3 K
第一,Schnorr 签名算法有可证明安全性。在假设椭圆曲线离散对数问题难度的随机寓言(Random Oracle)模型,以及假设原像抗性(Preimage Resistance)和次原像抗性(Second Preimage Resistance)的通用群模型下,Schnorr 签名算法具备选择消息攻击下的强不可伪造性(Strong Unforgeability under Chosen Message Attack,SUF-CMA)。换言之,如果不知道 Schnorr 签名的私钥,即使有针对任意消息的有效 Schnorr 签名,也没法推导出其他有效 Schnorr 签名。而 ECDSA 签名算法的可证明安全性则依赖于更强的假设。7 ]+ C1 C+ W* S" J/ d3 l& k

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

  P+ q# x( {1 c$ {0 e6 M  a  h第三,Schnorr 签名算法是线性的,使得多个合作方能生成对他们的公钥之和也有效的签名。这一特点对多重签名、批验证(Batch Verification)等应用非常重要,既能提高效率,也有助于保护隐私。而在 ECDSA 签名算法下,如无额外的见证数据,批验证相对逐个验证并无效率提升。
% u0 b% |  f1 T4 v( T: }; {1 U% E) A( N9 ^. f! C8 r1 h+ U
最后,Schnorr 签名算法因为使用同样的椭圆曲线 secp256k1 和哈希函数 SHA256,能兼容目前的比特币公私钥生成机制。. u! R% f! W0 H

1 C( M' Q5 |- z3 k1 B$ ?(二) Schnorr 签名算法
& I- `  {1 m" T3 `1 ?% G: t0 B7 z6 ^6 g3 N" z6 G) Q" g& b& w
公私钥生成( @8 L: F- e3 u/ a
0 w/ u: j! Y. A* b! U
签名生成
, ~, D9 f% I0 s$ a# ]* I  ?
# _; ~. B4 D) o! z0 Z! y# i/ h签名验证. a  ]. H& B" ]

( W8 x, w8 T$ t% j( v1 U& Q7 `批验证/ u, B6 U9 p& I$ J

$ M0 N) ]/ X8 _+ z) N 7 Y  {& C8 [8 j: ]  ^- C2 L% l

, t5 L4 P9 O6 T" J0 u$ k4 H' q(三) Schnorr 签名算法与多重签名
/ ?; C6 i: y; J4 v8 a
1 y8 w' m/ {4 D6 t9 X密钥生成# W; G$ d, e: Q+ t
% `# n1 a) L- ~- {* R* X
签名生成
3 i) u. [! w. |  r7 c- C) K) M2 |0 C3 G4 n) y* A4 a# r
签名验证
$ P2 I( N2 z' K3 z/ d' ^! z: V- g& s/ T! Q2 A; w
三、Taproot 升级4 G; i$ |' |5 R$ i# H# [2 u: q3 ^

- z  K- O! {3 z2 h4 \! X4 YTaproot 升级可以视为默克抽象语言树(Merkelized Abstract Syntax Tree,简称 MAST)的一个应用,而 MAST 又与支付到脚本哈希(Pay-to-Script-Hash,简称 P2SH)有关。因此,这部分依次介绍 P2SH、MAST 和 Taproot。
% }# g6 Q5 d1 _$ z  i. U3 ~, S7 v+ y% v+ n8 C7 p# `
(一) P2SHP2SH 是 2012 年推出的一类新型交易,使复杂脚本的使用与直接向比特币地址支付一样简单。在 P2SH 中,复杂的锁定脚本被其哈希值所取代,称为兑换脚本(Redeem Script)。当随后出现的一笔交易试图花费这个 UTXO 时,必须包含与哈希值匹配的脚本,同时解锁脚本。P2SH 的主要优点包括:一是在交易输出中,复杂脚本由哈希值取代,使得交易代码变短。二是将构建脚本的负担转移至接收方,而非发送方。三是隐私保护性更好。理论上,除了接收方,任何其他方都可以不知道兑换脚本中包含的支出条件。比如,在多重交易中,发送方可以不知道与多重签名地址有关的公钥;只在接收方支出资金时,才披露公钥。但 P2SH 也存在不足:一是所有可能的支出条件最终都必须被披露,包括那些实际上没有被触发的支出条件。二是在有多个可能的支出条件时,P2SH 将变得繁复,会增加计算和验证的工作量。5 h( K) R; H4 I) c, |, O; s
  W2 A" W% m! Q+ r' m/ t
(二) MASTMAST 使用默克树来加密复杂的锁定脚本(图 3),其叶子是一系列相互不重叠的脚本(比如,多重签名或时间锁)。要支出时,只需披露相关脚本以及从该脚本通向默克树根的路径。比如,在图 3 中,要使用 script 1,只需披露 script 1、script 2 以及 hash 3 即可。) ?& }3 c0 ~6 b) ]  J
! l$ g* K8 e% k% \& z

6 G' W0 S: S. a( u$ S; J; u( u  I" F. X4 e+ o3 S
MAST 的主要优点包括:一是支持复杂的支出条件。二是不用披露未被执行的脚本或未被触发的支出条件,提供更好的隐私保护。三是压缩交易大小。随着脚本数量的增加,非 MAST 交易大小是线性增长,而 MAST 交易大小是对数增长(图 4)。
7 f# C- k9 G7 {# M" I8 i, x' A+ ^' ^

; D9 N. l5 F8 G0 T5 M& X& S
$ q  N! }6 W3 k) F0 a- w0 P(三) Taproot但 P2SH 与常见的支付到公钥哈希(Pay-to-Public-Key-Hash,P2PKH)在表现上不一样,仍然有隐私保护问题。有没有可能让 P2SH 和 P2PKH 在链上看起来一样?这就是 Taproot 要解决的问题。
0 X  e. B1 S" o  y3 V$ \
7 I* _1 ]  F+ W/ J涉及有限数量签名者的脚本,可以分解成两部分:第一部分是多重签名,所有签名者都同意某一支出结果,称为「协作式支出」;第二部分称为「非协作式支出」,可以有非常复杂的脚本结构。这两部分是「或」的关系。比如,在图 3 中,Script 3 是一个 2-of-2 型多重签名,需要 Alice 和 Bob 两人都签名才有效,是「协作式支出」;Script 1 和 2 是「非协作式支出」。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

杨小公子君莫邪 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13