區塊鏈安全思考

FLy_鵬程萬里發表於2018-07-09

本文對區塊鏈技術的安全問題和麵臨的一些挑戰進行了分析,並提出一些安全建議。

區塊鏈(Blockchain)是比特幣的一個重要概念,它本質上是一個去中心化的資料庫,同時作為比特幣的底層技術。區塊鏈是一串使用密碼學方法相關聯產生的資料塊,每一個資料塊中包含了一次比特幣網路交易的資訊,用於驗證其資訊的有效性(防偽)和生成下一個區塊。

可以運用區塊鏈的一些領域包括智慧合約、證券交易、電子商務、物聯網、社交通訊、檔案儲存、存在性證明、身份驗證、股權眾籌。

那麼區塊鏈安全嗎?本文講述對區塊鏈安全的一些考慮。

區塊鏈相關的安全事件

因為區塊鏈技術和安全生態的成熟度不夠,導致了許多安全相關事件的產生。下面是一些安全事件,這些安全事件主要是會導致財產損失。

安全事件分類

區塊鏈相關的安全事件被分為三類,分別是OPSEC、智慧合約、共識協議。
OPSEC:是指入侵組織和個人控制的資訊來訪問商業資產;
智慧合約(Smart Contracts):是指由於不適當地運用和執行智慧合約導致的事件;
共識協議(Consensus Protocol Incentives):是指惡意利用共識協議導致的事件。

安全事件分析

根據對2011到2018年期間相關事件的分析,估計有35.5百億美元的資產被竊。
OPSEC(Open Platform for Security),攻擊者利用平臺安全漏洞可以竊取大量資產。如2018年5月,360公司Vulcan(伏爾甘)團隊發現了區塊鏈平臺EOS的一系列高危安全漏洞。經驗證,其中部分漏洞可以在EOS節點上遠端執行任意程式碼,即可以通過遠端攻擊,直接控制和接管EOS上執行的所有節點。預防此類漏洞,需要標準的安全解決方案。
智慧合約。這類事件佔總安全事件的22%左右。當智慧合約不像期望的那樣工作時,智慧合約安全事件就發生了。但可以利用區塊鏈的透明性來審計所有公佈的智慧合約。
共識協議。這類事件佔總安全事件的12%左右。與智慧合約攻擊相比,共識協議攻擊更難被發現,因為主要效應是不合適的節點共識或區塊挖礦,對礦工來說很難緩解或檢測這類攻擊。

智慧合約安全

智慧合約是一套以數字形式定義的承諾,承諾控制著數字資產幷包含了合約參與者約定的權利和義務,由計算機系統自動執行。智慧合約的實現是基於區塊鏈平臺的,而區塊鏈平臺是基於分散式的共識協議的。
目前,像Ethereum這樣主流的智慧合約平臺,都遵循複製執行的模式。在該模型中,智慧合約的程式碼、對智慧合約方法的呼叫,都不可逆的加入區塊鏈中。每個參與區塊鏈協議的節點都可以看到程式碼並從區塊鏈中呼叫、例項化、執行系統的呼叫,得到相同的結果,維護相同的狀態。

從安全的角度考慮:
首先,智慧合約的開發生命週期與傳統軟體開發生命週期不同,尤其是測試、整合和維護是可重複的。因為智慧合約的程式碼加入區塊鏈以後就不能修改了,所以開發者如果想修改,就需要把程式碼繫結到變數中。因此,智慧合約的開發生命週期就與標準軟體不同。

其次,節點上的錯誤或使用智慧合約中發現的錯誤是不可逆的,而且成本很高。事實上,黑客會經常尋找應用的智慧合約中的漏洞,並報告給漏洞懸賞計劃(專案)。而且這類攻擊很難預防,因為應用的程式碼不能回顧去打補丁。當檢測到漏洞後,必須應用新的智慧合約來修復它。雖然這對開發者來說很難,但對社群來說,這或許是一種積極的方式。比如,開發者在修復已經應用的智慧合約時,這樣的修復可能會帶來一些附帶的損害,因為其他的智慧合約可能是依賴修改的合約。而且開發者認為是漏洞的智慧合約可能對依賴智慧合約的開發者來說只是一個特性。從這個意義上說,智慧合約與立法相似(Code is Law),因此,程式碼應該保持穩定,在應用前也應該仔細檢查。

驗證和測試

驗證和測試對智慧合約的開發來說是非常重要的,應當繼承到分析和設計的過程中。
安全測試的目的就是確定程式中是否存在攻擊者可利用的漏洞。智慧合約也是一種程式,所以可能含有漏洞。智慧合約一般比較短,但是同時存在的和永久的,所以與普通程式相比,更難變得正確。
智慧合約漏洞除了含有一些通用(經典)漏洞外,還含有一些特定漏洞。因此,智慧合約應該也有安全分析和測試的漏洞。

安全智慧合約分發

因為智慧合約平臺大多都與加密貨幣相關聯,因此也是詐騙的傳播媒介。在傳統軟體分發時,有許多的模型來處理這些問題。比如,許多的開源專案背後都有社群對漏洞進行修復,提高工程(專案)的質量。而中心化的軟體一般都有公司在背後運營。

相比之下,智慧合約的分佈不遵循以上的模式。開發者提交了智慧合約後,智慧合約就會被礦工加入區塊鏈中。智慧合約平臺的不可逆性和共識抵抗性不允許任何人移除加入到智慧合約,所以提出這樣的安全架構是非常複雜的。

當前智慧合約平臺的礦工的激勵具有衝突性:

  • 礦工願意增加每個提交的智慧合約到區塊鏈上,因為可以得到獎勵;
  • 礦工也需要確保生態的安全性,否則平臺的熱度過低也會影響得到的獎勵。
    所以一個安全的智慧合約釋出架構需要增加所有提交的智慧合約到區塊鏈上,同時要測試平臺的安全性。
    #加密經濟協議和PRESTO框架
    不同的區塊鏈平臺融合了不同的思想,並探索不同的交易模式。PRESTO框架的基礎是永續性(Persistence)、魯棒性(Robustness)、效率(Efficiency)、穩定性(STability)和最優性(Optimality)。下面我們詳細描述一下這幾個性質:
  • 最優性是協議需要滿足的最基本的性質,可以通過最基本的計算和高階的優化理論等數學分析技術進行確認。在區塊鏈協議中,最優性的例子包括標準網路/代理情況下的安全性和活躍度證明。
  • 穩定性是參與者以最大興趣來遵守協議的規則。在具體的例子中是指區塊鏈協議是納什均衡(Nash equilibrium)的,均衡是所有決策參與者的觀點的最優結果。
  • 效率。協議是否有效利用計算資源?是否儘可能快、儘可能少、儘可能隨機、儘可能少使用資源、並行地執行核心任務?這些效率的限制會讓設計者去考慮交易關於速度和最優的一個均衡。在區塊鏈中,比特幣協議使用的計算資源是不夠高效的,因為隨著雜湊速度和能源消耗的增加,最大交易量卻與5年前相同。
  • 魯棒性。假設理論上協議書接近最優的效率均衡的,但實際的分散式系統會產生更多的挑戰,比如通訊時延、非同步等等。
  • 永續性。如果協議收到某種特定攻擊或遇到黑天鵝事件,系統能及時恢復嗎?如果可以,那麼恢復的速度和成本分別是多少?對永續性來說,應該考慮理論極限,應當假設系統會持續受到攻擊,那麼設計時就應當考慮如何恢復,並提供恢復時的特性。

PRESTO框架的應用方式:
首先,最優性需要協議能夠解決預先定義的問題;
第二,效率需要資源被儘可能高效地使用;
第三,穩定性分析要確保自程式碼能夠遵循和應用協議;
第四,在這個過程中還要考慮平衡的魯棒性;
第五,永續性會超越平衡的思考,詢問哪些特徵不能在平衡中保證。

相關文章