從區塊鏈誕生的那一刻起,區塊鏈的安全事件就層出不窮,無論是比特幣、以太坊還是最近的 Filecoin 都在不斷地改進中,不斷地提升自身的安全性。但是,這個一個新生事物,多數都是包含著無數的缺陷誕生的,同樣受到各種追捧和持續快速地迭代。
在區塊鏈領域流行著一句話:In BlockChain We Trust。為什麼?區塊鏈執行起來,參與的人員眾多,良莠不齊,許多節點經常遭受攻擊,但是大家還是說 “In Blockchain We Trust”。也就是說,我們就是相信區塊鏈。
這一方面表明區塊鏈是顛覆性的,其本身就是一種建立信任的技術,另一方面,大家也相信,區塊鏈是一種安全的技術。這一點有些意思,因為許多人看到的是區塊鏈領域發生的安全時間,而很少思考區塊鏈所帶來的安全變革。
區塊鏈的安全問題
大家經常提到的區塊鏈安全,涉及到的方面非常多,但其實,多數都是與傳統的軟體系統的安全性有共通之處。大體說來,可以考慮以下一些方面(我對這些安全問題加一些評註,以藍色斜體表示):
程式碼安全:許多安全問題來自於程式碼漏洞,非常著名的就是 Ethereum 的 DAO 事件,直接導致以太坊分叉至兩個網路:ETH 和 ETC;Filecoin 前段事件發生的網路暫停事件,也是一個程式碼問題導致的安全事件,所幸的是,未發生資金方面的問題。(評:程式碼問題是一個通用的問題,在任何的軟體系統和網路中都存在,與是不是區塊鏈沒有直接關係。)
私鑰遺失或被盜:這是大家談論的比較多的安全問題,業界也在不停地教育和改善系統,一些對私鑰的儲存和找回的機制和方式也逐漸成熟。(評:這和一般系統中的賬號和密碼丟失類似,但中心化系統一般可以透過身份認證找回,而區塊鏈系統的去中心化特性,使得找回私鑰需要一些其他的方式。)
駭客入侵:最著名的就是直接導致門頭溝(Mt.Gox)倒閉的駭客事件了,當然幾乎所有交易所都發生了駭客入侵和丟幣的事件,這似乎也是區塊鏈領域的常見安全問題。(評:這些安全事件都發生在中心化交易所,這些安全事件與區塊鏈技術本身關係不大。反而,這些安全事件正說明去中心化的安全性更高,你什麼時候聽說過去中心化交易所的駭客事件?)
釣魚攻擊:完全與區塊鏈沒有關係,中心化系統的常規安全問題
女巫攻擊/路由攻擊:這通常發生在有些區塊鏈系統還不成熟,或者參與人比較少的情況,需要對鏈和網路有一定的控制權
51% 攻擊:老生常談了。(評:這是區塊鏈真正的安全問題。但這也正是區塊鏈的設計基礎,即網路朝著符合大多數人(或投票權)的方向走。同時這也要求一條鏈必須要有足夠的去中心化,和足夠的參與度來保障安全)
我們看一看,上面提到的安全問題,除了51% 攻擊區塊鏈特有的,而其他部分,都基本上與區塊鏈沒有直接的關係,是通用網路都會遇到的問題。而 51% 攻擊,從另一份方面來講,也體現了區塊鏈的安全性之高,要作惡的成本之高昂,在一條成熟的、參與人眾多的鏈面前,這種攻擊顯得太難而不可行。
區塊鏈對網路安全的提升
如果我們提升一個層次,真正考慮網路的安全問題,而不是拘泥於一個一個點來看。我們會發現,實際上,區塊鏈技術解決了非常多的安全問題。這也是為什麼說區塊鏈是第三代網際網路的基石的重要原因。因為第三代網際網路(Web3.0)是一個可信的網路,可信的基礎就來自於區塊鏈。
區塊鏈賦能Web3.0,透過去中心化技術建立信任,那麼沒有那麼多的安全軟體,沒有防火牆,沒有安全專家為每一個網路軟體的執行把關,行嗎?區塊鏈說,這都不需要。
開源是安全的基礎:沒有絕對的程式碼安全,但是,一條成熟的公鏈,其程式碼必然是開源的,共享的,經過很多人驗證和測試的,經過審計的。在安全的世界裡,早就有一條共識,加密要用大家都認可的開源演算法和實現,安全機制要採用標準的開源的經過驗證的機制,而不是私有的、未公開的。區塊鏈作為一個去中心化的系統,其執行機制和經濟激勵都以開源為基礎,當持續執行下去,其安全和信任度會越來越高。如今的比特幣網路就是一個最好的例證。
開放和去中心化使攻擊無處借力:第二代網際網路的基礎設施被網路寡頭把控,儘管這些寡頭投入重金來保障安全,但是安全事件常年不斷,Gmail停服,Twitter故障,微博罷工,信用卡賬號被盜等等。但是,一條區塊鏈網路執行起來,除非程式碼問題(前面提到,非常少而且會快速成熟),絕不會停工,長久服務,這就是技術和架構本身帶來的安全性。
密碼學技術保障運算和儲存安全:駭客入侵是傳統軟體和系統非常頭疼的問題,但是,你聽說過有駭客入侵一條區塊鏈嗎?有駭客能夠為一個上線的智慧合約植入木馬嗎?區塊鏈的驗證技術使得這些安全攻擊不可行,Bitcoin的一個交易一旦發生,Ethereum的一個合約一旦上鍊就不可篡改。Filecoin 的一份內容上線後任何時候檢索出來都保證沒有任何偏差。這些技術,是區塊鏈的基礎,也是天然地保證交易、計算和儲存的安全。
激勵機制導致攻擊成本高昂:區塊鏈世界歡迎任何形式的運算,因為本身區塊鏈世界就是開放的,你可以上傳自己的應用,有人用就好。按照傳統的觀點,這不是為病毒氾濫大開方便之門?不然,因為區塊鏈的經濟激勵機制使得病毒傳播和執行並不可行,因為每一個運算、每一份儲存都有定價,區塊鏈世界沒有免費的午餐。要傳播、要執行,那就付費。這從根本上解決了無阻礙傳播和攻擊的問題。
模組重用提升安全:一條公鏈很重要的特性就是智慧合約之間的相互呼叫,也就是說,你可以把一條鏈看成一臺計算機,而不是像Web2.0世界中網路是聯通的,但實際上各種應用之間是割裂了。相似的程式實現相似的功能,但程式碼各不相同,帶來無數的安全問題。而在區塊鏈世界中,已經經過驗證的合約和介面直接使用,使得應用的建立變得更簡單也更安全。試想,一個傳統的借貸系統需要多麼複雜,會有多少的安全問題,然而,在區塊鏈世界,借用已經誕生的應用和模組,你可以利用數百行程式碼,構建複雜的應用,程式碼量減少幾個數量級,安全問題也就更容易處理。
透明性和可追蹤性提升安全:也就是我們常說的 Availability/Transparency 和 Tracibility。如果一個應用的所有事物都被記錄,並能夠追蹤,其安全性就更容易把握。而這恰恰是區塊鏈的重要特性之一。
安全的另一個維度
In BlockChain We Trust
業界有無數的安全公司,從不同的角度來處理安全問題,提出了無數的安全方案和設想。但如果我們要真的安全,必然做顛覆式的思考。提升一個維度來看問題。
從另一個角度來看問題,你會發現,新的正規化下,以前你看見的問題都不再是問題了,自然地被解決了。一些新的問題還會出現,但是角度完全不同了。
傳統的安全更注重個體,如何保障個體的安全從而保證網路的安全,它基於的基礎是,網路是由個體組成的,沒有個體就沒有網路;而對於區塊鏈而言,網路是基礎,運算、儲存、網路連結等等不再依賴於哪一個個體,網路就是網路,每一個個體網路構建的細胞,它基於的基礎是:網路是一個整體,個體依賴網路而存在。每一個個體都可以隨意進入或退出網路,個體構成的整體更重要,這就如我們身體的細胞,每天在更新,但人還是那個人,我們的記憶,發展都是延續的。
有了這個理解,安全就是一個整體的設計。區塊鏈中密碼學技術的廣泛應用,所有事務和交易的強制驗證,程式碼開源和共享,激勵機制的採用都在更上一個維度來建立一個更安全和更可信任的網路。