你失去了Layer 2地址控制權?Optimism駭客事件複盤
日前,以太坊最大的測試網Ropsten 已完成合併。這意味著,以太坊主網的大合併即將到來,用戶和投資者們都摩拳擦掌,期待著區塊鏈技術的爆發式提升。而根據此前Vitalik Buterin在5月份ETH上海峰會上的演講,合併後的以太坊TPS並不會得到很大的提升,仍然需要靠Danksharding的分片解決方案以及配合Rollup技術的Layer 2解決方案,才能將以太坊的TPS提高到每秒80,000筆。Vitalik對 Rollup的肯定,可以確定Layer 2是以太坊擴容方案中很重要的一部分。
加之前段時間四大Layer 2協議中的Optimism率先空投發幣,加密市場迎來了新一輪的空投狂歡。一時之間,大量用戶開始體驗Arbitrum、zkSync 和 Starknet 等 Layer 2 專案,期待獲得下一次的空投機會。
但就在空投後的沒多久,Optimism 官方與加密貨幣做市商 Wintermute 表示,2000 萬個 OP 被駭客盜取。具體過程是,由 Optimism 基金會向 Wintermute 發送了 2000 萬枚 OP 用於做市。而 Wintermute發現,自己提供給Optimism的接收地址是 Layer 1 地址,自己無法控制對應的Layer 2地址,而攻擊者趕在Wintermute前使用不同的初始化參數將其部署,並轉走了帳戶中的OP。
這時候有些用戶開始擔心了,Layer 1 和Layer 2的錢包地址不是同一個嗎?為什麼 Optimism 給 Wintermute 轉的 2000 萬枚 OP 自己無法控制,反而被駭客提前控制了呢?
眾所周知,一般使用加密錢包體驗Layer 2的流程如下(以Optimism為例):
- 在支持Layer2的錢包中添加Optimism網路;
- 將以太坊主鏈的ETH通過Optimism Bridge充值到Optimism地址中;
- 體驗構建在Optimism的應用,也可以隨時通過Optimism Bridge將資產提取回來。
從這幾個步驟可以看出來。我們在體驗 Layer 2 時,其實不需要新註冊一個錢包,而是選擇在已有的錢包中自定義添加網路。這是因為一般情況下,我們在以太坊上使用的錢包帳戶可以在Layer 2上直接使用。那麼 Wintermute 的問題出在哪里呢?
這是因為Wintermute 為了安全,使用的是多簽錢包。我們一般使用的錢包是單簽錢包,一旦私鑰洩露或者遺忘就意味著失去了對錢包的控制權。而多簽錢包進一步保障了安全性,以2/3多簽模式為例,這個多簽地址會對應著3個私鑰,而只要有其中2個私鑰完成簽名授權就能完成加密資產的轉移,這樣既能防止“單點故障”,又能實現DAO組織或者機構客戶的資金共管。
普通的比特幣地址是由公鑰做哈希後得到的,而多重簽名地址就基於腳本哈希,所以在原生上比特幣就支持多簽。但以太坊原生是並不支持多簽地址的,大家是需要依靠智能合約來實現這一機制。所以大家會發現,比特幣多簽錢包會更常見,因為技術上更容易實現。
所以在以太坊中會存在兩種帳戶,一種是由私鑰控制的外部帳戶,也就是我們平常使用的;而另一種是由智能合約代碼控制的合約帳戶,以太坊多簽錢包的帳戶就是這種類型。
回到Wintermute的事件,以太坊開發者Kelvin Fichter在攻擊發生後進行瞭解釋:用戶通常假設他們在以太坊上訪問的任何帳戶也可以在其他基於EVM的鏈上訪問,對於外部擁有的帳戶(也就是非合約帳戶),這通常是正確的。但這不一定適用於智能合約帳戶,大家是可以使用完全不同的代碼在不同鏈上的相同地址創建合約,從而產生完全不同的所有者。所以基於創建者地址和nonce,駭客只要用不同nonce不停碰撞就可以創建出和Wintermute 的 L1 錢包地址相同的地址。
所以回顧該事件,其實就是對 L2 和多簽錢包認知不清晰的 Wintermute 因為自己的粗心大意損失這一大筆資產。幸運的是,駭客最後還是直接退回了其中1700萬枚OP,發送到 Vitalik 錢包的100 萬枚OP也已經退還給 Optimism 官方,駭客則獲得200萬枚OP作為賞金。
通過這個事件,也給了我們一些教訓。大家一定要注意自己的錢包安全,如果在新的公鏈或者L2網路上接收資金,請務必先嘗試自己是否擁有該地址的控制權,不要只是假設或者慣性思維認為我應該可以控制該地址。在使用多簽錢包時,也建議提前加深對錢包安全屬性的認知,以免造成不必要的損失。