一文淺析區塊鏈分叉帶來的安全挑戰
慢雾科技
2022-09-20 12:20
本文约2782字,阅读全文需要约11分钟
雖然給社區用戶帶來混亂,但分叉也促進了系統向前發展以更好地服務社會。

原文作者: Johan

原文作者: Johan區塊鏈分叉分為軟分叉和硬分叉。本文主要探討的是硬分叉,一種不支持向後兼容的軟件升級方式。

一級標題

一級標題



一級標題

網絡層

由於分叉鍊是獨立於原網絡的區塊鏈,首先需要在網絡層(P2P)進行隔離:

1、種子節點

種子節點,也稱bootnode 或者seednode,是區塊鏈啟動時網絡首先會嘗試進行連接的節點。分叉鏈在啟動時首先連接種子節點列表裡的節點,從而進一步發現網絡中其它的對等節點,然後才能進一步同步區塊,達成共識。因而必須要修改種子節點列表,防止連接到原網絡的節點。

2、異形攻擊即使種子節點列表改變了,但並不代表分叉網絡不會連接到原網絡,因為雙方的P2P 協議是相同的,如果有一個節點無意中添加了另外一個網絡的節點連接,那麼兩個節點將成功握手,並將對方添加到節點地址池。不僅如此,雙方節點還會將自己節點裡的地址分享給對方,進而造成雙邊網絡節點池互相污染。關於這個問題,慢霧此前曾單獨披露過

一級標題

一級標題

一級標題

共識層

1、交易隔離

通常與區塊鏈交互時,我們需要用自己的私鑰簽署一筆交易,隨後這筆交易被廣播到網絡,並被礦工或者出塊節點打包到區塊中。但如果區塊鏈出現分叉,這筆交易可能會被兩個網絡分別打包到不同的區塊當中,假設這是一筆原鏈上的轉賬,那麼分叉鏈上也會有相同的一筆轉賬,顯然這是一個非預期行為,會造成資產損失。

這時就需要對交易進行重放保護,在早期以太坊的版本中沒有做這樣的保護,後來EIP155 之後在交易結構中加入了ChainID,確保用戶簽署的交易只用於當前網絡。如果對以太坊進行分叉,那麼也需要對ChainID 進行重新定義,當然這並不是只修改配置裡的ChainID 這麼簡單,因為分叉鏈需要對舊的區塊做兼容,所以需要在分叉高度之後使用新的ChainID,才能保證分叉鏈正常運行。

比特幣的交易結構中不存在ChainID,那麼它是如何做重放保護的呢?比特幣使用了一種叫做UTXO 的模型,簡單說它是對一筆交易(UTXO)進行花費,而不是對賬號進行花費,通常全新啟動的網絡不會存在相同的兩筆交易,也就不存在重放的場景。

但是在硬分叉的情況下,還是會存在交易重放的問題,例如2017 年的BCH 分叉以及後來的BSV分叉。 BCH 通過在交易數據簽名添加SIGHASH_FORKID(0x40),使得BCH 上的交易和BTC 的交易不再互相兼容,從而達到重放保護的目的。

2、算力調整

在分叉前,原鏈佔有全網所有的算力,那麼依據PoW 共識算法,它的出塊計算難度也是比較高的。分叉後,算力分散到不同的區塊鏈上,那麼分叉鏈由於共識不足通常無法獲得足夠的算力去生產新的區塊,區塊的增長會陷入停滯。這時有必要降低分叉後的初始計算難度,給分叉鏈贏得一個快速調整算力的時間窗口。

3、防範51% 攻擊

一級標題

一級標題

一級標題

應用層

我們把建立在交易上的應用,如基於虛擬機的智能合約,統歸為應用層。區塊鏈在分叉時,也會對運行在區塊鏈上的應用產生巨大影響。

1、簽名重放

簽名重放與上文提到的交易重放是相同道理的,有一些合約,例如Gnosis Safe,它會在合約裡驗證用戶的簽名,如果簽名里沒有包含ChainID,那麼這個簽名非常可能可以在兩個鏈上重放,導致資產損失。

2、預言機失效

分叉後的區塊鏈多數智能合約依舊可以正常運行,例如Token 合約、AMM 合約,這些自運行系統不依賴於鏈下數據就可以穩定運行,但類似MakerDAO 等借貸系統,高度依賴預言機的價格數據,在失去鏈下餵價支持後,它將無法繼續運行下去。

一級標題

總結

總結

總結

至此,我們從網絡層、共識層和應用層對區塊鏈分叉的安全性進行了分析,可以看到其中存在的技術風險,對於分叉我們需要十分審慎地對待。並且,不少分叉的背後不僅僅是技術變革的需要,有的可能存在商業上的直接利益,例如發起方在分叉中直接獲取大量的分叉幣,這些都需要用戶準確認識,避免不必要的損失。

慢雾科技
作者文库