search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

以太坊錢包爆漏洞,比特幣卻從無類似問題

北京時間2017年7月20日凌晨,以太坊錢包Parity爆出極其嚴重的漏洞,導致15萬個以太幣(價值約3200萬美元)被盜。

該漏洞是由Parity錢包的多重簽名智能合約代碼造成的,其他錢包尚未發現該漏洞。黑客反覆調用了Parity錢包的enhanced-wallet.sol文件中的initMultiowned和initDayLimit兩個智能合約,這兩個初始化代碼按理說只允許調用一次,但代碼實現時未做限制,導致了資金被非法轉移。

截至筆者發稿時,Parity官方正在處理這個漏洞,但還未正式修復,所以建議所有使用多重簽名協議的客戶將全部資金轉出,待漏洞修復后再轉回來。

Parity錢包被盜對以太幣影響幾何?

Parity是目前以太坊使用最廣泛的錢包之一,這次被盜事件與2016年6月份發生的the DAO事件相類似。The DAO事件也是由於智能合約代碼的漏洞導致350萬個以太幣(當時價值5000萬美元,如果以目前價格計算則為7億多美元)被盜。

The DAO事件發生后,以太坊創始人Vitalik Buterin提議修改以太坊代碼,對以太坊區塊鏈實施硬分叉,將黑客盜取資金的交易記錄回滾,得到了社區大部分礦工的支持,但也遭到了少數人的強烈反對。最終堅持不同意回滾的少數礦工們將他們挖出的區塊鏈命名為Ethereum Classic(以太坊經典,簡稱ETC),導致了以太坊社區的分裂。

但本次Parity事件發生后,Vitalik Buterin迅速表示,因被盜取資金並非巨量,不考慮像上次那樣實施硬分叉回滾交易。因而,以太幣的價格在事件發生后並未大幅下跌,目前以太坊ETH的價格為213美元,以太坊經典ETC的價格為15美元。

什麼是智能合約?

以太坊誕生於2014年,是繼比特幣之後又一個成功的區塊鏈項目,目前市值約200億美元,僅次於比特幣(約400億美元)。

以太坊在比特幣的基礎上發展了區塊鏈技術,維護了一個全球共享的計算平台,實現了圖靈完備的虛擬機EVM,試圖通過圖靈完備的智能合約實現靈活、安全、全功能的計算。

而比特幣的設計初衷是一個電子現金系統,其內置的腳本語言是專為資金轉賬交易而設計的,為了確保安全性故意放棄了圖靈完備性(沒有跳轉、循環指令),因而僅僅是一個全球共享賬本而非計算平台。

以太坊實現了一個內置了多種編程語言的區塊鏈協議,這些編程語言都是圖靈完備的,可以支持條件分支、循環、跳轉、函數調用等複雜的運算邏輯,理論上可以在以太坊區塊鏈上運行任意的應用。

具體來說,作為在以太坊區塊鏈上運行的某個應用,可以由程序員根據業務需要,用以太坊支持的編程語言自行設計編寫代碼,而不用為了一個應用去運行一個單獨的區塊鏈。基於以太坊區塊鏈協議,使得應用開發者們可以高效快速地開發各式各樣的應用程序。這樣的程序被稱為智能合約,智能合約代碼發布到區塊鏈上之後,能夠無需中介的參與在以太坊區塊鏈上自動執行,沒有人可以阻止它的運行。

目前在以太坊上運行的智能合約已有數百種之多,Parity和the DAO都是其中之一。

受到以太坊的啟發,近年來出現了許多類似的項目,如Fabric、QTUM等,從不同的角度和層面對以太坊進行局部優化,但總體思路都是差不多的,核心都是圖靈完備的智能合約。

如何防範智能合約漏洞的產生?

值得注意的是,此次Parity事件的損失雖然比the DAO事件小一些,但問題的根源是同樣的。

隨著智能合約開始獲得越來越多的使用,智能合約的流程和代碼也變得越來越複雜,人們也發現,就像現實世界的合同一樣,如果沒有認真審核的話,在設計和編碼過程中難以避免人工失誤的產生,一旦被黑客找到漏洞,損失往往是巨大的。

但需要強調的是,這種漏洞不是以太坊區塊鏈本身的漏洞,人們不應對以太坊和區塊鏈的安全性產生不必要的懷疑。此次事件也不會對區塊鏈的應用帶來嚴重的負面影響,類似的事件將來還會發生,這並不意味著區塊鏈技術的末日。

當然,區塊鏈從業人員應吸取教訓,以儘可能減少類似的安全事故。在筆者看來,在區塊鏈和智能合約的設計與編碼實踐中,需做到以下幾點:

1、簡化區塊鏈腳本語言設計,犧牲一部分圖靈完備性換取安全性。

比特幣由於其設計上的非圖靈完備性,加上中本聰大幅刪減了許多腳本指令,所以其安全性是極高的,從2009年誕生至今8年多的時間裡,平安經歷了無數次的黑客攻擊,從未因比特幣區塊鏈和腳本本身的原因出現過資金損失。

然而,功能上的豐富性和安全性是一對永恆的矛盾,不可能兼顧,因此在設計區塊鏈腳本語言時,盡量不要為了功能而使用通用的編程語言,要在語言的功能上有所取捨,採用最小可用指令集,同時在智能合約虛擬機的設計上要採用沙盒等隔離手段,並嚴格限制CALL指令的使用方式。

2、嚴格執行智能合約代碼審查。

和現實中的合同文本一樣,智能合約代碼也要經過多層次的嚴格的代碼審查,包括業務流程/邏輯審查、代碼走查、詳盡的測試流程、安全性檢測、專家評審等。對邏輯複雜且涉及較大資金的智能合約,要儘可能通過代碼形式化驗證,通過數學證明的方式驗證智能合約的確定性。

3、強化對智能合約程序員的培訓。

雖然智能合約編程語言表面上看與傳統的編程語言極其相似,但其屬於一個全新的編程範式,思維方式也與傳統的面向過程、面向對象、面向函數的編程範式有很大差異,需要將公平交易、誠信和其他主觀概念加入智能合約的設計和編碼中。為此,要加強智能合約程序員的培訓工作,在實踐中提煉出智能合約編程和設計模式,尤其是安全方面的模式,減少程序員出現差錯的可能。

4、在應用實踐中要謹慎漸行。在實際應用區塊鏈智能合約時,應採用分步推進的策略,從簡單到複雜,從小範圍試點到全面推廣,涉及的資金量也應從少到多,不貿然涉及大量的資金。如此,即便在前期出現漏洞被攻擊,也不會損失過於巨大。



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦