技術解碼丨複製證明(PoRep)發展現狀

技術解碼丨複製證明(PoRep)發展現狀


你想要安全,因為這是一個不受掌控的世界,你不知道攻擊來自哪裡,你依賴的是你心中多數人的誠實和利己主義;你需要層層裝甲,但你又不想付出太大的代價,高昂的保護意味著對人群的疏遠。怎麼辦?也許該尋得一套軟甲。價格親民,刀槍不如。


眾所周知,Filecoin的存儲證明體系是Filecoin網絡的精髓,也是Filecoiini研究團隊投入最多的部分,其中主要包括複製證明(PoRep)和時空證明(PoSt),而複製證明又是其中的重中之重,關鍵之中的關鍵。時至今日,儘管Filecoin的網絡協議,共識,其他算法都基本定型,但是複製證明仍然處於完善階段。仍然在苦苦尋求更加完善的方案。


複製證明到底證明什麼?

簡單地說,Filecoin的複製證明就是礦工證明你真的存儲了用戶的數據。

詳細一點講,那就可以直接採用複製證明研究專家、證明算法的發明者 Ben Fisch 的話:


複製證明(PoRep)是一個交互式證明系統。在這個系統中,存儲的提供者需要提供可公開驗證的證明,來表明其為一個數據文件副本分配了獨有的空間資源,而且所存儲的數據是可檢索的。也就是說,複製證明是一個把可檢索證明(PoR)嵌入進容量證明(PoC)中的一種證明機制。


進一步說,PoRep使證明者能夠證明他們正在使用不低於需要的最小空間來存儲信息(這一點等同於空間證明:PoS),並實際使用該空間來存儲有用的信息(這與大多數空間證明不同)。同時,PoRep可以有效地提取存儲的任何數據(如可檢索性證明)。


在一個帶激勵的網絡中,存儲節點以證明者的身份參與並存儲數據文件,因為這樣做可以使他們獲得網絡獎勵。


PoRep的一項重要特性是,證明者如果不能證明他們聲稱的那樣存儲數據文件的複製副本,那麼他們將不能獲得獎勵。這是通過系統設計來實現的,在一個合理的系統設計中,即使是那些重複的數據文件,也需要分別證明其每一個複製都需要根據協議被單獨證明。


這裡幾個名詞解釋一些:

- PoRep:Proof of Replication (前面講過了)

- PoC:Proof of Capacity - 容量證明,證明自己有足夠的容量

- PoS:Proof of Storage - 存儲證明,注意,這裡沒有包括檢索部分(與PoC類似)

- PoR:Proof of Retrievability - 檢索證明,證明數據可被讀取


綜上所述,我們知道: PoRep = PoS + PoR


複製證明的使用

技術解碼丨複製證明(PoRep)發展現狀


PoRep方案旨在用於雲存儲和分佈式存儲網絡。在這樣的網絡中,重要的是要確保確實獨立地存儲數據文件的複製。


Ben Fisch 作為 Filecoin 研究團隊中的重要一員,他在2018年發表了兩篇重要論文,用於探索複製證明在 Filecoin 網絡中的使用,分別是:

  • Tight Proofs of Space and Replication
  • PoReps: Proofs of Space on Useful Data


Filecoin 網絡的複製證明的設計基本上基於上述論文,但做了更多的探索。其中包括,從 Zigzag DRG 到 WinSDR 再到 SDR 的改變。


複製證明的安全性

當複製證明用於區塊鏈系統,這裡就涉及到一個重要的問題,這種證明是否可偽造?答案是肯定的。因為證明不過就是一些運算,也可以看成一個函數,當所有輸入都知道的情況下,函數值也就可計算了。在區塊鏈系統中,一切鏈上的信息都是透明的,即使不透明,對於需要發起證明的存儲服務方而言,證明所需要的所有信息也是已知的。


然而,複製證明要求必須在存儲的時候發起,同時,要一直保持承諾。也就是說,必須:

1)按照規定的時間內完成證明;

2)證明完成後,不能刪除數據。


上面的第 1)點,可以通過交易和上鍊信息來進行驗證,而第 2)點,就需要通過時空證明來保證。那麼很簡單的一個問題就是,能不能不保留數據,而在需要時空證明的時候再做一次複製證明來生成數據呢?答案是,可以,如果你能夠滿足網絡的要求的話。


這裡所提到的網絡要求在實踐中就是時間要求,為了這個安全性,一個簡單的設計原理就是,讓時空證明必須在很短的時間內完成,否則無效;而複製證明如果不能在很短的時間內完成的話,就不能做假。


那麼,當這兩個時間的差距越大,安全性就越高。


Filecoin網絡中的要求:

  • 時空證明(PoSt)要求在小於一個區塊時間內完成(25s~45s,具體數值待定);注意,這裡只考慮WinningPoSt (之前叫ElectionPoSt)。為什麼可以不考慮 WindowedPoSt,讀者自己想想做假的動機就差不多明白(當然全面的安全考慮不僅僅是這麼簡單)。
  • 複製證明(PoRep)通過設計,在一般用戶可承受成本之下,使得其不可能小時級別內完成。一般為數小時


注意,PoSt的時間是網絡要求的,而PoRep的時間消耗,只能通過算法設計來實現。


如何增長PoRep需要的時間?

如果單純從安全性的角度考慮,複製證明完成的時間越長越好。要延長計算的時間,辦法有很多,可以考慮的因素包括:

  • 算法的長度:步驟越多的算法,可能需要更長的時間
  • 算法的可並行性:並行度可以通過增加資源減少運算時間
  • 算法的可簡化性:算法本身如果能夠簡化,那麼複雜度就存疑


PoRep要在這幾個方面都要有足夠的強度。就目前的SDR算法而言,對應上面的幾點,Filecoin採用的方案是:

  • 算法的長度通過多步驟計算實現:比如在整個SDR的算法過程中,計算Column Hash之前,要計算11層 labels,這個層數可以調整,層數越多,步驟越多,時間越長;
  • 採用每一步的強依賴關係來去並行化:在計算labels時,每一步的計算都依賴上一步的結果,完全不能並行;因此不能通過增加資源的方式來縮短時間;
  • 採用大量的密碼哈希算法來抗簡化:我們知道,密碼學中的哈希算法是單向函數,而且是難以破解和簡化的(實踐中可以看成是不可破解的)。


安全和成本的折衷

但是,安全和成本是一個硬幣的兩面。如果不計成本,當然可以很安全。但是,Filecoin的願景是做一個存儲市場,是希望與 Amazon,阿里雲抗衡的,如果PoRep的成本太高,那麼整個存儲的成本也就會高,在這個市場上的競爭力就降低了。


如何在儘量不增加成本的情況下,提高安全性,這是Filecoin團隊考慮的最多的一個問題。其實,對於PoRep性能的提升,Filecoin團隊一直在做,而且性能也一直在提升,這些提升的措施包括:採用更高效的hash算法 Poseidon 來提升零知識證明效率;利用SHA Extension指令來提升每一層的計算速度;採用八叉樹來簡化計算週期和存儲需求;利用內存和存儲的均衡來實現高效率的計算等。


這些考慮,更多的在於對於CPU,內存和存儲資源的消耗上儘量降低,從而帶來成本的降低,但是,前面提到過了,為了安全性不降低,計算的時間長度上不下降。換句話說,儘管你可以使用更少的資源,更低的成本來做複製證明,但是,你還是要花很長時間。


這裡有一個問題要澄清一下:做複製證明花比較長的時間,並不意味著存儲和檢索的時間就長了,也並不意味著會很大地影響網絡的響應時間。這是兩回事情。對存儲用戶而言,存儲和檢索都是直接和礦工打交道的,礦工對用戶的響應時間並不依賴於Filecoin區塊鏈網絡。礦工完全有很多的方案還為用戶提供快速的響應。因此,千萬不要因為複製證明需要花的的時間長,就認為Filecoin網路的服務會有問題。


進一步的優化空間

PoRep算法一直在進步,但仍然不能令人滿意。安全性也許可以,但效率還是不夠好。一方面,目前的算法對於不帶 SHA Extension 的芯片不夠友好,這可能造成大量存量設備不能高效地為Filecoin網絡提供存儲;另一方面,如果要充分利用現有設備來進行計算,現在的算法要麼需要大量的內存消耗、要麼需要高帶寬、大量高速IO消耗。


到目前未知,儘管已經非常臨近測試網第二階段,但是,Filecoin團隊仍在積極研究,希望進一步優化。就目前而言,團隊對這個算法的滿意度還可以,一個共識是:目前算法是安全的,而且也工作的很好。第二階段可以採用這個算法。同時,希望有更好的算法,如果經過研究,發現新的不降低安全性,同時需要的成本可以更低,那麼算法將會被替換。


這也是團隊一直反覆強調不要買硬件的原因。再等等吧,不用多久,就可以基本定型。不好意思,再說一句,優化無止境,改變總在發生。


分享到:


相關文章: