比特币-隔离见证(Segwit)

什么是见证

  在密码学中,隔离见证用于形容加密难题的解决方案。在比特币中,一个数字签名就是一种见证(witness),可以用来形容满足UTXO(unspent transaction output)中锁定脚本的条件。隔离见证就是把交易输入中的解锁脚本移出至另一个伴随交易的用来存放交易见证的数据结构,相应的锁定脚本也要作出修改。

为什么使用隔离见证

一、交易延展性

  将见证移除交易,交易中唯一一部分可以可以被第三方修改的数据不存在了,交易变得对任何人(交易生成者除外)不可修改,可以抵抗交易延展性攻击。同时极大的提高了许多其他依赖于高级比特币交易架构的协议的可执行性,比如支付通道、跨连交易和闪电网络。

二、脚本管理

  在引入隔离见证后,类似于交易和区块都有版本号。每一个锁定脚本前都有了脚本版本号。脚本版本号的条件允许脚本语言用一种向后兼容的方式升级,以引入新的脚本操作数、语法或语义。非破坏性升级脚本语言的能力将极大地加快比特币的创新速度。

三、网络和存储扩展

  见证数据占整笔交易很大一部分空间,移除见证数据可减小每一笔交易的大小,易于交易的存储和在网络中的传输。

四、签名验证优化

  隔离见证升级签名函数(CHECKSIG, CHECKMULTISIG, 等)减少了算法的计算复杂性。引入隔离见证前,用于生成签名的算法需要大量的哈希操作,这些操作与交易的大小成正比。在O(n2)中关于签名操作数量方面,数据哈希计算增加,在所有节点验证签名上引入了大量计算负担。引入隔离见证后,算法更改减少了O(n2)的复杂性。

五、离线签名改进

  隔离见证签名包含了在被签名的哈希散列中,每个输入所引用的值(数量)。在此之前,一个离线签名装置,比如硬件钱包,必须在签署交易前验证每一个输入的数量。这通常是通过大量的数据流来完成的,这些数据是关于以前的交易被引用作为输入的。由于该数量现在是已签名的承诺哈希散列的一部分,因此离线装置不需要以前的交易。如果数量不匹配(被一个折中的在线系统误报),则签名无效。

隔离见证输出和交易实例

对于P2PKH

Alice创建了一笔交易用来支付咖啡的费用,这笔交易的锁定脚本如下

OP_DUP OP_HASH160 <Cafe Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG

Bob想使用这笔钱需要提供如下解锁脚本

<Cafe Signature> <Cafe Public Key>

将其升级为P2WPKH(Pay-2-Witness-Public-Key-Hash),交易的锁定脚本变为

0 <Cafe Public Key Hash>

如果Bob想使用这笔前,他需要提供如下形式的解锁脚本

<Bob's witness data>

隔离见证极大的减小了锁定和解锁脚本的大小

 

posted @ 2020-12-27 15:08  countfatcode  阅读(810)  评论(0编辑  收藏  举报