自從上週發現並修復了比特幣最嚴重的漏洞之一以來,社區的情緒用“震驚”這個詞來形容是最恰當不過了。
這一潛藏了兩年的漏洞可能被利用來產出比硬編碼2100萬枚更多的比特幣,隨著這些比特幣浮出水面,社區對此大加討論,而開發人員也正絞盡腦汁:有沒有什麼辦法防止類似嚴重的漏洞再次被添加到代碼中去?
漏洞發現後幾天,社區尚未提出任何正式的解決方案。但它引發了大量有關比特幣的討論:它如何工作?當加密貨幣貨幣中最流行的軟件客戶端(software implementation)比特幣核心錢包(bitcoin Core)再次出現類似的漏洞時,如何才能識別出來並獲得解決?
重要的問題還包括:如果一個惡意的參與者首先發現了這個漏洞,結果會怎樣?如果現在代碼中還有其他隱藏的漏洞怎麼辦?
在這一點上,化名“Theymos”的reddit社區比特幣子版版主敦促社區不要忘記這個漏洞。他在一篇傳讀很廣的帖子中稱這是“一次不可否認的重大故障”,並補充道:
“如果比特幣核心團隊的所有策略和做法都保持不變,那麼最終類似的故障將不可避免地再次發生,而我們下次可能也不會那麼幸運地看到這一次類似的結果。”
即便如此,有一種觀點認為,在開放的全球參與的網絡的推動下,比特幣核心團隊現在擁有了比該技術歷史上任何時候都更強大的代碼審查過程。
現在,對開源代碼庫做貢獻的開發人員比以往任何時候都要多。而且它被測試了很多次;據估計,代碼測試約佔代碼貢獻的20%。
儘管如此,開發人員仍然認為,要確保該數字貨幣順利運行,還有更多的工作需要去做。
Theymos認為,一種方法是建立“更複雜”的測試,專門測試並定位嚴重但很難發現的漏洞,比如上週的測試。他補充道:,並補充道:
“社區應該希望所有大型比特幣公司派出技術測試專家進入比特幣核心團隊,目前很多公司沒有為核心開發做出過任何貢獻。”
比特幣核心貢獻者James Hilliard也強調了這一點,他認為開發人員可以提高測試的“數量”和“質量”。不過,說起來容易做起來難。比特幣核心貢獻者Greg Maxwell對Theymos的思路表示贊同,認為測試固然重要,但是測試的質量和細節才是關鍵。Maxwell說道:
“將更多的精力用於測試對我們來說是一個長期的挑戰,一方面是因為測試的藝術性和科學性不亞於系統工程的任何其他方面。測試涉及的技能和能力並非每個人都具備。”
但這種專業人才很難找到。Hilliard告訴CoinDesk:
“比特幣的發展在很大程度上受到了代碼審查的限制,而且沒有多少人能夠勝任這一工作。”
然而,許多人認為責任不應該只落在開發人員身上。人們普遍認為,作為一個沒有領導者的去中心化項目,保持比特幣的無差錯是大家共同的責任。化名為Shinobimonkey的比特幣愛好者告訴CoinDesk:
“我的主要問題是,很多人對特定的開發人員提出批評指責,但整個項目是開放的,它不是’會員制’,用戶有責任審核代碼,就像開發者積極貢獻代碼一樣。”
比特幣核心維護者Wladimir van der Laan也表達了同樣的觀點,他在推特上寫道:
“出現有漏洞的代碼是不對的。是的,是’我們’搞砸了,但這個’我們’概念很寬泛。應該是整個社區因為沒有徹底審查共識變化而將它搞砸了。”
區塊鏈代碼工程師John Newberry同意該觀點。儘管他沒有編寫漏洞百出的代碼,但他辯稱,作為比特幣世界的一名開發者,出現這樣的錯誤他也有責任,因為他沒有對代碼進行仔細審查。
他甚至表示,他此前看到該有問題的代碼時只是覺得很可笑。但他認為其他人可能已經檢查過了。他說道:
“我沒有親自去驗證,而是相信那些比我更聰明、更有智慧的人已經驗證過了。我想當然地認為是其他人已經做了這一工作。”
儘管如此,一些人仍然認為有存在漏洞的風險。Blockstream首席運營官Samson Mow在推特上說:
“比特幣以前也出現過漏洞,而且還會再次出現漏洞。它只是一個軟件。這沒什麼大驚小怪的。”
除了這些思路外,還有另一個流行的想法。目前比特幣社區的主要比特幣軟件比特幣核心在95%的比特幣節點上運行。(至少這是根據一項統計數據得出的——有趣的是,沒有辦法看到每個比特幣節點,因為有些節點想要更多的隱私,不會向網絡的其他部分大事宣揚它們的存在。)
因此,一個想法是要允許更多的比特幣代碼客戶端存在。這樣的話,如果一個代碼客戶端有災難性的錯誤導致網絡崩潰時,其他代碼客戶端仍然可以運行,從而保持比特幣作為一個整體一直運行。
從某種程度上講,這已經存在了。目前存在一些不太為人所知的代碼客戶端,如Bitcoin Knots和Btcd。它正在加密貨幣領域的其他地方成為常態。例如,以太坊有兩個主要的客戶端,Geth和Parity,每一個都可以供任何運行該軟件的人使用。
儘管如此,許多比特幣開發人員擔心,添加多個客戶端可能會帶來比上週的漏洞更嚴重的問題。比特幣核心貢獻者Andrew Chow在一場概述利弊的對話中表示:
“許多人沒有意識到的是,讓人們運行不同的客戶端使得攻擊者更容易對網絡進行分裂。”
因此,開發人員就下一步該做什麼尚未達成一致。也許Theymos的話對此做了最好地表述:
“我不知道怎樣才能防止這種情況再次發生,但如果社區因為這次錯誤沒有造成什麼損害而對它置之不理,我知道接下來會發生什麼情況。”