注意防範重放攻擊!PoC2+硬分叉升級的風險提示

買賣虛擬貨幣
什麼是重放攻擊?重放攻擊(Replay Attack)是計算機網路中常見而古老的攻擊手段。在區塊鏈中,重放攻擊特指在硬分叉中,攻擊者將一條鏈上的交易拿到另一條鏈上“重放(Replay,即重新播放之意)”,從而獲取不正當利益的攻擊手段。這畢竟是一個技術概念,小白可能不容易理解,為了解釋清楚,我們乾脆用一個真實案例來說明重放攻擊具體是如何實施的。這個真實案例出自大名鼎鼎的以太坊The DAO分叉事件。The DAO是以太坊上發起的一個眾籌專案,它執行在智慧合約上。由於智慧合約存在某種漏洞,駭客轉走了合約內管理的價值數千萬美元的以太幣。為了挽回損失,以Vitalik為首的大部分社羣意見支援分叉以實現交易回滾(使得駭客的攻擊無效化),於是透過硬分叉形式發起了一條新鏈。然而另一部分社羣意見則認為不應該回滾,仍舊維護原有的區塊鏈。這導致以太坊分裂成新鏈(Ethereum, ETH)和原鏈(Ethereum Classic, ETC)兩條不同的區塊鏈。那麼重放攻擊又是怎樣實施的呢?我們假設小明在分叉前持有500個ETH。分叉以後,小明的地址(暫且稱為A地址)下就同時持有500個ETH和500個ETC,因為這個A地址在兩條鏈上都是存在的。由於小明是堅定的分叉支持者,因此小明只看好ETH未來的發展,覺得ETC肯定要歸零。此時小剛找到小明,提議以低價購買小明手中的ETC。小明便將手中的500個ETC全部轉賬到了小剛的地址(暫且稱為B地址)。前面聽起來沒什麼不對勁吧,然而小明沒有想到的是,小剛反手就把這筆ETC的轉賬交易發到了ETH的網路上。由於ETH、ETC是分叉的產物,因此兩者交易結構、密碼學體系都是一致的,ETC鏈上的交易在ETH鏈上也一樣可被識別,因此這筆交易就會被驗證上鍊,最終的結果是ETH鏈上的A地址也轉出了500個ETH到B地址去。小剛假意低價收購ETC,卻成功騙取了小明所有的ETH,小明自然是虧大發了!如何防範重放攻擊?
我們可以看到,小剛問小明收購ETC這個行為,本身沒有問題;小明將手中的ETC轉賬給小剛這個行為,也沒有任何問題。真正出問題的地方在於,由於ETH和ETC兩條鏈使用了完全一致的交易結構和密碼學體系,導致在ETC上有效的交易在ETH上也同樣有效。這就給了攻擊者可乘之機。攻擊者可以將ETC上的一筆有效的交易“重放”到ETH的鏈上,仍可形成一筆有效的交易,然而這筆被重放的交易並不是交易者本人的真實意願,因此容易被攻擊者利用而造成資產損失。大家可能會有一個疑問:那豈不是在分叉後的鏈之間,比如ETH和ETC之間、BTC和BCH之間,做的所有交易都是有可能被“重放”的?事實上,重放攻擊的實施是需要一系列嚴苛條件的。只有在剛分叉完畢的一段時間內,兩條鏈才能夠保持共享幾乎相同的鏈上資料的狀態(因為在分叉高度之前的歷史資料都是完全相同的),最容易發生重放攻擊;一旦執行一段時間,兩條鏈上分別有了新的資料輸入,將一條鏈的交易重放到另一條鏈的可行性就大大減弱了。從防範重放攻擊的角度,我們可以總結一些規律。首先,大家要意識到,重放交易本身不是一種Bug,並不能直接竊取您的資產,重放攻擊一定是配合或結合其他惡意行為進行的。就好像我們剛才提到的小明賣ETC案例中,一定是有小剛這樣的角色實施了“假意低價收購ETC、實則圖謀ETH”的欺詐行為。如果您在分叉之後的一段時間內保持警惕,時刻意識到您在新鏈上的交易有可能被重放到原鏈(或相反),就可以杜絕絕大多數與之相關的欺詐行為。我們介紹兩種具體的防範手段。
第一種是在分叉後購買極少量“新鮮的幣”到您的地址內。所謂“新鮮的幣”是指那些在分叉高度以後挖礦產出的幣,這些幣在另一條鏈上並不存在,因而當交易的input引用到它們時,這筆交易就不可能被另一條鏈所驗證。第二種是在分叉後將您所有地址內的幣歸結到一個新生成的地址。這也就是所謂的“騰籠換鳥”,可以減少攻擊者在另一條鏈重放交易的可行性。如果您按順序結合使用兩種方法,基本可以免除遭受重放攻擊的可能性。Lava團隊關於分叉期間的風險提示和相關建議首先,我們特別提醒,本次PoC2+升級使用硬分叉方式,有可能形成兩條鏈,即一條升級協議後的“新鏈”、一條仍執行舊協議的“原鏈”。這是區塊鏈的特性所致,只要原有的協議有算力維護,那麼原鏈也可以保留下來(反之無人維護則逐漸消亡)。Lava技術團隊宣告,升級完成後我們不會對執行舊協議的原鏈進行任何維護和開發工作。

因此,我們首先建議社羣使用者務必在分叉前更新您手中的所有全節點或錢包軟體版本。您可以前往官網(https://www.lavatech.org/zh/)下載最新版本的軟體,並在升級指南頁面(https://www.lavatech.org/zh/poc2Upgrade)檢查您的軟體版本是否為最新。如果您沒有及時更新,仍在使用舊版本的錢包,可能會造成混淆和誤操作。

其次,我們建議您在沒有把握的情況下,分叉後短期內謹慎與第三方進行轉賬活動。分叉後可能有人提出收購您在原鏈(或新鏈)的LV資產,您需要特別意識到交易存在被重放的風險。

Lava技術團隊可能計劃在分叉完成後,向所有持有LV餘額較大的地址轉賬少量金額的“新鮮LV”,以減少攻擊者實施重放攻擊的可行性。我們建議所有持有大額LV資產的使用者,在接收“新鮮LV”轉賬後,將持有的LV歸集到一個新的地址。(具體方法是在您的錢包內,將所有LV餘額都透過發起一筆轉賬交易,轉移到您錢包下的另一個新地址中。請參考下列教程。所有方案都為建議方案,您可以自行操作。)

教學:如何做歸集交易

歸集交易(或稱為規整交易)就是將您錢包內分散在各個地址下的資金統一傳送到一個地址下的交易。該地址應當是一個由您的錢包控制的、最好是沒有使用過的地址。在分叉後進行一次資金歸集,能夠減小被重放攻擊的可能性。

(1)如果您使用帶有介面的錢包,例如輕錢包、GUI錢包:

此處以GUI錢包為例,其他帶有介面的錢包的操作方法類似。

在“接收”介面點選“請求付款”,錢包會自動展示一個收款地址,如下圖所示。

複製該地址,前往“傳送”介面,將錢包內所有資金髮送至該地址即可。

您可以預先瀏覽您的錢包餘額並填寫需要傳送的資金數額,或者在傳送交易時直接勾選“傳送全部餘額”(或在填寫金額時選擇“Max”選項,因錢包而異)以保證所有餘額都得到歸集。

(2)如果您使用全節點錢包(命令列模式):

·使用getbalance檢視錢包內的總餘額;
·使用getnewaddress生成一個新地址;
·使用sendtoaddress將錢包內的所有餘額轉賬到新地址內。

注意:要考慮留出交易手續費,因此可以在轉賬之前先設定settxfee 0.001,然後將剩餘餘額透過sendtoaddress轉入歸集地址。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;