Filecoin 存儲證明 淺析

概 要

  1. 存儲證明是 Filecoin 網(wǎng)絡(luò)成立的基礎(chǔ),F(xiàn)ilecoin的存儲證明包括:PoRep(復(fù)制證明)和 PoSt(時空證明)

  2. PoRep = PoS + PoR

  3. 算法的設(shè)計目標(biāo)是,復(fù)制證明必須在足夠長的時間內(nèi)才能完成绵咱,而時空證明要足夠快蝎毡,從而達(dá)到防止作弊的目的

  4. 證明算法具體實現(xiàn)在 rust-fil-proofs 項目中袖扛,F(xiàn)ilecoin實現(xiàn)通過CGo調(diào)用 Rust 相關(guān)函數(shù)

1. 為什么需要存儲證明

信息產(chǎn)業(yè)發(fā)展至今傲诵,存儲已經(jīng)成為一個最為基礎(chǔ)的產(chǎn)業(yè)耽装。整個存儲市場處于高速發(fā)展之中龙考,基本上是每兩年存儲容量就翻一番蟆肆。然而,作為信息的承載體晦款,存儲市場起步晚于網(wǎng)絡(luò)市場勉盅,因此蓝晒,其發(fā)展也較晚,當(dāng)通用網(wǎng)絡(luò)協(xié)議和實現(xiàn)都已經(jīng)標(biāo)準(zhǔn)化的今天,存儲市場卻完全被巨頭把控解藻。在存儲越來越重要的今天界牡,通用的統(tǒng)一的存儲網(wǎng)絡(luò)呼聲也就越來越高镇防。

Filecoin就是致力于建立這樣一個通用的人人可以參與的存儲網(wǎng)絡(luò)活玲,在這個網(wǎng)絡(luò)之中,沒有寡頭控制袜匿,也無需巨頭背書更啄。一個基本的目標(biāo)就是,網(wǎng)絡(luò)(代碼)本身就可以形成一個良性的生態(tài)居灯,獎優(yōu)罰劣祭务,形成一個高質(zhì)量的網(wǎng)絡(luò)。其首要任務(wù)就是防攻擊(防欺騙)怪嫌。在Filecoin的白皮書中提到了三種攻擊方式:女巫攻擊待牵、生成攻擊和外包攻擊。對這些攻擊的定義這里不展開喇勋,需要提到的是缨该,所謂的防攻擊,也就是要讓欺騙者現(xiàn)行川背,讓誠實者獲得利益贰拿。

從存儲的角度來理解蛤袒,很簡單,這個網(wǎng)絡(luò)需要防止存儲提供者作假膨更,也就是要保證:1)不能虛報存儲空間妙真;2)不能虛報存儲的數(shù)據(jù)或存儲份數(shù);3)不能虛報存儲相應(yīng)數(shù)據(jù)的時間周期荚守。如果網(wǎng)絡(luò)(代碼)本身能夠防止這些欺騙珍德,那么,就不需要一個企業(yè)或機(jī)構(gòu)來背書或仲裁矗漾。網(wǎng)絡(luò)的生態(tài)形成了锈候。

2. Filecoin 相關(guān)的存儲證明

具體在Filecoin的實現(xiàn)之中,大致可以劃分為兩個部分:PoRep(Proof of Replication敞贡,復(fù)制證明)和 PoSt(Proof of Spacetime泵琳,時空證明)。還有數(shù)據(jù)片段證明和可檢索證明誊役。

  1. Proof of Replication: 復(fù)制證明获列,證明數(shù)據(jù)的的一個單獨(dú)的拷貝已經(jīng)在一個特定的扇區(qū)內(nèi)創(chuàng)建成功。復(fù)制證明由封踊坠浮(****Seal****)操作完成击孩,封印操作創(chuàng)建一份數(shù)據(jù)的拷貝,并產(chǎn)生相應(yīng)的復(fù)制證明

  2. Proof of Space-Time:時空證明鹏漆, 證明一定數(shù)量的已封印的扇區(qū)在一定的時間范圍內(nèi)存在于指定的存儲空間之中 — 而不是證明者臨時生成的數(shù)據(jù)(這被視為攻擊)

  3. Piece Inclusion Proof:數(shù)據(jù)片段包含證明溯壶,證明一個給定的數(shù)據(jù)片段存在于一個已封印的扇區(qū)之中

  4. Proof of Retrievability:可檢索證明,一種默克樹證明甫男,用來表明一個給定的葉節(jié)點(diǎn)存在于一個已封印的扇區(qū)內(nèi)

Filecoin的時空證明是與復(fù)制證明算法緊密相關(guān)的。從實現(xiàn)的角度而言验烧,實際上是一起實現(xiàn)的板驳。協(xié)議實驗室在前人研究的基礎(chǔ)上進(jìn)行了創(chuàng)新,組合了兩種(圖)算法碍拆,實現(xiàn)了更嚴(yán)格的證明和更高效的驗證若治,這種算法就叫做** Zigzag,目前最高效感混,最嚴(yán)格的存儲證明算法**端幼。

Zigzag: 當(dāng)前最高效,最嚴(yán)格的存儲證明算法
是兩種(圖)算法的組合 - 實現(xiàn)了更嚴(yán)格的證明和更高效的解封

  • Depth Robust Graph
  • Expander Graph
    僅使用其中任何一種弧满,都不能達(dá)到此目的

3. 存儲證明和驗證流程

要做好存儲證明婆跑,整個過程分為幾個主要階段,包括:初始化(僅執(zhí)行一次)庭呜,數(shù)據(jù)預(yù)處理(對每一片數(shù)據(jù)進(jìn)行)滑进,生成復(fù)制數(shù)據(jù)(對每片數(shù)據(jù)進(jìn)行)犀忱,復(fù)制證明(每個節(jié)點(diǎn)周期性進(jìn)行),數(shù)據(jù)還原(當(dāng)有檢索的時候進(jìn)行)扶关,挑戰(zhàn)隨機(jī)數(shù)生成(需要驗證時進(jìn)行)阴汇,復(fù)制證明,復(fù)制驗證节槐。

理論上講搀庶,就是對應(yīng)以下7個步驟:

  1. PoRep.Setup(λ,T) → pp :初始化階段,每個節(jié)點(diǎn)執(zhí)行铜异,產(chǎn)生公共參數(shù)pp(每個節(jié)點(diǎn)一樣)哥倔,security parameter λ, time parameter T (挑戰(zhàn)響應(yīng)時間)
  2. PoRep.Preproc(sk, D) → D ? , τD :預(yù)處理過程,節(jié)點(diǎn)自己完成熙掺。sk, 秘鑰未斑,D要處理的數(shù)據(jù);產(chǎn)生币绩,處理后的數(shù)據(jù)D ? 和數(shù)據(jù)標(biāo)識τD :數(shù)據(jù)標(biāo)識需要發(fā)送給驗證方蜡秽,也即網(wǎng)絡(luò)。
  3. PoRep.Replicate(id, τD , D ? ) → R, aux :產(chǎn)生復(fù)制數(shù)據(jù)缆镣。id為復(fù)制數(shù)據(jù)序號芽突,在節(jié)點(diǎn)上執(zhí)行,產(chǎn)生復(fù)制數(shù)據(jù)R董瞻,aux是附加信息寞蚌,在做證明和驗證的時候要用到
  4. PoRep.Extract(pp, id, R) → D ? :從復(fù)制數(shù)據(jù)還原成原數(shù)據(jù)(預(yù)處理過的原數(shù)據(jù))
  5. PoRep.Prove(R, aux, id, r) → π :復(fù)制證明,輸入分別為钠糊,復(fù)制數(shù)據(jù)及其附加信息挟秤,序號,加上挑戰(zhàn)信息(一個由驗證者產(chǎn)生的隨機(jī)數(shù))抄伍,生成證明 π
  6. PoRep.Poll(aux) → r :產(chǎn)生挑戰(zhàn)信息艘刚,輸入:復(fù)制數(shù)據(jù)的附加信息。
  7. PoRep.Verify(id, τD, r, aux, π) → {0,1} :驗證證明是否有效截珍,輸入包括:復(fù)制數(shù)據(jù)序號攀甚,原數(shù)據(jù)標(biāo)識,挑戰(zhàn)隨機(jī)數(shù)岗喉,復(fù)制附加信息秋度,驗證信息。所有這些都需要傳送給網(wǎng)絡(luò)進(jìn)行驗證钱床。驗證只有通過或不通過兩種狀態(tài)荚斯。

注意:這里似乎并沒有提到時空證明,其實,時空證明包含著復(fù)制證明和驗證之中鲸拥。這是因為系統(tǒng)周期性地發(fā)送挑戰(zhàn)信息給每個節(jié)點(diǎn)拐格,而每個節(jié)點(diǎn)都需要證明在一定的期間之內(nèi)能夠完成數(shù)據(jù)存儲的驗證,通過持續(xù)的證明和驗證刑赶,就完成了時空證明捏浊。

4. 如何防攻擊

要真正做到存儲提供者不能欺騙,設(shè)計出證明和驗證算法并不特別難撞叨。真正難的是金踪,在一個去中心化的世界里這個算法也有效。這里先不說任意人驗證和數(shù)據(jù)擁有者驗證難度上的天壤之別牵敷。單說胡岔,在去中心化的世界里,其實沒有絕對的防止欺騙或攻擊的手段枷餐。

以大家都熟知的比特幣為例靶瘸,為防止雙花(對網(wǎng)絡(luò)的攻擊),PoW提高了其難度毛肋,但不能抵御51%攻擊怨咪。也就是說,機(jī)制的設(shè)計是讓攻擊者付出極高的成本润匙,太不劃算而不去做诗眨。

Filecoin的存儲證明也是一樣,沒有絕對的安全孕讳,所設(shè)計的算法只是提高欺騙(攻擊)的成本匠楚。那Filecoin存儲證明的一個基本原則就是:讓欺騙者付出比誠實者高得多的成本,那還不如做一個誠實節(jié)點(diǎn)厂财,賺更多的錢芋簿。根據(jù)前文所述,欺騙者的一個主要手段就是在沒有存儲數(shù)據(jù)的情況謊報存儲而獲取利益璃饱。存儲證明不能避免這種情況發(fā)生与斤。但是整個協(xié)議的設(shè)計是:上節(jié)的7個步驟中的第3步(生成復(fù)制數(shù)據(jù))比較復(fù)雜,需要較長的時間和運(yùn)算帜平,而第5步要求很快。那么當(dāng)一個存儲提供方梅鹦,在沒有保存第3步產(chǎn)生的數(shù)據(jù)的情況下裆甩,要證明自己(第5步),就必須臨時做第3步齐唆,者需要消耗大量的計算嗤栓,需要非常高的系統(tǒng)配置才來得及,否則就會超時被判存儲證明失敗。去大大提高系統(tǒng)的配置茉帅,還不如加一點(diǎn)存儲老老實實做簡單得多叨叙。

作弊者需要首先seal,如果在規(guī)定的時間完成堪澎,則需要極高的成本

5. Filecoin 存儲證明的實現(xiàn)

Filecoin 所有證明的真正實現(xiàn)擂错,都是在 rust-fil-proofs 項目中用 rust 語言編寫的。采用 rust 的一個重要原因是 rust 具有與 c/c++ 相當(dāng)?shù)母咝杂8颍瑫r其語言設(shè)計又大大提高了安全性钮呀,在內(nèi)存分配和管理方面強(qiáng)大得多。

rust-fil-proofs 代碼請參見:https://github.com/filecoin-project/rust-fil-proofs. 其與Filecoin證明相關(guān)的 API 定義在 filecoin-proofs/src/api/ 目錄之下昨凡。其中:

驗證相關(guān)的接口爽醋,就定義在 filecoin-proofs/src/api/ 目錄中;而與復(fù)制證明相關(guān)的接口便脊,則定義在 filecoin-proofs/src/api/sector_builder/helper/ 目錄中蚂四,這些接口包括:

  • add_piece: 往一個sector 里面填充內(nèi)容
  • seal: 封印,即通過密碼運(yùn)算產(chǎn)生一個可證明的復(fù)制哪痰,當(dāng)產(chǎn)生之后遂赠,原數(shù)據(jù)可刪除
  • retrieve_piece: 獲取用戶數(shù)據(jù),包括unseal

rust-fil-proofs 是一個獨(dú)立的項目妒御,F(xiàn)ilecoin 的Go語言實現(xiàn)(目前唯一的一種實現(xiàn))通過 CGo 來調(diào)用 rust-fil-proofs函數(shù)解愤。其中接口定義在 https://github.com/filecoin-project/go-filecoin/blob/master/proofs/sectorbuilder/interface.go;

更多信息,參見rust-fil-proofs Readme文件乎莉,以下列出了與Filecoin API相關(guān)部分送讲。


參考

胡飛瞳
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惋啃,隨后出現(xiàn)的幾起案子哼鬓,更是在濱河造成了極大的恐慌,老刑警劉巖边灭,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件异希,死亡現(xiàn)場離奇詭異,居然都是意外死亡绒瘦,警方通過查閱死者的電腦和手機(jī)称簿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惰帽,“玉大人憨降,你說我怎么就攤上這事「眯铮” “怎么了授药?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵士嚎,是天一觀的道長。 經(jīng)常有香客問我悔叽,道長莱衩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任娇澎,我火速辦了婚禮笨蚁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘九火。我一直安慰自己赚窃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布岔激。 她就那樣靜靜地躺著勒极,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虑鼎。 梳的紋絲不亂的頭發(fā)上辱匿,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音炫彩,去河邊找鬼匾七。 笑死,一個胖子當(dāng)著我的面吹牛江兢,可吹牛的內(nèi)容都是我干的昨忆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼杉允,長吁一口氣:“原來是場噩夢啊……” “哼邑贴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叔磷,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤拢驾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后改基,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體繁疤,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年秕狰,在試婚紗的時候發(fā)現(xiàn)自己被綠了稠腊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸣哀,死狀恐怖架忌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诺舔,我是刑警寧澤鳖昌,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站低飒,受9級特大地震影響许昨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜褥赊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一糕档、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拌喉,春花似錦速那、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至田藐,卻和暖如春荔烧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汽久。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工鹤竭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人景醇。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓臀稚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親三痰。 傳聞我的和親對象是個殘疾皇子吧寺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容