頂會論文講解
參考文檔
- 1、Simple Proofs of Sequential Work------簡單的連續工作證明
- 2、Filecoin: A Decentralized Storage Network
- 3、Filecoin:一種去中心化的存儲網絡
- 4、IPFS - 可快速索引的版本化的點對點文件系統
第一點、題目講解
Simple Proofs of Sequential Work------簡單的連續工作證明
- 2018年歐密會最佳論文,作者:Krzysztof Pietrzak,密碼學家、奧地利科學與技術學院研究員。Bram Cohen,BitTorrent創始人、Chia CEO
- 內容簡介:
- 試圖通過「空間證明」(Proof of Space)來保證比特幣及其他加密貨幣的安全。「空間證明」是Bram Cohen之前提出的一種取代PoW的工作證明方式。
- 報告人 郭永健 李棟
第二點、題目背景
-
工作量證明機制為比特幣的網絡提供了基本的安全性,但是這一驗證機制卻帶來了巨大的資源浪費問題。BitTorrent創始人Bram Cohen在分布式系統領域聲名遠揚,他提出以計算機存儲所有權驗證作為工作量證明的替代方案,旨在結合空間證明與時間證明機制避免浪費問題。
-
雖然工作量證明(proof of work)為比特幣網絡提供了基本的安全性,但毫無疑問,使用其作為驗證機制需要大量的電力。一旦擁有筆記本電腦的外行也可以挖掘區塊,現在的挖礦過程所涉及的充滿專門處理器的倉庫,或多或少無用於除了比特幣挖礦以外的任何目的。
-
即使忽略浪費的問題,電力密集型挖礦也不可避免地導致了該行業的地理分布趨於集中。由於礦工在電力更便宜的地方獲得的回報最大,冰島、中國西部地區及華盛頓州等地區已成為主要的中心地區。
-
為尋找一個能夠激勵與這些特性相反的系統(通用設備、非浪費的工作及低功耗),開發者Bram Cohen提出了計算機存儲所有權驗證作為工作量證明的替代方案。
他提出的“空間證明(proof of space)”,認為這個建議是今天強化比特幣的理念的自然迭代。 -
這一概念需要使用的唯一其他資源就是存儲。所以,結果就證實了空間證明在理論上的可能性,利用空間證明你便能夠分配存儲容量去來做這些事情。在空間證明系統下,礦工將一定量未使用的磁盤空間分配給網絡,成功挖掘區塊的概率與分配的空間量除以網絡總容量成比例。
時間因素
- 增加時間元素能夠避免當空間證明是挖礦的唯一要求(就SpaceMint建議而言)時出現潛在漏洞。
- 如果你只擁有空間證明,那么就存在一個問題:你要讓挖礦不產生任何額外的花費。這就產生了一個固有問題,有些人擁有大量資源,自創建以來就可以不斷重新挖礦——回到起點,創造一個全新的鏈條,然后將所有的獎勵都給自己。
- 為了防止這種情況發生,使用時間證明結合空間證明,特別是從每個挖礦時期之間將流逝一段時間的專用時間服務器派生的證明。
- 盡管這一理念無法徹底消除自創建以來就存在的重新挖掘區塊的能力,但這也意味着攻擊者沒有辦法到達當前區塊鏈。而他認為這一規定均被其他空間證明的建議所遺漏。
第三點、關鍵概念
1、工作量證明(Proof Of Work,簡稱POW)
- 簡單理解就是一份證明,用來確認你做過一定量的工作。工作量證明系統主要特征是客戶端需要做一定難度的工作得出一個結果,驗證方卻很容易通過結果來檢查出客戶端是不是做了相應的工作。這種方案的一個核心特征是不對稱性:工作對於請求方是適中的,對於驗證方則是易於驗證的。
2、“空間證明(proof-of-space)”
- 依賴於磁盤空間而不是計算力作為挖礦的主要資源,創建了一種聲稱能夠比PoW更加生態友好且經濟的替代選擇。這份標題為《以空間證明的應用超越赫爾曼的時間記憶折中》概述了通過使用空間證明(proof-of-space)建立一種對能源需求更少的挖礦流程——比特幣的能源集約型挖礦模式一直遭受很多人的批評,被很多人認為是一種資源浪費。由於能源要求的降低,以及對現有硬件的依賴,這種方式旨在是任何擁有一台計算機的人都能夠進行挖礦。在空間證明體系下,礦工可以將未使用的磁盤空間分配到網絡中,而成功挖到區塊的概率將與礦工分配的磁盤空間與網絡的總能力成比例。
3、比特幣中的工作量證明
- 工作量證明的算法可以大概描述為:在一個時間段同時有多台服務器對這一段時間的交易進行打包,打包完成后連帶區塊Header信息一起經過SHA256算法進行運算。在區塊頭以及獎勵交易coinbase里各有一個變量nonce,如果運算的結果不符合難度要求,那么就調整nonce的值繼續運算。如果有某台服務器率先計算出了符合難度值的區塊,那么它可以廣播這個區塊。其他服務器驗證沒問題后就可以添加到現有區塊鏈上,然后大家再一起競爭下一個區塊。這個過程也稱為挖礦。
- 比特幣網絡中任何一個節點,如果想生成一個新的區塊並寫入區塊鏈,必須解出比特幣網絡出的工作量證明的迷題。這道題關鍵的三個要素是工作量證明函數、區塊及難度值。工作量證明函數是這道題的計算方法,區塊決定了這道題的輸入數據,難度值決定了這道題的所需要的計算量。
3.1.1工作量證明函數
比特幣系統中使用的工作量證明函正是SHA256。
3.1.2 區塊
比特幣的區塊由區塊頭及該區塊所包含的交易列表組成。區塊頭的大小為80字節,由4字節的版本號、32字節的上一個區塊的散列值、32字節的Merkle Root Hash、4字節的時間綴(當前時間)、4字節的當前難度值、4字節的隨機數組成。區塊包含的交易列表則附加在區塊頭后面,其中的第一筆交易是coinbase交易,這是一筆為了讓礦工獲得獎勵及手續費的特殊交易。
區塊的大致結構如圖所示:
擁有80字節固定長度的區塊頭,就是用於比特幣工作量證明的輸入字符串。因此,為了使區塊頭能體現區塊所包含的所有交易,在區塊的構造過程中,需要將該區塊要包含的交易列表,通過Merkle Tree算法生成Merkle Root Hash,並以此作為交易列表的摘要存到區塊頭中。其中Merkle Tree的算法圖解如下:
3.1.3難度值
- 難度值(difficulty)是礦工們在挖礦時候的重要參考指標,它決定了礦工大約需要經過多少次哈希運算才能產生一個合法的區塊。比特幣的區塊大約每10分鍾生成一個,如果要在不同的全網算力條件下,新區塊的產生保持都基本這個速率,難度值必須根據全網算力的變化進行調整。簡單地說,難度值被設定在無論挖礦能力如何,新區塊產生速率都保持在10分鍾一個。
- 難度的調整是在每個完整節點中獨立自動發生的。每2016個區塊,所有節點都會按統一的公式自動調整難度,這個公式是由最新2016個區塊的花費時長與期望時長(期望時長為20160分鍾即兩周,是按每10分鍾一個區塊的產生速率計算出的總時長)比較得出的,根據實際時長與期望時長的比值,進行相應調整(或變難或變易)。也就是說,如果區塊產生的速率比10分鍾快則增加難度,比10分鍾慢則降低難度。
- 這個公式可以總結為如下形式:
- 新難度值 = 舊難度值 * ( 過去2016個區塊花費時長 / 20160 分鍾 )
- 工作量證明需要有一個目標值。比特幣工作量證明的目標值(Target)的計算公式如下:
- 目標值 = 最大目標值 / 難度值
- 其中最大目標值為一個恆定值:
- 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
- 目標值的大小與難度值成反比。比特幣工作量證明的達成就是礦工計算出來的區塊哈希值必須小於目標值。
- 我們也可以簡單理解成,比特幣工作量證明的過程,就是通過不停的變換區塊頭(即嘗試不同的nouce值)作為輸入進行SHA256哈希運算,找出一個特定格式哈希值的過程(即要求有一定數量的前導0)。而要求的前導0的個數越多,代表難度越大。
3.3.4 工作量證明的過程
我們可以把比特幣礦工解這道工作量證明迷題的步驟大致歸納如下:
- 1、生成Coinbase交易,並與其他所有准備打包進區塊的交易組成交易列表,通過Merkle Tree算法生成Merkle Root Hash
- 2、把Merkle Root Hash及其他相關字段組裝成區塊頭,將區塊頭的80字節數據(Block Header)作為工作量證明的輸入
- 3、不停的變更區塊頭中的隨機數即nonce的數值,並對每次變更后的的區塊頭做雙重SHA256運算(即SHA256(SHA256(Block_Header))),將結果值與當前網絡的目標值做對比,如果小於目標值,則解題成功,工作量證明完成。
該過程可以用下圖表示:
3.1.5 計算量分析
- Hash值是由數字和大小寫字母構成的字符串,每一位有62種可能性(可能為26個大寫字母、26個小寫字母,10個數字中任一個),假設任何一個字符出現的概率是均等的,那么第一位為0的概率是1/62(其他位出現什么字符先不管),理論上需要嘗試62次Hash運算才會出現一次第一位為0的情況,如果前兩2位為0,就得嘗試62的平方次Hash運算,以n個0開頭就需要嘗試62的n次方次運算。
3.1.6. 總結
- 比特幣的工作量證明,就是我們俗稱“挖礦”所做的主要工作。理解工作量證明機制,將為我們進一步理解比特幣區塊鏈的共識機制奠定基礎。
第四點、POSW
Publicly verifiable proofs of sequential work---公開可驗證的公作證明
隨機預言機(random oracle,簡稱RO)。在密碼學里面,隨機預言是一個預言(簡單說像是理論的黑箱),對任何輸入都回傳一個真正均勻隨機的輸出(請參考離散型均勻分布),不過對相同的輸入,該預言每次都會回傳一模一樣的輸出。因為預言機實際上起到的是一個黑匣子的作用,中間是存在一個固定的算法的,這個算法相當復雜且是保密的,因此相同的輸入值在經過了這個算法的運算之后輸出的是相同的輸出值,就像數學上一個確定的函數,相同的數值代入運算幾次都會得到同樣的結果一樣。預言機存在的目的是為了讓你無法知道自己的輸入能得到什么樣的結果,如果你給出兩個輸入,預言機同時給定兩個輸出的話,你不會知道這兩個輸出分別對應的是哪個輸入。
符號O(x)指RO對於輸入x的輸出, L代表O(x)的長度。(L是安全參數n的函數)
- 1.RO一開始維護一張空表,表有兩列,一列是輸入,一列是輸出
- 2.如果訪問者第一次的輸入為x, 則RO均勻隨機從中選一個值O(x), 把x記錄在表里。
- 3.對於第二個以及之后的訪問y,如果y沒有在輸入這一列出現,則RO均勻隨機從選出O(y), 反之,即y出現過,則把輸出這一列中,y對應的O(y)再次輸出。
- 這也就是“真正均勻隨機”和“對重復值輸出相同”的意思。
- N:時間參數 ,即 PoSW(χ,N) ,在收到w位的x 聲明后N時間以及過去,計算得到φ。
- t是一個統計安全參數,較大的t的穩健性越好
- w是哈希函數的位數
- 公用輸入P 和 V 獲得相同的輸入兩個統計安全參數w, t 和時間參數N 。所有各方都可以訪問隨機 oracle H : {0,1}∗ → {0,1}w.
- 語句V 隨機抽樣χ ← {0,1}w 並將其發送到 P.
- 計算 PoSW P 計算 (理想情況下, 使N查詢 H 順序) 一個證明 (φ, φP): =PoSWH (χ, N)。P 將φ發送到 V 和本地存儲φP.
- 打開挑戰V 采樣隨機挑戰γ ← {0,1}t·w 並將其發送到 P
- 打開P 計算τ : =打開H (χ、N、φP、γ) 並將其發送到 v.
- 驗證V 計算和輸出驗證H (χ, N, φ, γ, τ) ∈ {接受,拒絕}.
- 我們需要完美正確性: 如果 V 與一個誠實的 P 交互, 那么它將輸出接受以概率1。穩健屬性要求任何潛在的惡意證明人 P , 如果以良好的概率進行 V 接受, 則必須按順序查詢H "幾乎" N次數。即使在每一輪 Pe 都可以並行地在許多輸入中查詢 H, 而誠實 P 只需要使一個小 (在我們的構造1中, 在 [MMV13] 2 中) 每回合查詢數.
- 協議由四個新型組件組成
- 去中心化存儲網絡(Decentralized Storage Network)(DSN)
- 新型的存儲證明
- 可驗證市場
- 有效的工作量證明(Proof-of-Work)
Simple proofs of sequential work ----簡單的連續工作證明
- 主要用於比特幣設計,結合空間證明完成工作證明,作為一個更加環保更加經濟的工作證明方式。
- 優點 提出了一個更簡單,更有效,並取得更好的具體界限的順序工作證明。最重要的是,所需的空間只要logn(使用多一些點的內存就會具有更好的健壯性)
- 改進點:The PoSW,open and verify algorithms
- 一個Merkle DAG,一個無回路有向圖,對象之間的links都是hash加密嵌入在源目標中。這是Git數據結構的一種推廣。
- 1.內容可尋址:所有內容都是被多重hash校驗和來唯一識別的,包括links。
- 2.防止篡改:所有的內容都用它的校驗和來驗證。如果數據被篡改或損壞,會檢測到。
- 3.重復數據刪除:所有的對象都擁有相同的內容並只存儲一次。這對於索引對象非常有用,
總結與問題
-
論文完成了一個連續工作的證明,它比[MMV13]中的原始結構更簡單並且參數更好。 並對[MMV13]論文中提出的三個問題有了解答。
-
1、規划求解的空間復雜性。在我們構建時間戳和時間鎖謎題的時候, 求解器保留 n 個頂點圖的哈希標簽。是否有其他使用 o (N) 存儲的解決方案?或者有任何內在的原因, Ω (N) 存儲是必要的?
- 論文中改進后的方案是空間復雜度以及降低至了O(logn)
-
2、深度穩健圖的必要性。 我們構造的效率和安全性與深度文件圖結構的參數密切相關:較低度的圖給出了更多有效的解,而具有較高魯棒性的圖(在一些頂點之后剩余的最長路徑的長度的下界是 移除)給我們帶來較小對抗優勢的謎題。 一個有趣的開放問題是逆向是否也持有:具有更好參數的時間鎖定謎題還意味着存在具有更好參數的深度 - 穩健圖表?
- 同樣,深度穩健圖也不是必要的。只需要基礎圖就足以滿足要求。
-
3、一個基於RO模型的POSW可以用於在諸如拋硬幣之類的協議中實現公平。
- 這個問題還在研究中。
第五點,理論應用----Filecoin
1、Filecoin 是什么?
- filecoin是分布式網絡存儲系統IPFS的代幣,它的底層是由區塊鏈技術所驅動的。
2、IPFS是什么?
- IPFS是一種分布式的傳輸協議,下一代的可能顛覆HTTP的互聯網傳輸協議。IPFS不是基於這種域名尋址,而是內容尋址。它會從一個網頁的內容計算出一個加密哈希值,這個值直接反應這個網頁的內容。當IPFS被請求一個哈希時,它會使用一個分布式哈希表找到其所在的節點,驗證數據並回傳內容。而如果內容比較大的話,會分片成幾部分再分別加密,需要下載的話可以同時從網站中不同的地方獲取。相比HTTP,只要在IPFS網絡中出現過的內容不用擔心會隨着時間推移因為服務器穩定性等問題而消失。
3、fliecoin與IPFS聯系。
- FileCoin是IPFS上的一個代幣,IPFS是一個點對點的傳輸網絡,每個文件在這個網絡上都有一個唯一的hash指紋。通過filecoin這種代幣來激勵擁有閑置硬盤的用戶,能夠將硬盤貢獻出來,成為IPFS網絡上的一名礦工,來以此獲得filecoin代幣作為回報。在共識算法上,filecoin采用的是proof-of-spacetime(時空證明),時空證明這種全新的共識機制。它帶來的結果是礦工擁有的硬盤容量越大,那么獲取的filecoin的報酬就越多。
4、機制
- Filecoin是一種協議令牌,其區塊鏈運行在一種叫“時空證明”的新型證明機制上,其區塊被存儲數據的礦工所挖。Filecoin協議通過不依賴於單個協調員的獨立存儲提供商組成的網絡提供數據存儲服務和數據檢索服務。其中:
- 1、用戶為數據存儲和檢索支付令牌
- 2、存儲礦工通過提供存儲空間賺取令牌
- 3、檢索礦工通過提供數據服務賺取令牌
5、復制證明與時空證明兩種共識算法
- 在Filecoin協議中,存儲供應商必須讓他們的客戶相信,客戶所付費的數據已經被他們存儲。在實踐中,存儲供應商將生成"存儲證明"(POS)給區塊鏈網絡(或客戶自己)來驗證。在本節中,我們介紹和概述在Filecoin中所使用的“復制證明”(PoRep)和“時空證明”(PoSt)實現方案。
5.1 動機
-
存儲證明(POS)方案類似“數據持有性驗證”(PDP)[2]和“可恢復性證明”(PoR)[3,4]方案。它允許一個將數據外包給服務器(既證明人P)的用戶(既驗證者V)可以反復檢查服務器是否依然存儲數據D。用戶可以用比下載數據還高效的方式來驗證他外包給服務器的數據的完整性。服務器通過對一組隨機數據塊進行采樣和提交小量數據來生成擁有的概率證明作為給用戶的響應協議。
-
PDP和PoR方案只保證了證明人在響應的時候擁有某些數據。在Filecoin中,我們需要更強大的保障能阻止作惡礦工利用不提供存儲卻獲得獎勵的三種類型攻擊:女巫攻擊(Sybil attack)、外包攻擊(outsourcing attacks)、代攻擊(generation attacks)。
-
女巫攻擊:作惡礦工可能通過創建多個女巫身份假裝物理存儲很多副本(從中獲取獎勵),但實際上只存儲一次。
-
外包攻擊:依賴於可以快速從其他存儲提供商獲取數據,作惡礦工可能承諾能存儲比他們實際物理存儲容量更大的數據。
-
代攻擊:作惡礦工可能宣稱要存儲大量的數據,相反的他們使用小程序有效地生成請求。如果這個小程序小於所宣稱要存儲的數據,則作惡礦工在Filecoin獲取區塊獎勵的可能性增加了,因為這是和礦工當前使用量成正比的。
-
5.2 復制證明
- “復制證明”(PoRep)是一個新型的存儲證明。它允許服務器(既證明人P)說服用戶(既驗證者V)一些數據D已被復制到它唯一的專用物理存儲上了。我們的方案是一種交互式協議。當證明人P:(a)承諾存儲某數據D的n個不同的副本(獨立物理副本),然后(b)通過響應協議來說服驗證者V,P確實已經存儲了每個副本。據我們所知PoRep改善了PDP和PoR方案,阻止了女巫攻擊、外包攻擊、代攻擊。
定義5.1
-
PoRep方案使得有效的證明人P能說服驗證者V,數據D的一個P專用的獨立物理副本R已被存儲。PoRep協議其特征是多項式時間算法的元組: (Setup, Prove, Verify)
-
1、PoRep.Setup(1λ, D) → R, SP , SV , 其中SP和SV是P和V的特點方案的設置變量,λ是一個安全參數。PoRep.Setup用來生成副本R,並且給予P和V必要的信息來運行PoRep.Prove 和 PoRep.Verify。一些方案可能要求證明人或者是有互動的第三方去運算PoRep.Setup。
-
2、PoRep.Prove(SP , R, c) → πc,其中c是驗證人V發出的隨機驗證, πc是證明人產生的可以訪問數據D的特定副本R的證明。PoRep.Prove由P(證明人)為V(驗證者)運行生成πc。
-
3、PoRep.Verify(Sv , c, πc) → {0, 1},用來檢測證明是否是正確。PoRep.Verify由V運行和說服V相信P已經存儲了R。
-
5.3 時空證明
-
存儲證明方案允許用戶請求檢查存儲提供商當時是否已經存儲了外包數據。我們如何使用PoS方案來證明數據在一段時間內都已經被存儲了?這個問題的一個自然的答案是要求用戶重復(例如每分鍾)對存儲提供商發送請求。然而每次交互所需要的通信復雜度會成為類似Filecoin這樣的系統的瓶頸,因為存儲提供商被要求提交他們的證明到區塊鏈網絡。
-
為了回答這個問題,我們介紹了新的證明,“時空證明”,它可以讓驗證者檢查存儲提供商是否在一段時間內存儲了他/她的外包數據。這對提供商的直接要求是:
- (1)生成順序的存儲證明(在我們的例子里是“復制證明”)來作為確定時間的一種方法
- (2)組成遞歸執行來生成簡單的證明。
定義5.2
-
(時空證明)Post方案使得有效的證明人P能夠說服一個驗證者V相信P在一段時間內已經存儲了一些數據D。PoSt其特征是多項式時間算法的元組: (Setup, Prove, Verify)
-
1、PoSt.Setup(1λ,D)->Sp,Sv,其中SP和SV是P和V的特點方案的設置變量,λ是一個安全參數。PoSt.Setup用來給予P和V必要的信息來運行PoSt.Prove 和 PoSt.Prove。一些方案可能要求證明人或者是有互動的第三方去運算PoSt.Setup。
-
2、PoSt.Prove(Sp , D, c, t) → πc,其中c是驗證人V發出的隨機驗證, πc是證明人在一段時間內可以訪問數據D的的證明。PoSt.Prove由P(證明人)為V(驗證者)運行生成πc。
-
3、PoSt.Verify(Sv , c, t, πc) → {0, 1},用來檢測證明是否是正確。PoSt.Verify由V運行和說服V相信P在一段時間內已經存儲了R。
-
6、特性
- 1、實現完整性 數據碎片以加密哈希命名。一個Put請求后,客戶只需要存儲哈希即可通過Get操作來檢索數據,並可以驗證收到的數據的完整性。
- 2、實現可恢復性 在Put請求中,客戶指定副本因子和代碼期望擦除類型。假設給定的m個存儲礦工存儲數據,可以容忍最多f個故障,則該方式是(f, m)-tolerant存儲。通過在不同的存儲提供商存儲數據,客戶端可以增加恢復的機會,以防存儲礦工下線或者消失。
- 3、實現公開可驗證和可審核性 存儲礦工需要提交其存儲 (πSEAL, πPOST)的證明到區塊鏈。網絡中的任意用戶都可以在不訪問外包數據的情況下驗證這些證明的有效性。另外由於這些證明都是存儲在區塊鏈上的,所以操作痕跡可以隨時審核。
6、未來展望
Filecoin是一個去中心化存儲網絡,它讓雲存儲變成一個算法市場。隨着雲盤服務商的紛紛停擺,我們看到,中心化的雲存儲是多么的不靠譜。去中心化的存儲是一個非常大的市場,也是剛需,如果能夠很好的解決帶寬的問題,它的價值將是巨大的,但同時這是一個新項目,還有很長的路要走。
心得體會
第一次接觸到頂會的文章,而且還是密碼學的文章,理解英文論文並要理解着實下了一番功夫,但總體收獲還是很大的,不僅僅是知識的提升,閱讀論文方法和能力都得到了很大提升。
區塊鏈是科研的很好的方向,無論是算法研究還是應用研究都是具有很廣闊的前景。在自己研二的科研生涯中,准備從區塊鏈的應用着手對區塊鏈進一步的深入研究。