# 關鍵問題和挑戰

從技術角度講，區塊鏈所涉及到的領域比較繁雜，包括分佈式系統、密碼學、心理學、經濟學、博弈論、控制論、網絡協議等，這也意味著工程實踐中大量的挑戰。

下面列出了目前業界關注較多的一些技術話題。

## 隱私保護

隱私保護一直是分佈式系統領域十分關鍵的問題。在分佈式場景下，因為缺乏獨立的管理機制，參與網絡的各方無法保證嚴格遵守協議，甚至會故意試圖獲取網絡中他人的數據，這些行為都很難進行約束。

而分佈式賬本要在共享協同信息和隱私保護之間達到合適的平衡，是個不小的挑戰。特別隨著公有賬本系統屢屢出現安全漏洞，動輒造成數千萬美金的風險；隨著《一般數據保護條例》（General Data Protection Regulation，GDPR）的落地，隱私保護的合規要求愈加嚴格；傳統的信息安全技術、形式化驗證技術在應對新的需求時暴露出實踐性不強的缺陷，都亟待解決。

尤其以醫療健康領域，對數據的隱私性需求最為強烈，要求嚴格控制數據的來源、所有權和使用範圍，傳統手段很難滿足這些特性，需要有機結合零知識證明、同態加密等新的密碼學手段。而這些新技術在實際應用中還存在不少問題。

## 分佈式共識

共識是分佈式系統領域經典的技術難題，學術界和業界都已有大量的研究成果（包括 Paxos、拜占庭系列算法等）。

問題的核心在於確保某個變更在分佈式網絡中得到一致的執行結果，是被參與多方都承認的，同時這個信息是不可推翻的。

該問題在公開匿名場景下和帶權限管理的場景下需求差異較大，從而導致了基於概率的算法和確定性算法兩類思想。

最初，比特幣區塊鏈考慮的是公開匿名場景下的最壞保證。通過引入了“工作量證明”（Proof of Work）策略來規避少數人的惡意行為，並通過概率模型保證最後參與方共識到最長鏈。算法的核心思想是基於經濟利益的博弈，讓惡意破壞的參與者損失經濟利益，從而保證大部分人的合作。同時，確認必須經過多個區塊的生成之後達成，從概率上進行保證。這類算法的主要問題在於效率的低下和能源的浪費。類似地，還有以權益為抵押的 PoS 和 DPoS 算法等。

後來更多的區塊鏈技術（如超級賬本）在帶權限許可的場景下，開始考慮支持更多的確定性的共識機制，包括經典的拜占庭算法等，可以解決快速確認的問題。

共識問題在很長一段時間內都將是極具學術價值的研究熱點，核心的指標將包括容錯的節點比例、決策收斂速度、出錯後的恢復、動態特性等。PoW 等基於概率的系列算法理論上允許少於一半的不合作節點，PBFT 等確定性算法理論上則允許不超過 1/3 的不合作節點。

## 交易性能

一般情況下，區塊鏈並不適用於高頻交易的場景，但由於金融系統的需求，業界目前也十分關心如何儘量提高區塊鏈系統的交易性能，包括吞吐量和確認延遲兩個方面。

目前，公開的比特幣區塊鏈只能支持平均每秒約 7 筆的吞吐量，安全的交易確認時間為一個小時左右。以太坊區塊鏈的吞吐量略高一些能到幾十筆每秒，但交易性能也被認為是較大的瓶頸。2017 年底一款名為 CryptoKitties 的遊戲應用造成以太坊網絡的嚴重堵塞。

這種場景下，為了提高處理性能，一方面可以提升單個節點的性能（如採用高配置的硬件），同時設計優化的策略和算法，提高性能；另外一方面可將交易處理卸載（off-load）到鏈下。只用區塊鏈記錄最終交易信息，如比特幣社區提出的 [閃電網絡](https://lightning.network/lightning-network-paper.pdf) 等設計。類似地，側鏈（side chain）、影子鏈（shadow chain）等思路在當前階段也有一定的借鑑意義。類似設計可將整體性能提升 1\~2 個數量級。

聯盟鏈場景下，參與多方存在一定的信任前提和利益約束，可以採取更優化的設計，換來性能的提升。以超級賬本 Fabric 項目為例，在普通虛擬機配置下，單客戶端每秒可以達到數百次（Transactions per second，tps）的交易吞吐量；在有一定工程優化或硬件加速情況下可以達到每秒數千次的吞吐量。

客觀地說，目前開源區塊鏈系統已經可以滿足不少應用場景的性能需求，但離大規模交易系統每秒穩定數萬筆的吞吐性能還有較大差距。

*注：據公開的數據，VISA 系統的處理均值為 2,000 tps，峰值為 56,000 tps；某金融支付系統的處理峰值超過了 85,000 tps；某大型證券交易所號稱的處理均（峰）值在 80,000 tps 左右。*

## 擴展性

常見的分佈式系統，可以通過橫向增加節點來擴展整個系統的處理能力。

對於區塊鏈網絡系統來說，跟傳統分佈式系統不同，這個問題往往並非那麼簡單。實際上，大部分區塊鏈系統的性能，很大程度上取決於單個節點的處理能力。對這些系統來說，節點需要滿足 **高性能、安全、穩定、硬件輔助加解密能力**。

例如，對於比特幣和以太坊區塊鏈而言，網絡中每個參與維護的核心節點都要保持一份完整的存儲，並且進行智能合約的處理。此時，整個網絡的總存儲和計算能力，取決於單個節點的能力。甚至當網絡中節點數過多時，可能會因為共識延遲而降低整個網絡的性能。尤其在公有網絡中，由於大量低性能處理節點的存在，問題將更加明顯。

要解決這個問題，根本上是放鬆對每個節點都必須參與完整處理的限制（當然，網絡中節點要能合作完成完整的處理），這個思路已經在超級賬本項目中得到應用；同時儘量減少核心層的處理工作，甚至採用多層處理結構來分散交易。

在聯盟鏈模式下，還可以專門採用高性能的節點作為核心節點，用相對較弱的節點作為代理訪問節點。

另外，未來必然會涉及到不同賬本之間互通的跨鏈需求。超級賬本的 Quilt 項目和 W3C 的 Interledger Payments 工作組已對此問題開展研究。

## 安全防護

區塊鏈目前最熱門的應用場景是金融相關的服務，安全自然是最敏感也是挑戰最大的問題。

區塊鏈在設計上大量採用了現代成熟的密碼學算法和網絡通信協議。但這是否就能確保其絕對安全呢？

**世界上並沒有絕對安全的系統。**

系統越複雜，攻擊面越多，安全風險越高；另外系統是由人設計的和運營的，難免出現漏洞。

作為分佈式系統，區塊鏈首先要考慮傳統的網絡安全（認證、過濾、攻防）、信息安全（密碼配置、密鑰管理）、管理安全（審計、風險分析控制）等問題。其次，尤其要注意新場景下凸顯的安全挑戰。

首先是立法。對區塊鏈系統如何進行監管？攻擊區塊鏈系統是否屬於犯罪？攻擊銀行系統是要承擔後果的。但是目前還沒有任何法律保護區塊鏈（特別是公有鏈）以及基於它的實現。

其次是代碼實現的漏洞管理。考慮到使用了幾十年的 openssl 還帶著那麼低級的漏洞（[heart bleeding](https://heartbleed.com/)），而且是源代碼完全開放的情況下，讓人不禁對運行中的大量線上系統持謹慎態度。而對於金融系統來說，無論客戶端還是平臺側，即便是很小的漏洞都可能造成難以估計的損失。

另外，公有區塊鏈所有交易記錄都是公開可見的，這意味著所有的交易，即便被匿名化和加密處理，但總會在未來某天被破解。安全界一般認為，只要物理上可接觸就不是徹底的安全。實際上，已有文獻證明，比特幣區塊鏈的交易記錄大部分都能追蹤到真實用戶。

公有鏈普遍缺乏有效的治理和調整機制，一旦運行中出現問題難以及時修正。即使是有人提交了修正補丁，只要有部分既得利益者聯合起來反對，就無法得到實施。比特幣社區已經出現過多次類似的爭論。

最後，運行在區塊鏈上的智能合約應用五花八門，可能存在潛在的漏洞，必須要有辦法進行安全管控，在註冊和運行前進行形式化驗證和安全探測，以規避惡意代碼的破壞。運行智能合約的環境也會成為攻擊的目標。近些年區塊鏈領域的安全事件大都跟智能合約漏洞有關。

2014 年 3 月，Mt.gox 交易所宣稱其保存的 85 萬枚比特幣被盜，直接導致破產。

2016 年 6 月 17 日，發生 [DAO 系統漏洞被利用](https://blog.daohub.org/the-dao-is-under-attack-8d18ca45011b) 事件，直接導致價值 6000 萬美元的數字貨幣被利用者獲取。儘管對於這件事情的反思還在進行中，但事實再次證明，目前基於區塊鏈技術進行生產應用時，務必要細心謹慎地進行設計和驗證。必要時，甚至要引入“形式化驗證”和人工審核機制。

2018 年 3 月，幣安交易所被黑客攻擊，造成用戶持有比特幣被大量賣出。雖然事後進行了追回，但仍在短期內對市場價格造成了巨大沖擊。

*注：著名黑客凱文•米特尼克（Kevin D. Mitnick）所著的《反欺騙的藝術——世界傳奇黑客的經歷分享》一書中分享了大量的真實社交工程欺騙案例。*

## 數據庫和存儲系統

區塊鏈網絡中的大量信息需要寫到文件和數據庫中進行存儲。

觀察區塊鏈的應用，大量的讀寫操作、Hash 計算和驗證操作，跟傳統數據庫的行為十分不同。

當年，人們觀察到互聯網應用大量非事務性的查詢操作，而設計了非關係型（NoSQL）數據庫。那麼，針對區塊鏈應用的這些特點，是否可以設計出一些特殊的針對性的數據庫呢？

LevelDB、RocksDB 等鍵值數據庫，具備很高的隨機寫和順序讀、寫性能，以及相對較差的隨機讀的性能，被廣泛應用到了區塊鏈信息存儲中。但目前來看，面向區塊鏈的數據庫技術仍然是需要突破的技術難點之一，特別是如何支持更豐富語義的操作。

大膽預測，未來將可能出現更具針對性的“塊數據庫（BlockDB）”，專門服務類似區塊鏈這樣的新型數據業務，其中每條記錄將包括一個完整的區塊信息，並天然地跟歷史信息進行關聯，一旦寫入確認則無法修改。所有操作的最小單位將是一個塊。為了實現這種結構，需要原生支持高效的簽名和加解密處理。

## 集成和運營治理

大部分企業內和企業之間都已經存在了一些信息化產品和工具，例如處於核心位置的數據庫、企業信息管理系統、通訊系統等。企業在採用新的產品時，往往會重點考察與已有商業流程和信息系統進行集成時的平滑度。

兩種系統如何共存，如何分工，彼此的業務交易如何進行合理傳遞？出現故障如何排查和隔離？已有數據如何在不同系統之間進行遷移和災備？這些都是很迫切要解決的實際問題。解決不好，將是區塊鏈技術落地的不小阻礙。

另外，雖然大部分區塊鏈系統在平臺層面都支持了非中心化機制，在運營和治理層面確往往做不到那麼非中心化。以比特幣網絡為例，歷史上多次發生過大部分算力集中在少數礦池的情況，同時軟件的演化路線集中在少數開發者手中。運營和治理機制是現有區塊鏈系統中普遍缺失的，但在實際應用中又十分重要。

如何進行合理的共識、高效的治理仍屬於尚未解決的問題。公有賬本中試圖通過將計算機系統中的令牌與經濟利益掛鉤，維護系統持續運行；聯盟賬本中通過商業合作和投票等方式，推舉聯盟治理機構，進行聯盟網絡的維護管理。這些機制仍需在實踐過程中不斷完善和改進。以供應鏈場景為例，動輒涉及到數百家企業，上下游幾十個環節，而且動態性較強。這些都需要分佈式賬本平臺能提供很強的治理投票和權限管控機制。
