差點無法維持2100萬總量:誰該為比特幣漏洞負責
震驚,是自從上週發現並修復比特幣最嚴重的漏洞以來,比特幣社群的普遍情緒。
有報道稱,這個漏洞可以被用來關閉一部分比特幣網路。還有訊息稱,這一漏洞屬於拒絕服務式漏洞,如果被人利用,攻擊者可用於攻擊節點,在最壞的情況下,它可暫時造成比特幣網路崩潰。有執行挖礦硬體並處理比特幣網路交易的礦工,甚至可能通過雙花交易的方式來利用這一漏洞。
更誇張的是,隨著事件發展,該漏洞甚至能被利用來建立更高的區塊,意味著比特幣將超過2100萬枚。一旦實現,將導致比特幣供應膨脹並貶值。
目前,由於漏洞影響廣泛,開發人員決定,將漏洞修復細節全盤保密。
然而,隨著社群成員將這個藏匿兩年之久,甚至可能導致比特幣“超發2100萬”的bug修復後,開發者開始思考:有辦法防止這樣一個嚴重的bug再次發生嗎?
這個問題在發現bug之後的幾天裡,都沒有任何正式的提議。但這並不是說這件事沒有引發人們的討論,即:比特幣是如何工作的,以及比特幣核心(bitcoin Core)類似的漏洞如何在未來被識別和解決。
這是一個至關重要的問題——如果一個惡意的參與者首先發現了這個漏洞會怎樣?如果現在程式碼中還有其他隱藏的bug怎麼辦?還會發生什麼災難性的後果?
在這一點上,subreddit(reddit子版塊)仲裁人“Theymos”敦促社群不要忘記這個問題。
他在一篇廣為流傳的帖子中,稱這個bug為“無可否認的重大失敗”,並補充道:
“如果比特幣核心所有規則和做法都保持不變,那麼類似的失敗最終將不可避免地再次發生,而我們可能不那麼幸運,會再次看到今天的結果。”
目前有一種觀點認為,在全球參與者的開放網路的推動下,比特幣核心現在擁有了史上最強大的程式碼審查流程。
現在,這個實現的開發者比以往任何時候都要多,其中測試者佔了很多;據估計,測試約佔程式碼庫的20%。
社群的失職
儘管如此,開發者仍然認為,要確保數字貨幣順利執行,還需要做更多的工作。
Theymos認為,一種方法是建立“更復雜”的測試,專門定位嚴重但很難找到bug的地方,比如上週測試的位置。“或許社群應該寄希望於派更多技術測試專家前往比特幣核心,”他接著說,並補充道:
“目前很多社群對核心開發沒有任何貢獻。”
比特幣的核心貢獻者James Hilliard也強調了這一點,他認為開發者可以提高測試的“數量”和“質量”。不過,說起來容易做起來難。比特幣的核心貢獻者Greg Maxwell在他們的帖子中也認同測試是重要的,但是測試的質量和細節更加重要。
“將更多的精力投入到測試中對我們來說是一個長期的挑戰,部分原因是測試並不比系統工程要容易。測試涉及的技能和能力並非每個人都具備。”
這種專業人才很難找。
Hilliard表示:“比特幣的發展在很大程度上受到了程式碼審查的限制,沒有多少人能夠做到。”
然而,許多人認為責任不應該只落在開發者身上。一個共同的觀點是,作為一個沒有領導者的去中心專案,讓比特幣不出錯是一個共同的責任。
“我的主要問題是,很多人指責特定的開發者。整個專案是開放的,沒有‘僅限會員’,使用者有責任稽核程式碼,就像開發者積極貢獻程式碼一樣。” 比特幣狂熱愛好者Shinobimonkey表示。
比特幣的核心維護者Wladimir van der Laan也表達了同樣的觀點,他在推特上寫道:“錯誤的程式碼被合併了。是的,我們搞砸了,但是搞砸了的“我們”範圍很寬。整個社群因為沒有徹底審查一致意見的變化而導致了漏洞。
工程師約翰·紐伯裡表示同意。儘管他沒有編寫此次程式碼漏洞,但他辯稱,作為比特幣世界的一名開發者,他也是導致這個漏洞的一員,因為他沒有仔細檢查程式碼。
他甚至說,他認為有些程式碼看起來很可笑。然而,他覺得其他人已經檢查過了。
“我沒有親自去驗證,而是相信那些比我更聰明、更聰明的人都有自己的答案。我想當然地認為是別人做了檢查。”
責任分散效應
所謂“責任分散效應”是指,如果某個個體被要求單獨完成任務,責任感就會很強,會作出積極反應;但如果要求一個群體共同完成任務,群體中的每個個體的責任感就會很弱。
會出現以上情況的原因為,前者需要獨立承擔責任,後者則期望別人多承擔點責任。用簡單的話來說就是:人多不負責,責任不落實。
比特幣程式碼由全球開發者共同維護,儘管集結了無數比特幣愛好者的結晶,但這種去中心化管理容易出現另一個局面:大家都會認為“一段看起來有問題的程式碼也許被很多比我更厲害的人檢查過了,我為什麼要再自討沒趣呢?”繼而造成一種"集體冷漠"的現象。
在著名的“安全、效率、去中心化”鐵三角中,比特幣社群該何去何從呢?
多個比特幣核心
如何避免此類漏洞再度發生,在社群中引發熱烈探討。
“比特幣以前也有漏洞,以後還會有漏洞。這就是個軟體,這根本沒什麼大驚小怪的。”Blockstream公司的COO Samson Mow在推特上說。
繼承了上述觀點,還有另一個主流看法。
今天的比特幣的主要軟體,比特幣核心,由95%的比特幣節點執行。(這是根據一項統計資料得出的——有趣的是,沒有辦法看到每個比特幣節點,因為有些節點為了隱私,不會向網路的其他節點宣佈它們的存在)
因此,這個想法是創造更多“核心”來實現比特幣軟體執行。這樣的話,如果一個實現有毀滅性的bug導致網路崩潰,那麼其他實現仍然可以執行,從而保持比特幣作為一個整體執行。
在某種程度上,這種做法已經存在。目前比特幣有一些不太有名的實現,如Bitcoin Knots和Btcd。在其它加密貨幣中,這種做法也這正在成為常態。例如,以太坊有兩個主要的實現,geth和parity,每一個都可以供任何執行該軟體的人使用。
儘管如此,許多比特幣開發者擔心,新增多個實現可能會帶來比上週的漏洞更嚴重的問題。
“許多人沒有意識到的是,讓人們執行不同的實現,使得攻擊者更容易劃分網路,”比特幣的核心貢獻者Andrew Chow在一場概述利弊的對話中表示。
當然,開發者並未就此問題達成一致。
當他說:
“我不知道怎樣才能防止這種情況再次發生,但我覺得如果社群僅因為此次漏洞沒有造成危機而不會理會,絕對是一種錯誤。”
原創宣告:本文系金牛財經原創,版權屬金牛財經所有,未經授權不得轉載。轉載或內容合作請聯絡微信號:13725514262獲取轉載格式,違者將依法追究責任。