從十年前到今天,比特幣從一個白皮書的構(gòu)想逐漸成為全球最大的點(diǎn)對點(diǎn)網(wǎng)絡(luò)支付系統(tǒng)之一。隨著比特幣的發(fā)展,區(qū)塊鏈技術(shù)也受到越來越多的關(guān)注。
其實(shí),區(qū)塊鏈本質(zhì)上就是一個分布式的應(yīng)用軟件,而分布式系統(tǒng)首要問題就是解決一致性的問題,也就是要達(dá)成共識,所以說共識算法就是區(qū)塊鏈的「靈魂」。從BFT到PoW再到PoS,共識算法逐漸被被發(fā)明、改進(jìn)和應(yīng)用。今天在區(qū)塊鏈的核心領(lǐng)域——分布式存儲領(lǐng)域,Lambda團(tuán)隊(duì)初步實(shí)現(xiàn)了該領(lǐng)域最為核心的算法,也就是PoST時空證明算法,并將該算法的核心類庫部分在GitHub上進(jìn)行開源,開源協(xié)議遵守GPL V3。
數(shù)據(jù)完整性驗(yàn)證機(jī)制
近些年,云計(jì)算得到廣泛的普及和應(yīng)用,其核心理念就是資源租用、應(yīng)用托管和服務(wù)外包,其通過虛擬化技術(shù)將分布的計(jì)算節(jié)點(diǎn)組成一個共享的虛擬化池,為用戶提供服務(wù)。但是當(dāng)用戶選擇將大量應(yīng)用和數(shù)據(jù)部署到云計(jì)算平臺中時,云計(jì)算系統(tǒng)也相應(yīng)地變?yōu)樵拼鎯ο到y(tǒng),但高度集中的計(jì)算資源使云存儲面臨著嚴(yán)竣的安全挑戰(zhàn),這也是中心化服務(wù)先天具備的弱點(diǎn)。
此前我們在《騰訊云數(shù)據(jù)丟失事件思考:存儲的未來在哪里?》一文中也提到,中心化的云存儲在安全性、可靠性以及服務(wù)水平層面還存在很多問題亟待解決。企業(yè)數(shù)據(jù)放在云存儲中,他們最關(guān)心的是數(shù)據(jù)是否完整無誤,如果出現(xiàn)故障,是否可以實(shí)現(xiàn)數(shù)據(jù)的恢復(fù),而且能夠證明這些數(shù)據(jù)與原來數(shù)據(jù)完全一致。這就是去中心存儲中經(jīng)常提到的「數(shù)據(jù)完整性驗(yàn)證機(jī)制」。
數(shù)據(jù)完整性驗(yàn)證機(jī)制根據(jù)是否對數(shù)據(jù)文件采用了容錯預(yù)處理分為數(shù)據(jù)持有性證明PDP機(jī)制(PDP,Provable Data Possession)和數(shù)據(jù)可恢復(fù)證明POR機(jī)制(POR,Proofs of Retrievability)。PDP機(jī)制能快速判斷遠(yuǎn)程節(jié)點(diǎn)上數(shù)據(jù)是否損壞,更多的是注重效率,而POR機(jī)制不僅能識別數(shù)據(jù)是否已損壞, 且能恢復(fù)已損壞的數(shù)據(jù)。這兩種機(jī)制有著不同的應(yīng)用需求,PDP機(jī)制主要用于檢測大數(shù)據(jù)文件的完整性,而POR機(jī)制則用于確保重要數(shù)據(jù)的完整性,以及數(shù)據(jù)丟失之后的可恢復(fù)性。
數(shù)據(jù)持有性證明PDP機(jī)制
首先我們可以看看PDP方案的一個應(yīng)用場景:
(1)Alice要求Bob記憶一組信息;
(2)Alice本身并不會記下這組信息;
(3)Alice請Chris來確認(rèn)Bob是否還記得這組信息;
(4)Chris并不了解這組信息的內(nèi)容。
我們對這些角色進(jìn)行代換:Alice即是用戶,Bob即為存儲曠工,Chris即為第三方審核者(以下簡稱TPA)。
驗(yàn)證流程如下:
(1)用戶為待外包的每塊數(shù)據(jù)生成一個Tag,這個tag經(jīng)由用戶進(jìn)行簽名;
(2)TPA隨機(jī)對用戶外包數(shù)據(jù)中一塊發(fā)起Challenge,這個Challenge中包含有TPA生成的隨機(jī)數(shù);
(3)存儲曠工根據(jù)被挑戰(zhàn)的數(shù)據(jù)塊內(nèi)容、Tag信息、Challenge信息以及自己生成的一個隨機(jī)計(jì)算得到一個Proof;
(4)TPA以challenge、proof及用戶公鑰為參數(shù),通過映射函數(shù)e(u,v)雙線性性質(zhì)檢驗(yàn)存儲曠工是否持有數(shù)據(jù)。
PDP的核心公式為:
時空證明:Proof of Space Time
PoST,全稱是Proof of Space TIme,是由FileCoin引入到區(qū)塊鏈領(lǐng)域的概念,「時空」的定義是衡量并計(jì)算存儲在網(wǎng)絡(luò)中的數(shù)據(jù)存儲時間及空間。 FileCoin和Lambda都是旨在提供去中心化的分布式存儲,礦工通過存儲及檢索過程獲得客戶的付費(fèi),并通過時空證明算法獲得出塊獎勵。由于整個網(wǎng)絡(luò)是沒有中心化節(jié)點(diǎn)的P2P網(wǎng)絡(luò),因此需要某種機(jī)制保證用戶所存儲數(shù)據(jù)的完整性和可恢復(fù)性,因此誕生了這個領(lǐng)域的一些相關(guān)算法。
時空證明PoST,它可以讓驗(yàn)證者檢查存儲提供商是否在一段時間內(nèi)存儲了他/她的外包數(shù)據(jù)。這對提供商的直接要求是:
(1)生成順序的存儲證明來作為確定時間的一種方法。
(2)組成遞歸執(zhí)行來生成簡單的證明。
其實(shí),PoST算法是對POR的一種改進(jìn),POR算法是由Juels等人在一篇名叫《Proofs of Retrievability For Large Files》的論文中最早進(jìn)行闡述,其核心是將文件分片存儲,并根據(jù)分片的標(biāo)簽信息定期進(jìn)行挑戰(zhàn)和證明。但通常學(xué)術(shù)界所定義的POR的運(yùn)行依賴于中心化第三方節(jié)點(diǎn),并且每次運(yùn)行都要進(jìn)行預(yù)處理,相對的SpaceTIme(PoST)是一定時期內(nèi)產(chǎn)生一個POR序列來證明有用存儲的保持時間。
如下圖所示,PoST與PoR的主要區(qū)別在于重復(fù)挑戰(zhàn)的執(zhí)行,而不重新運(yùn)行初始化階段,這就大大提高了執(zhí)行效率。
關(guān)于 IPFS和 FileCoin
現(xiàn)在,區(qū)塊鏈領(lǐng)域的很多人混淆了IPFS和FileCoin項(xiàng)目,以為IPFS項(xiàng)目已經(jīng)解決了存儲數(shù)據(jù)的完整性問題,這是一個誤區(qū)。這些人錯誤的認(rèn)為,IPFS對數(shù)據(jù)進(jìn)行哈希之后,是可以保證數(shù)據(jù)的不可篡改的,這是一個錯誤的認(rèn)識,對于任意IPFS網(wǎng)絡(luò)的節(jié)點(diǎn)來說,它們僅僅會存儲自己感興趣的數(shù)據(jù),而不是用戶指定的數(shù)據(jù)。因此,需要一個激勵和檢查層來確保用戶指定數(shù)據(jù)的存儲和不被篡改。做一個簡單的比較,IPFS是類似于開源的Ceph軟件,F(xiàn)ileCoin和Lambda則更類似于AWS的S3。沒有數(shù)字貨幣激勵的單純存儲系統(tǒng),是不可能解決數(shù)據(jù)的持有性問題的。
FileCoin關(guān)于時空證明PoST的定義為:
· 時空證明PoST方案使得有效的證明人P 能夠說服一個驗(yàn)證者V 相信 P 在一段時間內(nèi)已經(jīng)存儲了一些數(shù)據(jù) D。PoSt其特征是多項(xiàng)式時間算法的元組: (Setup, Prove, Verify)。
· PoSt.Setup(1λ,D)-》Sp,Sv,其中SP 和 SV 是P 和V 的特點(diǎn)方案的設(shè)置變量,λ 是一個安全參數(shù)。PoSt.Setup用來給予 P 和V 必要的信息來運(yùn)行PoSt.Prove和 PoSt.Prove。一些方案可能要求證明人或者是有互動的第三方去運(yùn)算PoSt.Setup。
· PoSt.Prove(Sp , D, c, t) → πc,其中c 是驗(yàn)證人V 發(fā)出的隨機(jī)驗(yàn)證, πc 是證明人在一段時間內(nèi)可以訪問數(shù)據(jù)D 的的證明。PoSt.Prove由P(證明人)為V(驗(yàn)證者)運(yùn)行生成 πc。
· PoSt.Verify(Sv, c, t,πc)→ {0,1},用來檢測證明proof是否是正確。PoSt.Verify 由V運(yùn)行和說服V 相信 P 在一段時間內(nèi)已經(jīng)存儲了R。
從邏輯上來講,數(shù)據(jù)的持有性證明是一種由兩個角色和四個步驟完成的游戲。第一個角色是Challenger,第二個角色是完成Proof的人,Challenger的第一步把文件和一些謎題生成之后,放到Server上;第二步生成某個Challenger的信息,需要的某些數(shù)據(jù);第三步存儲節(jié)點(diǎn)完成了某個Proof,發(fā)回給Challenger;第四步就是Challenger用自己原來遺留的一些信息,生成一個Verify,用Verify跟Proof去驗(yàn)證這東西是不是對的;這就是用兩個角色、四個步驟完成驗(yàn)證。
去中心化存儲項(xiàng)目需要解決的問題非常多,但是我們需要避免項(xiàng)目周期過長和設(shè)定過于龐大的目標(biāo)。在軟件領(lǐng)域,有一本著名的書叫做《人月神話》,講述了一個著名的軟件項(xiàng)目失敗的過程。事實(shí)上,任何設(shè)計(jì)目標(biāo)過于宏大的軟件都難逃失敗的命運(yùn),而正確的開發(fā)方式則應(yīng)該是通過敏捷和迭代來進(jìn)行完成。
FileCoin作為一個歷史悠久的項(xiàng)目,其白皮書所采用的技術(shù)方案多次更改,核心共識算法PoST v1從最早的類PoW共識,到2017完全推翻V1的設(shè)計(jì),改用類似于Algorand的VRF算法,到加入Poreps的VDE實(shí)現(xiàn),到引入新的VDF算法,并且檢索市場、小額支付等問題也尚未有完善的設(shè)計(jì)方案,F(xiàn)ileCoin涉獵了太多的技術(shù)及學(xué)術(shù)難題,使得開發(fā)周期變得非常不可控。
Lambda的解決方案
而Lambda的思路是,盡可能通過原型系統(tǒng)去迭代實(shí)現(xiàn)一個基于區(qū)塊鏈的PDP和POR系統(tǒng),并實(shí)現(xiàn)PoST的所有優(yōu)點(diǎn),比如連續(xù)挑戰(zhàn)和鏈上隨機(jī)挑戰(zhàn)。Lambda認(rèn)為,在非BlockChain情況下,在另外一種和POR不一樣驗(yàn)證算法中,可以構(gòu)造一個PDP算法,假設(shè)一個可信第三方,通過一定的概率,對于數(shù)據(jù)的持有性進(jìn)行驗(yàn)證,并且把驗(yàn)證結(jié)果以顯式不可篡改的方式來存儲。那么這個可信的第三方的審計(jì),也就是所謂的TPA,一定可以把驗(yàn)證結(jié)果通過上鏈來實(shí)現(xiàn)不可篡改,并且一個單點(diǎn)可信的驗(yàn)證過程,也一定可以通過一組半可信Validator節(jié)點(diǎn)共識來完成。
而對于Validator節(jié)點(diǎn)和角色的使用,是Lambda不同于FileCoin的主要特點(diǎn),也因此讓Lambda項(xiàng)目的開發(fā)難度得以降低。今天,Lambda開放的使用Validator節(jié)點(diǎn)的PoST實(shí)現(xiàn),給分布式存儲和區(qū)塊鏈存儲領(lǐng)域提供了新的思路和研究方向。