比特币之隔离见证
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比特币之隔离见证相关的知识,希望对你有一定的参考价值。
1. 问题
1.1 延展性攻击
比特币的区块链如何保证一个交易有效并且不被修改:
- 每个交易都必须签名才能花费输入(UTXO);
- 所有交易的哈希以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 两个功能
-
防止非故意的比特币交易延展性,允许可选的数据传输,并通过软分叉绕过某些协议限制(例如块大小限制)。
-
隔离见证从主区块中删除了“见证数据”,因此显着减少了交易规模。因此,交易需要的空间更少,每个区块可以进行更多的交易,并大大增加了比特币网络的容量。
参考
四份有关隔离见证的比特币改善方案:
- 隔离见证软分叉 https://github.com/CodeShark/bips/blob/segwit/bip-codeshark-jl2012-segwit.mediawiki
- 隔离见证通信层 https://github.com/CodeShark/bips/blob/segwit_peer_services/bip-codeshark-segwit-peer-services.mediawiki
- 隔离见证交易地址 https://github.com/jl2012/bips/blob/segwit-address/bip-segwitaddress.mediawiki
- 隔离见证签署检查 https://github.com/jl2012/bips/blob/segwit-checksig/bip-segwit-checksig.mediawiki 5. 系统扩展常见问题解答: https://bitcoin.org/zh_CN/bitcoin-core/capacity-increases-faq
- 需要30秒检查的交易: https://blockchain.info/tx/bb41a757f405890fb0f5856228e23b715702d714d59bf2b1feb70d8b2b4e3e08
以上是关于比特币之隔离见证的主要内容,如果未能解决你的问题,请参考以下文章
(SegWit)隔离见证人在24小时内激活:比特币会如何变化?