IPFS&FileCoin-PoRep和PoSt演算法
區塊鏈在2017年爆發,很多項目都在用去中心化的思路去重塑。存儲是很多人想去重塑的一個方向,用去中心化的存儲代替中心化的存儲。2015年,IPFS設計提出了一個點對點的分散式媒體發布協議。IPFS被認為是最有可能取代HTTP的新一代互聯網協議。FileCoin在IPFS協議基礎上,設計自己的區塊鏈,激勵更多的存儲服務以及用戶參與IPFS協議。
IPFS以及FileCoin的白皮書相對來說,知識量很大,讀懂需要花一點時間。我總結一下FileCoin中設計的PoRep以及PoSt演算法的原理,方便理解。
1)PoRep演算法
PoRep 演算法是用來證明一個存儲系統確實存儲了某一份數據的拷貝,而且每一份拷貝使用不同的物理存儲。
PoRep 需要抵抗的三種攻擊:
1) 女巫攻擊(多份數據使用同一物理存儲)
2) 外包攻擊(用其他存儲,而不是自己的存儲進行數據存儲)
3) 生成攻擊(及時生成檢驗數據)
*) 解決女巫攻擊的方法是數據編碼,引入混淆因子:
RDek = Encode(D, ek)
RDek 是編碼後的數據,D 是原數據,ek是混淆因子。
*)解決外包攻擊或者生成攻擊的方法是:Encode 的時間要足夠長
(a) T honest = RTTVPV + Time(PoRep.Prove(SP, RD ek, c))
(b) T attack = RTTVPV + Time(PoRep.Prove(SP, Encode(D, ek), c))
保證 T Encode = 10 × T honest or 100 × T honest。也就是攻擊者需要花10倍,甚至百倍的時間進行編碼,從而可以區分出攻擊者和誠實的礦工。
Encode 的方法必須具備以下幾個特徵:
1) 足夠慢,保證 T honest
2) 可以 Decode
3) 必須有混淆因子
4) 輸出不能壓縮
5) Decode 足夠快
6) Encode 的速度可調
7) Encode 的結果,所有人都能驗證
8) Encode 必須和數據中的所有 bit 相關
9) …
Filecoin 選擇的 Encode( Seal)的方法是多輪的 AES-256的CBC加密。
數據編碼以及驗證過程的幾個小概念:
1) 散列函數: CRH 以及 MerkleCRH(把一段數據切成一段段的,組成一個 Merkle 樹,針對每個節點,算 CRH,輸出是根上的 CRH)
2) zk-SNARKs: 零知識驗證演算法,在生成和驗證數據之前,需要生成一對生成/驗證密鑰。
整個PoRep的生成以及驗證的計算過程如下圖所示:
值得強調的是,最終存儲在硬碟的是Seal之後的數據,也就是AES的加密結果。
整個過程中有幾種計算:
1) 散列 CRH 以及 MerkleCRH
2) 零知識 Prove 以及 Verify
3) Seal ( AES-256 CBC)
具體的計算公式可以查看FileCoin的白皮書第15 頁。
2)PoSt演算法
PoSt演算法是在 PoRep演算法的基礎上,循環做一定次數的 PoRep 的證明。因為整個循環計算需要一定的時間,從而證明數據確實在物理存儲上存儲了一定的時間。 這也就是 Proof-of-SpaceTime 的由來。
可以參看白皮書上的圖來理解:
整個計算會重複PoRep計算t次。每次PoRep的計算結果,會作為輸入再次計算新的PoRep結果。最後一次PoRep的計算結果,作為PoSt的結果。
TAG:全球大搜羅 |