比特币之隔离见证
1. 延展性攻擊問題
1.1 交易驗(yàn)證
保證一個(gè)交易有效并且不被修改:
step1. 每個(gè)交易都必須簽名才能花費(fèi)輸入(UTXO);
step2. 所有交易的哈希以Merkle Tree計(jì)算并存儲(chǔ)到區(qū)塊頭。
對(duì)于每個(gè)交易,假設(shè)有一個(gè)輸入和一個(gè)輸出,它類似:tx = … input#index … signature … output-script …
而整個(gè)交易的哈希可直接根據(jù)交易本身計(jì)算:tx-hash = dhash(tx)
1.2 延展性攻擊
ECDSA簽名算法基于私鑰計(jì)算的簽名實(shí)際上是兩個(gè)整數(shù),記作(r, s),但由于橢圓曲線的對(duì)稱性,(r, -s mod N)實(shí)際上也是一個(gè)有效的簽名(N是橢圓曲線的固定參數(shù)之一)。換句話說,對(duì)某個(gè)交易進(jìn)行簽名,總是可以計(jì)算出兩個(gè)有效的簽名,并且這兩個(gè)有效的簽名還可以互相計(jì)算出來。
黑客可以在某一筆交易發(fā)出但并未落塊的時(shí)間內(nèi),對(duì)簽名進(jìn)行修改,使之仍是一個(gè)有效的交易。注意黑客并無法修改任何輸入輸出的地址和金額,僅能修改簽名。但由于簽名的修改,使得整個(gè)交易的哈希被改變了。如果修改后的交易先被打包,雖然原始交易會(huì)被丟棄,且并不影響交易安全,但這個(gè)延展性攻擊可用于攻擊交易所。
2. 定義
隔離見證通過去除簽名信息(或者也被稱為 “見證人” 信息)并將其存儲(chǔ)在基本交易塊(base transaction block)之外,來修復(fù)了交易擴(kuò)展性的問題。憑借該措施,可以在不影響交易 ID 的情況下更改簽名和腳本(scripts)。
2.1 隔離見證之前的“比特幣交易的數(shù)據(jù)結(jié)構(gòu)”
- part1. 發(fā)送方和接收方的錢包地址
- part2. 包含交易簽名的“見證數(shù)據(jù)”。
2.2 隔離見證之后的“數(shù)據(jù)結(jié)構(gòu)”
從原始部分中刪除解鎖簽名(“見證”數(shù)據(jù))并將其作為單獨(dú)的結(jié)構(gòu)附加到末尾。原始部分將繼續(xù)保存發(fā)送方和接收方數(shù)據(jù),而新的“見證”結(jié)構(gòu)將包含腳本和簽名。原始數(shù)據(jù)段將被正常計(jì)算,但“見證”段實(shí)際上將被計(jì)算為其實(shí)際大小的四分之一。
2.3 兩個(gè)功能
-
防止非故意的比特幣交易延展性,允許可選的數(shù)據(jù)傳輸,并通過軟分叉繞過某些協(xié)議限制(例如塊大小限制)。
-
隔離見證從主區(qū)塊中刪除了“見證數(shù)據(jù)”,因此顯著減少了交易規(guī)模。因此,交易需要的空間更少,每個(gè)區(qū)塊可以進(jìn)行更多的交易,并大大增加了比特幣網(wǎng)絡(luò)的容量。
參考
四份有關(guān)隔離見證的比特幣改善方案:
總結(jié)
- 上一篇: Bech32编码 (4)地址验证示例
- 下一篇: EOS开发步骤(1) 开发说明