從十年前到今天,比特幣從一個白皮書的構想逐漸成為全球最大的點對點網絡支付系統之一。隨著比特幣的發展,區塊鏈技術也受到越來越多的關注。
其實,區塊鏈本質上就是一個分布式的應用軟體,而分布式系統首要問題就是解決一致性的問題,也就是要達成共識,所以說共識算法就是區塊鏈的「靈魂」。從BFT到PoW再到PoS,共識算法逐漸被被發明、改進和應用。今天在區塊鏈的核心領域——分布式存儲領域,Lambda團隊初步實現了該領域最為核心的算法,也就是PoST時空證明算法,並將該算法的核心類庫部分在GitHub上進行開源,開源協議遵守GPL V3。
數據完整性驗證機制
近些年,雲計算得到廣泛的普及和應用,其核心理念就是資源租用、應用託管和服務外包,其通過虛擬化技術將分布的計算節點組成一個共享的虛擬化池,為用戶提供服務。但是當用戶選擇將大量應用和數據部署到雲計算平臺中時,雲計算系統也相應地變為雲存儲系統,但高度集中的計算資源使雲存儲面臨著嚴竣的安全挑戰,這也是中心化服務先天具備的弱點。
此前我們在《騰訊雲數據丟失事件思考:存儲的未來在哪裡?》一文中也提到,中心化的雲存儲在安全性、可靠性以及服務水平層面還存在很多問題亟待解決。企業數據放在雲存儲中,他們最關心的是數據是否完整無誤,如果出現故障,是否可以實現數據的恢復,而且能夠證明這些數據與原來數據完全一致。這就是去中心存儲中經常提到的「數據完整性驗證機制」。
數據完整性驗證機制根據是否對數據文件採用了容錯預處理分為數據持有性證明PDP機制(PDP,Provable Data Possession)和數據可恢復證明POR機制(POR,Proofs of Retrievability)。PDP機制能快速判斷遠程節點上數據是否損壞,更多的是注重效率,而POR機制不僅能識別數據是否已損壞, 且能恢復已損壞的數據。這兩種機制有著不同的應用需求,PDP機制主要用於檢測大數據文件的完整性,而POR機制則用於確保重要數據的完整性,以及數據丟失之後的可恢復性。
數據持有性證明PDP機制
首先我們可以看看PDP方案的一個應用場景:
(1)Alice要求Bob記憶一組信息;
(2)Alice本身並不會記下這組信息;
(3)Alice請Chris來確認Bob是否還記得這組信息;
(4)Chris並不了解這組信息的內容。
我們對這些角色進行代換:Alice即是用戶,Bob即為存儲曠工,Chris即為第三方審核者(以下簡稱TPA)。
驗證流程如下:
(1)用戶為待外包的每塊數據生成一個Tag,這個tag經由用戶進行籤名;
(2)TPA隨機對用戶外包數據中一塊發起Challenge,這個Challenge中包含有TPA生成的隨機數;
(3)存儲曠工根據被挑戰的數據塊內容、Tag信息、Challenge信息以及自己生成的一個隨機計算得到一個Proof;
(4)TPA以challenge、proof及用戶公鑰為參數,通過映射函數e(u,v)雙線性性質檢驗存儲曠工是否持有數據。
PDP的核心公式為:
其中:
時空證明:Proof of Space Time
PoST,全稱是Proof of Space Time,是由FileCoin引入到區塊鏈領域的概念,「時空」的定義是衡量並計算存儲在網絡中的數據存儲時間及空間。 FileCoin和Lambda都是旨在提供去中心化的分布式存儲,礦工通過存儲及檢索過程獲得客戶的付費,並通過時空證明算法獲得出塊獎勵。由於整個網絡是沒有中心化節點的P2P網絡,因此需要某種機制保證用戶所存儲數據的完整性和可恢復性,因此誕生了這個領域的一些相關算法。
時空證明PoST,它可以讓驗證者檢查存儲提供商是否在一段時間內存儲了他/她的外包數據。這對提供商的直接要求是:
(1)生成順序的存儲證明來作為確定時間的一種方法。
(2)組成遞歸執行來生成簡單的證明。
其實,PoST算法是對POR的一種改進,POR算法是由Juels等人在一篇名叫《Proofs of Retrievability For Large Files》的論文中最早進行闡述,其核心是將文件分片存儲,並根據分片的標籤信息定期進行挑戰和證明。但通常學術界所定義的POR的運行依賴於中心化第三方節點,並且每次運行都要進行預處理,相對的SpaceTime(PoST)是一定時期內產生一個POR序列來證明有用存儲的保持時間。
如下圖所示,PoST與PoR的主要區別在於重複挑戰的執行,而不重新運行初始化階段,這就大大提高了執行效率。
關於 IPFS和 FileCoin
現在,區塊鏈領域的很多人混淆了IPFS和FileCoin項目,以為IPFS項目已經解決了存儲數據的完整性問題,這是一個誤區。這些人錯誤的認為,IPFS對數據進行哈希之後,是可以保證數據的不可篡改的,這是一個錯誤的認識,對於任意IPFS網絡的節點來說,它們僅僅會存儲自己感興趣的數據,而不是用戶指定的數據。因此,需要一個激勵和檢查層來確保用戶指定數據的存儲和不被篡改。做一個簡單的比較,IPFS是類似於開源的Ceph軟體,FileCoin和Lambda則更類似於AWS的S3。沒有數字貨幣激勵的單純存儲系統,是不可能解決數據的持有性問題的。
FileCoin關於時空證明PoST的定義為:
* 時空證明PoST方案使得有效的證明人P 能夠說服一個驗證者V 相信 P 在一段時間內已經存儲了一些數據 D。PoSt其特徵是多項式時間算法的元組: (Setup, Prove, Verify)。
* PoSt.Setup(1λ,D)->Sp,Sv,其中SP 和 SV 是P 和V 的特點方案的設置變量,λ 是一個安全參數。PoSt.Setup用來給予 P 和V 必要的信息來運行PoSt.Prove和 PoSt.Prove。一些方案可能要求證明人或者是有互動的第三方去運算PoSt.Setup。
* PoSt.Prove(Sp , D, c, t) → πc,其中c 是驗證人V 發出的隨機驗證, πc 是證明人在一段時間內可以訪問數據D 的的證明。PoSt.Prove由P(證明人)為V(驗證者)運行生成 πc。
* PoSt.Verify(Sv, c, t,πc)→ {0,1},用來檢測證明proof是否是正確。PoSt.Verify 由V運行和說服V 相信 P 在一段時間內已經存儲了R。
從邏輯上來講,數據的持有性證明是一種由兩個角色和四個步驟完成的遊戲。第一個角色是Challenger,第二個角色是完成Proof的人,Challenger的第一步把文件和一些謎題生成之後,放到Server上;第二步生成某個Challenger的信息,需要的某些數據;第三步存儲節點完成了某個Proof,發回給Challenger;第四步就是Challenger用自己原來遺留的一些信息,生成一個Verify,用Verify跟Proof去驗證這東西是不是對的;這就是用兩個角色、四個步驟完成驗證。
去中心化存儲項目需要解決的問題非常多,但是我們需要避免項目周期過長和設定過於龐大的目標。在軟體領域,有一本著名的書叫做《人月神話》,講述了一個著名的軟體項目失敗的過程。事實上,任何設計目標過於宏大的軟體都難逃失敗的命運,而正確的開發方式則應該是通過敏捷和迭代來進行完成。
FileCoin作為一個歷史悠久的項目,其白皮書所採用的技術方案多次更改,核心共識算法PoST v1從最早的類PoW共識,到2017完全推翻V1的設計,改用類似於Algorand的VRF算法,到加入Poreps的VDE實現,到引入新的VDF算法,並且檢索市場、小額支付等問題也尚未有完善的設計方案,FileCoin涉獵了太多的技術及學術難題,使得開發周期變得非常不可控。
Lambda的解決方案
而Lambda的思路是,儘可能通過原型系統去迭代實現一個基於區塊鏈的PDP和POR系統,並實現PoST的所有優點,比如連續挑戰和鏈上隨機挑戰。Lambda認為,在非BlockChain情況下,在另外一種和POR不一樣驗證算法中,可以構造一個PDP算法,假設一個可信第三方,通過一定的概率,對於數據的持有性進行驗證,並且把驗證結果以顯式不可篡改的方式來存儲。那麼這個可信的第三方的審計,也就是所謂的TPA,一定可以把驗證結果通過上鏈來實現不可篡改,並且一個單點可信的驗證過程,也一定可以通過一組半可信Validator節點共識來完成。
而對於Validator節點和角色的使用,是Lambda不同於FileCoin的主要特點,也因此讓Lambda項目的開發難度得以降低。今天,Lambda開放的使用Validator節點的PoST實現,給分布式存儲和區塊鏈存儲領域提供了新的思路和研究方向。
Lambda的創始人何曉陽
中國軟體著名技術專家,JVM社區成員,曾在BEA Systems和Oracle擔任研發工程師,何曉陽本人也被稱為「中國APM行業第一人」。
Lambda的聯合創始人李沫南
中國頂級程式設計師——Coreseek和Log Insight的創始人之一。
作為搜尋引擎和文件系統、存儲系統、日誌系統專家,李沫南創作的CoreSeek中文分詞系統曾廣泛用於中文
網際網路BBS社區。
據了解,Lambda核心團隊的大部分合伙人都是技術出身,都具有多年的基礎軟體研發和參與開源項目的經驗,曾向Apache基金會旗下多個項目貢獻過代碼,如Camel、Akka、Druid等等,所以Lambda的開源基於非常濃厚,本次也是該團隊第一次在區塊鏈領域貢獻自己的開原始碼。
END
參考文獻
* 解析V神文章《達到99%容錯共識算法》
* Lambda聯合創始人高海強:去中心化存儲中數據完整性證明是關鍵
* 騰訊雲數據丟失事件思考:存儲的未來在哪裡?
* Filecoin中文白皮書
* 在解決數據可用性挑戰上,我們和V神做了同樣的選擇
關於Lambda
Lambda是一個高速、安全、可擴展的區塊鏈基礎設施項目,通過對Lambda Chain和Lambda FS的邏輯解耦和分別實現,向去中心化應用提供可無限擴展的數據存儲能力。Lambda 獨特之處在於,通過驗證節點的共識完成數據的持有性證明(Provable Data Possession)和可恢復性證明 (Proofs of Retrievability),從而保證了存儲在「非可信存儲節點」上數據的完整性和可恢復性。Lambda宣布獲得真格基金、大都會資本、Dfund、泛城資本、策源數字基金、BlockVC、INBlockChain、時戳資本、NGC、DATA基金會、星耀資本、紅岸基金、Bluehill等頂級機構領投的數千萬美金融資。
(責任編輯:李顯傑 )