比特币之隔离见证

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比特币之隔离见证相关的知识,希望对你有一定的参考价值。

1. 问题

1.1 延展性攻击

比特币的区块链如何保证一个交易有效并且不被修改:

  1. 每个交易都必须签名才能花费输入(UTXO);
  2. 所有交易的哈希以Merkle Tree计算并存储到区块头。
    我们再看每个交易的细节,假设有一个输入和一个输出,它类似:
    tx = … input#index … signature … output-script …

而整个交易的哈希可直接根据交易本身计算:
tx-hash = dhash(tx)

ECDSA签名算法基于私钥计算的签名实际上是两个整数,记作(r, s),但由于椭圆曲线的对称性,(r, -s mod N)实际上也是一个有效的签名(N是椭圆曲线的固定参数之一)。换句话说,对某个交易进行签名,总是可以计算出两个有效的签名,并且这两个有效的签名还可以互相计算出来。

黑客可以在某一笔交易发出但并未落块的时间内,对签名进行修改,使之仍是一个有效的交易。注意黑客并无法修改任何输入输出的地址和金额,仅能修改签名。但由于签名的修改,使得整个交易的哈希被改变了。如果修改后的交易先被打包,虽然原始交易会被丢弃,且并不影响交易安全,但这个延展性攻击可用于攻击交易所。

2. 定义

隔离见证通过去除签名信息(或者也被称为 “见证人” 信息)并将其存储在基本交易块(base transaction block)之外,来修复了交易扩展性的问题。凭借该措施,可以在不影响交易 ID 的情况下更改签名和脚本(scripts)。

2.1 隔离见证之前的“比特币交易的数据结构”

  • part1. 发送方和接收方的钱包地址
  • part2. 包含交易签名的“见证数据”。

2.2 隔离见证之后的“数据结构”

从原始部分中删除解锁签名(“见证”数据)并将其作为单独的结构附加到末尾。原始部分将继续保存发送方和接收方数据,而新的“见证”结构将包含脚本和签名。原始数据段将被正常计算,但“见证”段实际上将被计算为其实际大小的四分之一。

2.3 两个功能

  • 防止非故意的比特币交易延展性,允许可选的数据传输,并通过软分叉绕过某些协议限制(例如块大小限制)。

  • 隔离见证从主区块中删除了“见证数据”,因此显着减少了交易规模。因此,交易需要的空间更少,每个区块可以进行更多的交易,并大大增加了比特币网络的容量。

参考

四份有关隔离见证的比特币改善方案:

  1. 隔离见证软分叉 https://github.com/CodeShark/bips/blob/segwit/bip-codeshark-jl2012-segwit.mediawiki
  2. 隔离见证通信层 https://github.com/CodeShark/bips/blob/segwit_peer_services/bip-codeshark-segwit-peer-services.mediawiki
  3. 隔离见证交易地址 https://github.com/jl2012/bips/blob/segwit-address/bip-segwitaddress.mediawiki
  4. 隔离见证签署检查 https://github.com/jl2012/bips/blob/segwit-checksig/bip-segwit-checksig.mediawiki 5. 系统扩展常见问题解答: https://bitcoin.org/zh_CN/bitcoin-core/capacity-increases-faq
  5. 需要30秒检查的交易: https://blockchain.info/tx/bb41a757f405890fb0f5856228e23b715702d714d59bf2b1feb70d8b2b4e3e08

以上是关于比特币之隔离见证的主要内容,如果未能解决你的问题,请参考以下文章

(SegWit)隔离见证人在24小时内激活:比特币会如何变化?

比特币内存池再次爆满,每秒仅能处理4笔交易,隔离见证支持率逐渐上升

重磅BIP91锁定完成,比特币网络隔离见证部署在即

区块链鼻祖比特币之6:详解比特币的密码攻击与分布式双花攻击

区块链鼻祖比特币之3:验证消息真伪的数字签名

区块链鼻祖比特币之12:(SPV) 节点与Bloom 过滤器