技術直擊BCH硬分叉:採用“錢包分離法”杜絕重放攻擊風險
北京時間10月16日,自02:16塊高度556767起,以位元大陸和螞蟻礦池為首的BCH ABC 陣營(代表人物吳忌寒)和以 CoinGeek 及 nChain 為首的 BCH SV陣營(代表人物 Craig Steve Wright,即澳本聰)正式宣告分家,分叉為 BCH ABC 和 BCH SV 兩條獨立的公鏈。
這場被業界廣泛關注的 BCH 分叉算力之戰,並沒有出現一開始假想的51%算力攻擊,雙方在算力、出塊速度上你追我趕,各自獨立執行,暫時 ABC 鏈保持領先,SV 緊追其後。表面上看似波瀾不驚,實則卻暗流湧動。 由於 BCH 分叉為 ABC 和 SV 後,兩條新分叉後的支鏈,地址、私鑰、簽名規則、交易格式都相同,因此存在被重放攻擊的風險。
何為重放攻擊,簡而言之是指, A 在 ABC 公鏈上向 B 發出了一個交易請求(把ABC 轉給 B ),B 可以在 SV 鏈上重放 A 發出的請求(索取與 ABC 等量的SV),結果是,A 只向 B 發出了一次交易請求(轉出 ABC ),B 卻可以同時獲得屬於 A 的兩份資產(ABC+SV),這樣以來,B(攻擊者)就非法侵佔了A原本預期轉賬之外的額外資產,造成A在數字資產上的損失。
在此前區塊鏈歷史上的多次硬分叉,都存在因缺乏重放保護功能而出現的重放攻擊事件,此次 BCH 硬分叉後,外網也已經報道出現了重放攻擊個例。
據我們態勢感知平臺數據顯示:11月16日,即 BCH 硬分叉後的當天,BCH ABC 和 BCH SV 兩條鏈上存在341,068筆重放交易;11月18日,在受到不明巨量粉塵攻擊的影響下,BCH ABC 和 BCH SV 兩條鏈上的重放交易數高達1,409,055次,達到了百萬級。圖一為 BCH ABC 和 SV 鏈上硬分叉後,每小時被重放的交易次數。
然而,在如此巨量重放交易存在的情況下,ABC 和 SV 公鏈並沒有出臺全鏈層面的重放保護功能,來保障使用者資產不受重放攻擊的威脅。且各大交易所開始逐漸恢復 BCH 交易和存取幣,而任何交易行為都存在潛在被重放攻擊的可能。
當務之急,在重放保護功能出臺前,交易所和一般使用者該如何保障自身的數字資產不受侵害呢?
圖一:BCH ABC 和 SV 鏈上硬分叉後每小時被重放的交易次數)
PeckShield 安全人員經過周密分析並實測認為:可採用“錢包分離法”來解除風險,也就是使用者應該將 ABC 和 SV 資產分離到不同錢包地址,具體操作有以下三種: 1. 無摻加地址分離: 在 ABC 和 SV 鏈上分別生成一個不同的地址,然後把原BCH 地址中 ABC 和 SV 幣分別轉到這兩個地址中。這兩個交易確認成功後,新地址中的數字資產就不會再遭受重放攻擊。據瞭解,有些 SV 節點在把 SV 的交易重放到 ABC 鏈上,所以我們建議先發起 ABC 鏈的交易,確認後再發起SV鏈交易。 2. 摻加 Input 疫苗: 在發起一個 ABC/SV 交易時,在 input 中加入一個只存在於ABC/SV 鏈的小額 UTXO,使得這個交易在另一個鏈上是非法交易,無法重放。這個小額的 UTXO 可以由第三方服務商生成轉發給使用者,也可以自己產生。 3. 摻加特殊 OP Code: ABC 鏈和 SV 鏈都有獨有的 OP code,所以可以把它們加入交易中,達到 類似於第二種方法的效果。在 ABC 鏈的交易中可以加入 OP_CHECKDATASIG,SV 鏈可以加 OP_MUL。
PeckShield 認為只要徹底做到錢包分離,且分離過程不受干擾,就可以確保資產不再受重放攻擊困擾。當然,為了強化各個處理方法的高效、牢靠,可以組合疊加使用。PeckShield 建議一般 BCH 持有者可以採用簡單容易操作的第二種方法。對於交易所而言,因存在更大規模的交易量和複雜地址,可以疊加使用第一種+第二種或第一種+第三種方法來確保安全。PeckShield 也已和各大交易所建立聯絡,並嘗試用各類有效方法,幫助使用者解除存在的重放攻擊風險。