修復(fù)交易延展性對BCH有什么意義
在BCH的最近一次升級中,有一項升級內(nèi)容屬于修復(fù)程序—在腳本中強制執(zhí)行MINIMALDATA。
根據(jù)之前的升級規(guī)范,我們也清楚的了解到,這項更改是為了消除最終的BIP 62延展性矢量,使得升級之后的比特幣現(xiàn)金網(wǎng)絡(luò)上的大多數(shù)交易(包括所有P2PKH交易)以后都是不可驗證的,可以有效保護交易的安全性。
那到底什么是交易延展性?BCH又都做了些什么修復(fù)它呢?
什么是交易延展性?
交易延展性(transacTIon malleability)源于比特幣源代碼中的一個錯誤。這個錯誤,可以在不改變交易輸出或交易內(nèi)容的情況下,更改交易ID。這個錯誤意味著,在交易被礦工寫入?yún)^(qū)塊之前,交易簽名可以被更改。
也就是說當(dāng)一筆交易被廣播出去后,在獲得確認之前,某些惡作劇的礦工可以使用別的簽名方式替換這筆交易原來的簽名方式。由于交易的TXID就是對交易內(nèi)容進行哈希計算獲得的,如果里面的簽名方式變了,TXID也會改變。
如果受到交易延展性攻擊,雖然交易的資金本身不會受到任何影響,該轉(zhuǎn)給誰還是轉(zhuǎn)給誰,但是那些依賴TXID的應(yīng)用,比如交易所就會受到嚴(yán)重損失。因為他們會記錄每筆交易的TXID,如果TXID發(fā)生變化就容易導(dǎo)致賬目混亂,這也是交易所都要求至少一個確認才入賬的原因。
2014年,有人利用這個漏洞,大規(guī)模攻擊比特幣網(wǎng)絡(luò),內(nèi)存池中充滿了假交易,造成比特幣網(wǎng)絡(luò)堵塞,導(dǎo)致部分全節(jié)點宕機,比特幣網(wǎng)絡(luò)極其不穩(wěn)定。曾經(jīng)最大的比特幣交易所——Mt.Gox宣布倒閉的部分原因,就是延展性攻擊。
BCH都做了哪些事情修復(fù)交易延展性?
BCH通過一次次的升級修復(fù)了所有常見的第三方交易延展性矢量,而Bitcoin Core 卻依舊保留了。
1、規(guī)范編碼的ECDSA簽名:自2015年7月激活BIP 66以來,禁止使用非DER編碼的ECDSA簽名。
2、scriptSig中的非推送操作:在2018年11月比特幣現(xiàn)金網(wǎng)絡(luò)升級中,簽名腳本中的非推送操作被禁止,而Bitcoin core仍然接受它們。
3、非標(biāo)準(zhǔn)大小類型的scriptSig中的推送操作:在2019年11月比特幣現(xiàn)金網(wǎng)絡(luò)升級中,禁止任何腳本中的非標(biāo)準(zhǔn)大小推操作,而Bitcoin core仍然接受它們。
4、零填充數(shù)字推送:在2019年11月比特幣現(xiàn)金網(wǎng)絡(luò)升級中,禁止處理以非標(biāo)準(zhǔn)形式編碼的數(shù)字,而Bitcoin core仍然接受這一點。
5、ECDSA簽名固有的延展性:自2017年11月比特幣現(xiàn)金網(wǎng)絡(luò)升級以來,禁止在ECDSA簽名中使用高S值,而Bitcoin core仍然接受這一點。
6、簽名失敗的延展性:自2017年11月比特幣現(xiàn)金網(wǎng)絡(luò)升級以來,禁止將除null以外的無效簽名傳遞給OP_CHECK(MULTI)SIG。Bitcoin Core仍繼續(xù)執(zhí)行腳本。
7、多余的scriptSig操作:自2018年11月比特幣現(xiàn)金網(wǎng)絡(luò)升級以來,腳本執(zhí)行必須產(chǎn)生干凈的堆棧。Bitcoin Core不需要這個。2019年5月的比特幣現(xiàn)金網(wǎng)絡(luò)升級僅針對特定的類似于SegWit的簽名腳本增加了豁免。
8、腳本忽略的輸入:自2019年11月比特幣現(xiàn)金網(wǎng)絡(luò)升級以來,不再忽略O(shè)P_CHECKMULTISIG(VERIFY)的第二個輸入。相反,由于2017年8月Bitcoin Core激活了BIP 147,所以在這個輸入上必須為空。
1、 讓交易所接受0確認充值成為了可能
鑒于交易延展性攻擊的影響,交易所為了安全性考慮,很難做到0確認充值。一旦BCH修復(fù)了延展性,那么交易所就可以考慮接受0確認充值,這也有助于提高用戶的使用體驗。
2 、使雙花驗證更有意義
為了解決雙花問題,BCH開發(fā)者曾經(jīng)研發(fā)出了double spend proof雙花檢測工具。想要使用這個工具,必須先修復(fù)延展性,否則這個工具毫無意義。
BCH有兩種雙花攻擊的方式,一種是需要大量算力配合的雙花攻擊,需要的成本非常高,不可能用來雙花小額交易。還有一種是快速雙花: 比如有某個出售數(shù)字商品的商家支持BCH付款,他接受0確認支付,只要顯示收到BCH了,就立刻自動發(fā)貨。這時候攻擊者就可以嘗試快速雙花攻擊了。他先給商家轉(zhuǎn)賬一筆BCH,這里稱之為TX1;然后同時把這筆資金轉(zhuǎn)給自己的另外一個地址,這里稱之為TX2,TX2會通過工具以更快的速度傳播到全網(wǎng)其他節(jié)點,尤其是讓礦工先收到。當(dāng)商家的系統(tǒng)顯示出TX1時,他會以為已經(jīng)到賬,于是自動發(fā)貨,但是礦工卻打包了TX2。最后TX1就會被作廢,商家產(chǎn)生了損失,攻擊成功。
雙花檢測工具就是用來專門檢測快速雙花攻擊的。這個工具會監(jiān)聽全網(wǎng)的BCH節(jié)點,如果發(fā)現(xiàn)存在雙花交易,就會發(fā)出警告,提醒收款方。收款方如果發(fā)現(xiàn)存在雙花,可以拒絕這筆交易,或者要求必須獲得一個確認。
當(dāng)在主流的錢包中添加雙花檢測工具,用戶就能直觀的看到一筆交易是否被雙花,這會極大的提升用戶對于0確認交易的信心,而且對于交易所來說,因為這個工具的存在,接受0確認充值的風(fēng)險又被極大的降低了。
目前,BCH已經(jīng)修復(fù)了所有常見的第三方交易延展性矢量,極大的解決了延展性攻擊的問題。這也為BCH未來的發(fā)展創(chuàng)造了更多的可能,而不再受制于延展性問題的限制。