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