當前位置:
首頁 > 最新 > Ouroboros協議

Ouroboros協議

~~~~~以下大部分為翻譯稿~~~~~

2.模型

時間、時槽和同步。時間分割為離散的時間單元,稱為時槽。每個時槽至多與賬本的一個區塊相關【一個時槽對應1或者0個區塊】。所有參與者有一個大致同步的時鐘,可以識別當前時槽【這是一個同步方面的要求,可以稱為時槽共識】。這樣參與者們可以執行一個分布的協議共同的把一個區塊分配給當前時槽。我們用sl_r表示一個時槽,r in 表示時槽的指針,「假設」與每個時槽對應的真實時間窗口具有以下屬性:

1)一個公知單增函數把當前時間作為輸入可以確定當前時槽;

2)每一個參與者都可以訪問當前時間。不同參與者的本地時間之間的差值與時槽所表示的時間長度相比是可忽略的;

3)一個時槽所表示的時間窗長度應該足夠長以確保誠實參與者在時間窗開始的時候發出的任意消息可以被任意其它的誠實參與者在時間窗結束之前接收到,即使不同參與者本地時鐘之間存在差異,這一條件也應當滿足。特別的,儘管存在各種各樣的網路延遲,總的傳輸時間也不應該超過時槽窗口。【事實上,這個假設直接把eclipse攻擊排除在模型之外了】

交易賬本屬性。如果協議pi維護的賬本可以分割為分配到不同時槽的區塊,並進而決定交易寫入賬本的順序,我們就稱協議pi實現了一個可靠的交易賬本。【核心就是時間和順序呀!】賬本應該具有以下兩個屬性:

1)持久性。一旦系統中的一個節點宣告一個交易tx是穩定的,其它節點在被詢問時,要麼報告tx在賬本中的相同位置,要麼不會報告任何與tx衝突的交易是穩定的。這裡,穩定性是一個用安全參數k作為輸入參數的謂詞,再具體些,一個交易是穩定的當且僅當該交易在一個區塊中,該區塊比賬本中的k個區塊深度大。

2)活性。如果系統中所有的誠實節點都嘗試包含一個特定的交易,那麼經過u個時槽的時間後,所有節點,在被詢問並且誠實回答的條件下,會報告該交易是穩定的。其中,u個時槽被稱為交易確認時間。

【活性直白的講就是能夠在有攻擊者存在的條件下向賬本寫入新的交易;持久性直白的講就是寫入的交易是不會變的。不會變是說記錄交易的時間不變,交易之間的順序不變】

在文獻[26,35]表明上述的持久性和活性屬性可以用以下的三個基本屬性保證,條件是協議pi維護的賬本使用了區塊鏈的數據結構。

1)共同前綴(CP);使用了參數k in N。假設兩個誠實的參與者在時槽sl_1和sl_2的開始時刻擁有的鏈分別是C_1和C_2,那麼CP屬性要求C_1^lceil preceq C_2,其中C_1^lceil表示從C_1中移除最後k的區塊所得的鏈,preceq代表前綴關係。【即C_1去掉k個塊後是C_2的前綴】

2)鏈質量(CQ);使用了參數mu in (0,1]和l in N。考慮在一輪的起始時刻一個誠實的參與者擁有的鏈中的任意l長的一部分,CQ屬性要求這一部分中攻擊者形成的區塊最多佔比是1-mu。【也就是誠實的參與者生成的區塊至少有l*mu塊】。mu被稱為鏈質量係數。

3)鏈增長(CG);使用了參數tao in (0,1]和s in N。考慮兩個誠實的參與者在時槽sl_1和sl_2的開始時刻擁有的兩個鏈C_1和C_2,其中sl_2時槽比sl_1時槽超前至少s個時槽。那麼CG屬性要求len(C_2)-len(C_1)>tao * s。tao被稱為速度係數。

安全模型。我們使用符號VIEW_^(lambda)表示參與者P在和攻擊者A執行協議pi之後的視圖,所在環境為Z,安全參數為lambda,使用的理想函數是F。類似的,我們使用符號EXEC_^(lambda)表示環境Z的輸出。

這裡定義的理想函數F有多個功能。下面首先定義協議中使用的「擴散」和「密鑰和交易」功能,表示為F_

擴散功能。擴散功能維護一個輸入字元串,用於每個參數者U_i。一個參與者激活以後,允許在任意時刻提取它的輸入字元串。人們可以把這個功能想像成一個郵箱。另外,參與者可以要求該功能擴散一個消息。這時,這個消息會被附加到每個參與者的輸入字元串那裡。這個功能維護輪數(時槽),所有的參與者在一輪中允許擴散一次。輪數不會增長,除非所有的參與者都擴散了一個消息。攻擊者激活後,也可以與該函數交互,允許讀取所有的收件箱和所有的擴散請求,可以向收件箱按照任意順序遞交消息。在一輪結束的時候,該函數確保所有的收件箱包含所有被擴散的消息(但是收件箱中消息的次序和請求擴散的次序不一定相同)。當前的時槽指針也是任意參與者任何時間都可以獲取的。如果一個權益持有人在一個特定的時槽不提取寫給它的輸入字元串的消息,消息會被衝掉。

密鑰和交易功能。密鑰註冊函數用n個用戶,U_1,ldots,U_n和它們各自的權益s_1,ldots,s_n初始化。給定一次初始化,該函數會諮詢攻擊者,接收可以為空的一組消息(Corrupt, U),然後把攻擊者腐化的用戶標記出來。對於沒有註冊公鑰的腐化用戶,該函數允許攻擊者設定這些用戶的公鑰;對於誠實的用戶,該函數會為每個用戶生成並記錄一對公私鑰。攻擊者的公鑰和該函數生成的公私鑰都用於同一套數字簽名演算法。腐化用戶的公鑰也會標記出來。之後,下列動作按照任意順序出現:

(1)用戶請求提取它的公私鑰,於是這個函數返回該用戶的公私鑰給用戶;(2)用戶請求完整的公鑰目錄,於是這個函數返回完整的公鑰目錄給用戶;(3)一個新用戶要求被創建,來自環境Z的一個消息(Create,U,C)給該函數,該函數會按照初始化的過程創建該用戶,也就是說,該函數首先詢問攻擊者是否腐化這個用戶,然後設計這個用戶的公鑰以及在未腐化情況下的私鑰。之後把C作為初始狀態存儲下來。該函數在執行成功後向環境返回公鑰。

(4)一個老用戶要求被腐化,攻擊者向該函數發送消息(Corrupt, U)。用戶必須要在腐化請求提出之後的D個時槽才可以被腐化。特別的,在一個腐化請求註冊到函數中以後,該用戶的私鑰在D個時槽之後釋放,D個時槽是根據擴散模塊維護的輪計數器計算的。

我們假設協議執行時的理想函數是包含上述兩個功能的,同時也包含下面解釋的一些功能。注意到腐化的權益人U會把它的全部狀態交給A,從那時起,攻擊者在U被激活的時候就被激活。除了F對攻擊者的限制外,攻擊者對權益人的腐化是在Z的允許下進行的,是通過Z運行協議完成的。這種允許具體體現為消息

(Corrupt,U),該消息由環境提供給攻擊者。總的來說,關於激活,我們有一下規則:

(1)在每一個時槽sl_j,環境Z允許激活任意權益人子集。這個子集中的任何一個都可能會產生消息,之後消息被轉發給其它權益人。

(2)在每一個時槽sl_j,攻擊者至少作為最後一個實體會被激活,在腐化實體被激活時也會被激活。

在上述模型之下,很難建立協議的任何安全屬性(攻擊者可以更改消息的順序,可以任意腐化用戶)。下面對環境進行約束,以有可能定義安全性。

對環境的約束。環境,負責在每一輪運行時激活誠實的實體,具有以下約束:

(1)在每一個時槽,至少有一個激活的誠實實體。

(2)設置有參數k in Z限制一個誠實的權益人最大的不在線時槽數。在一個誠實權益人重新在線時,它的初始化鏈C應該與在前一個時槽中激活的誠實實體的鏈相同,該初始化鏈由環境設置。

(3)在每一個時槽sl_r,對每一個激活的權益人U_j,存在一個公鑰集合S_j(r)和權益對(vk_i,s_i) in ^* times N, for j=1,...,n_r,其中n_r是在那個時槽之前加入的用戶數量,用於表示在U_j看來的那些激活的參與者。【意思是對每一個權益人而言,在一個時槽內,有一些激活的權益人和它們的公鑰和權益值】如果某個權益人已經被腐化了,它的公鑰就被標記為腐化的。我們希望攻擊者只有少於50%的相對權益,如果在所有的S_j(r)中,腐化的公鑰所持有的總權益除以Sum_i(s_i)小於50%.【大家都覺得攻擊者權益小於50%,才認為小於50%】。如果這一希望破滅了,那麼這次運行中事件Bad^就發生了。【注意這裡談的是對環境的約束,所以這一條是說環境不要太壞了,讓攻擊者腐化的權益人數量需要限制】

我們知道上述離線限制是有爭議的。我們的協議也能夠容忍更長時間的不在線行為。但是為了簡單,我們依然使用上述限制。另外,在後續的證明中,當我們說一個屬性Q在所有運行中以較高概率成立時,我們暗含的是在說Q OR Bad^在所有運行中以較高概率成立。這意味著我們排除了環境和攻擊者以不可忽略概率觸發Bad^事件。

4. 協議:靜態權益

4.1基本概念和協議描述

在靜態權益的情況,我們假設固定的n個權益人U_1,...U_n通過協議交互。在協議開始之前,權益人U_i擁有s_i的權益。對每一個U_i,有一對驗證和簽名密鑰(vk_i,sk_i)用於一個定義良好的簽名體制。不失一般性,我們假設驗證密鑰對所有權益人而言是公知的。下面先給出一些基本的定義。

定義4.1(創世塊)。創世塊B_0包含權益人列表,每個權益人用公鑰和權益(vk_1,s_1),...,(vk_n,s_n)以及輔助信息ro表示。

定義4.2(狀態)。狀態是一個字元串st in ^lambda。

定義4.3(區塊)。在時槽sl_i in 生成的區塊B包含當前狀態st in ^lambda,數據d in ^*,時槽編號sl_i和一個簽名delta = Sign_(st, d, sl_i),sk_i是權益人U_i持有的私鑰,該區塊由權益人U_i生成。

定義4.4(區塊鏈)創世塊B_0為首的區塊鏈(或鏈)表示一系列的區塊B_1,...,B_n,每個區塊有一個單獨的時槽對應,時槽單增,B_i的狀態st_i等於H(B_),其中H是一個預定義的抗碰撞函數。鏈的長度len(C) = n是區塊的數目。區塊B_n是鏈的頭部,表示為head(C)。空字元串epsilon看作一個合法的鏈,方便起見,設置head(epsilon) = epsilon。

設C是一個長度為n的鏈,k是任意的非負證書。前面說過C^lceil是把鏈C最右側的k個區塊去掉之後形成的鏈。如果k geq len(C),定義c^lceil = epsilon。同樣的,使用C_1 prefix C_2表示C_1是鏈C_2的前綴。

定義4.5 (世代)一個世代是一個集合,包含R個相鄰的時槽S = 。其中R是這一節分析的協議的一個參數。

定義4.6(攻擊者權益率)假設U_A是攻擊者控制的權益人集合。攻擊者的權益率定義為alpha = frac}^n},【就是攻擊者的權益在總權益中的比重】其中n是權益人的總數,s_i是權益人U_i的權益。

時槽領導者選舉。 對於本節描述的協議,對每一個0

定義4.7(領導者選擇進程)領導者選擇進程,輸入為權益人分布S = {(vk_1,s_1)...(vk_n,s_n)},(D,F)對包含一個分布和一個確定性函數,使得當ro leftarrow D,下式成立,對所有sl_j in ,F(S,ro,sl_j)以概率p_i輸出U_i in ,其中p_i = s_i /Sum_^n,s_i是權益人U_i的權益,稱為權益權重;另外,隨機變數族_^R是獨立的。【特別需要注意的是,如果S,ro確定對每個時槽輸出的領導者是確定的】

我們注意到按照權益的比例抽樣可以比較直接的實現。例如,一個簡單的進程可以這樣執行。設tilde = s_i/Sum_^n。那麼對於每一個i = 1, ..., n-1,假設還沒有領導人選擇出來,這個進程就拋一個有tilde偏的硬幣,如果結果是1,實體U_i就選做這個時槽的領導,進程結束。當我們把這個進程作為一個函數F()實現的時候,必須要提供足夠多的隨機性,使得該進程能夠模擬有偏的擲幣行為。如果我們以lambda的精度實現每一次單獨的拋幣,那麼實現一次領導選舉需要nlceil}rceil隨機比特。當然,使用一個偽隨機數生成器(PRG)的話,我們可以提供一個短的中子字元串,然後用PRG再生成合適的長度。【這種方法簡單粗暴的就是誰有錢誰說了算】

圖1:函數F_^[mode]

F_^[mode]包含了擴散和密鑰/交易功能F_,由初始權益人的公鑰,權益S_0 = {(U_1,s_1),...,(U_n,s_n)},分布D,函數F完成初始化,其中(D,F)是一個領導選舉進程。另外,F_^[mode]還包括參數mode,這個參數決定了簽名驗證的密鑰是如何生成的。當F_^[mode]初始化的時候,如果mode=SIG(相對的,mode = F_),它表示為F_^[SIG](相對的,F_^[F_])。該函數與權益人交互如下:

1)簽名密鑰對生成:F_^[SIG]為權益人U_i,i=1,...,n,生成簽名和驗證密鑰sk_i,vk_i的方法是運行KG(1^kappa)。F_^[F_])為權益人U_i,i=1,...,n,生成(sk_i,vk_i)的方法是詢問另外一個理想函數F_DSIG(在後面圖3),詢問時用(KeyGen,sid_i)做參數,代表U_i詢問(其中sid_i與U_i綁定),之後設置(sk_i=sid_i,vk_i=v_i)(從F_DSIG接收到響應之後)。無論如何,這個功能都是設置S_0^prime={(vk_1,s_1),...,(vk_n,s_n)}【所以就是生成密鑰,跟權益綁定】

2)創世塊生成。在從權益人U_i那裡接收到(genblock_req,U_i)之後,該函數這樣處理。如果ro還沒有設置,該函數選取ro leftarrow D。有ro以後,該函數發送U_i一個向量(genblock,S_0^prime,ro,F)。【就是提供創世塊各家的權益,然後用生成記賬人】

3)簽名和驗證。該函數提供到F_的介面

一個簡單的在F_^[mode]混合模式的協議。我們開始描述一個簡單的PoS類型的區塊鏈協議,考慮在F_^[SIG]混合模式下的靜態權益模型,也就是,創世塊B_0(和後續的時槽領導人)都是由理想函數F_^[SIG]決定的。理想函數F_^[SIG]給權益人提供了一個創世塊,其中包含權益分布,權益的索引密鑰是由一個EUF-CMA安全的簽名體制生成的。當然,在F_^[F_]中是由理想函數F_生成的。這其中的細微差別在描述pi_的理想版本時會用到,這種描述出現在安全證明過程中的hybrid論證中,在4.2節描述。權益人U_1,...,U_n之間交互,並且與理想函數F_^交互,交互協議pi_如圖2所示。

該協議依賴一個maxvalid_S(CC,BC)函數,該函數在給定當前鏈CC和一個網路中可用的有效鏈集合BC之後,可以選擇一個鏈。在靜態的這個協議中,我們使用最簡單的最長鏈規則。定義如下:

maxvalid(CC,BC)函數:從BC AND 中返回最長鏈。如果出現了等長的鏈,有CC就選CC,否則任意選。

圖2 協議pi_

pi_是一個由權益人U_1,...,U_n在F_^[SIG]的協助下在一系列時槽S=上交互完成的,運行如下:

1)初始化。權益人U_i in ,從密鑰註冊介面獲得它的公鑰和私鑰。然後它從擴散介面獲得當前的時槽,如果是sl_1時槽,它就發送(genblock_req,U_i)給理想函數F_^[SIG],獲得響應(genblock,S_0,ro,F),之後U_i設置本地區塊鏈C=B_0=(S_0,ro),並設置初始內部狀態st=H(B_0)。不然,它從密鑰註冊介面獲得初始鏈C,設置本地區塊鏈為C,本地初始內部狀態為st=H(head(C))。【初始化包含了鏈和選領導兩件事情】

2)鏈擴展。對每一個時槽sl_j in ,每一個權益人U_i執行以下步驟:

(a)收集所有通過廣播接收到的有效鏈,設置為集合C,驗證每一個C^prime in C,及其中每一個區塊B^prime = (st^prime, d^prime, sl^prime, delta^prime) in C^prime,滿足Vrf_(delta^prime,(st^prime,d^prime,sl^prime))=1,其中vk^prime是權益人U^prime = F(S_0,ro,sl^prime)的驗證密鑰。U_i計算C^prime = maxvalid(CC,BC),設置C^prime為本地新的鏈,設置狀態st = H(head(C^prime))。

(b)如果U_i是由F(S_0,ro,sl_j)決定的時槽領導者,它生成一個新的區塊B=(st,d,sl_j,delta),其中st是當前狀態,d in ^*是交易數據,delta = Sign_(st,d,sl_j)是對(st, d, sl_j)的簽名。U_i計算C^prime = CC|B,廣播C^prime,設置C^prime為本地新鏈,設置狀態st=H(head(C^prime))。

3.交易生成。給定一個交易模板tx,U_i返回delta=Sign_(tx),如果tx從U_i的視角看與賬本的狀態是一致的。

[簡單來看,對於靜態權益的情況,就是在每一個時槽,先按照錢多少決定誰是領導人,然後生成新區塊,廣播,其它節點更新]

5 動態權益

5.1使用可信的信標

在上一節的靜態版本協議中,我們假設權益在整個執行過程中是靜態的(即一個世代),也就是說在一個給定的世代內,權益的轉移不會影響領導的選舉。現在我們給出一個修改版本的協議pi_,這個協議可以在多個世代執行,每一個世代的領導者選舉進程由上一個世代的特定時間點的權益分布決定,這樣就允許跨世代的權益分布的變化影響領導人選舉進程。與之前相同,我們在混合模式下描述協議,增強理想函數F_^的功能,在所有世代期間,為領導者選舉進程提供隨機和輔助信息。增強的函數稱為F_^。我們接下來討論如何基於F_^實現F_^,並把假設規約到簡單的在一開始選定的共同字元串。

在描述動態權益協議之前,我們先描述一下對F_^的修改,這些修改使得多世代的情況包含進了理想函數。修改後的函數F_^允許權益人在每一個世代詢問領導選舉的數據。這個函數在第一個世代e_1開始前,由每個權益人的初始權益進行初始化。在接下來的世代,前一個世代從第一個時槽開始的R-2k個時槽被考慮,這些時槽中的區塊表明了新的權益分布,這種新的權益分布用於向該函數提供輸入。有效的權益人分布表示為序列S_1,S_2,...,定義如下:S_1是一開始的權益人分布。當j feq 2時,對於時槽{(j-1)R+1,。。。,jR}【即第j個世代】,有效的權益分布S_j由時間戳至多是(j-1)R-2k【(j-2)R+1,...,(j-1)R-2k】的區塊所決定的權益分配。【注意到靜態權益的時候證明了三個基本屬性,其中CP屬性使得上述區塊在所有參與人中是一致的】。該函數定義在圖10中。

圖10 函數F_^

函數F_^包含擴散和密鑰交易函數,在世代e_1開始之前,由初始權益人的公鑰和相應的權益進行初始化,參數為S_0 = {(vk_1,s_1^0),...,(vk_n,s_n^0)},當然分布D和領導選舉函數F也是作為輸入的。此外,該函數如下操作:

1)創世塊生成:在接收到U_i的(genblock_req,U_i)之後,它像F_^[SIG]一樣返迴響應。

2)簽名密鑰對生成。它像F_^[SIG]一樣操作。

3)世代隨機數更新。在接收到權益人U_i發送的(epochrnd_req, U_i, e_j)消息後,如果當前世代j geq 2,F_^這樣操作:如果ro^j還沒有設置,該函數取樣ro^j leftarrow D。然後,該函數返回U_i消息(epochrnd, ro^j)。【簡單講,這個理想函數做的工作就是在每個世代提供足夠的隨機數】

下面我們描述協議pi_,是在pi_的基礎上修改的,相當於在每個世代更新了創世區塊B_0,自然也更新了領導選舉進程。該協議也使用了一個maxvalid函數,類似maxvalid_S靜態版本。新的函數迫使一個實體選擇那些具有共同前綴的鏈。特別的,該函數引入了下列規則,其中使用了一個前綴參數k:

函數 maxvalid(CC,BC)。該函數返回BC AND 集合中的最長鏈,這個鏈沒有從CC開始增長超過k個區塊。如果存在多個選擇,並且CC也是一個選擇,它就返回CC,如果CC不在裡面,他就隨便符合要求的第一個鏈。

【這裡唯一的不同在於要求CC與最長鏈長度不能超過k個區塊,也就是本地鏈不能有k個時槽落後於眾人的鏈。後面作者解釋k個區塊就可以選領導了,如果允許k個區塊都不在線,那麼一個有很高權重的節點可能在k個區塊之前已經被腐化了,那麼這時攻擊者就會獲得優勢。那麼這也意味著在這個POS中,每個權益人都要在線參加共識,否則失敗,所以後面才有代理。如果用戶有權益,不代理,不參與u,對系統是極大威脅。】

協議pi_在圖11中描述,採用了F_^混合模式。

圖11 協議pi_

pi_是一個協議,由一個權益人集合運行,權益人集合 一開始是U_1,...,U_n,這些權益人集合與F_^交互,在L個順序的時槽上運行,時槽表示為S=. pi_運行如下:

1.初始化。 權益人U_i in ,從理想函數F_^的密鑰註冊介面接收到它的公鑰和私鑰.之後,它從擴散介面接收到當前時槽的信息,如果當前時槽是sl_1,U_i就發送(genblock_req,U_i)給理想函數,接收到(genblock,S_0,ro,F)響應。U_i設置本地區塊鏈CC = B_0 = (S_0, ro),設置初始內部狀態st = H(B_0)。如果時槽不是sl_1,U_i從密鑰註冊介面獲得初始鏈C,設置本地區塊為接收到的初始鏈,設置初始的內部狀態st = H(head(C)).

2.鏈擴展。 對每一個時槽sl in S,每一個在線的權益人U_i執行以下操作:

(a) 如果一個新的世代e_j,j geq 2,已經開始了,U_i定義S_j,S_j中權益人的分布符合本地鏈C中時間戳少於jR-2k的最新區塊內權益人的分布情況,並發送(epochrnd_req,U_i,e_j)給F_^,接收到(epochrnd,ro^j)響應【S_j選中領導】

(b)收集所有通過廣播接收到的有效的鏈,形成集合BC,驗證每一個鏈C^prime in BC和每一個C^prime中的區塊B^prime = (st^prime, d^prime, sl^prime, delta^prime) in C^prime,是否能使等式Vrf_(delta^prime,(st^prime,d^prime,sl^prime))=1是否成立,並且vk^prime是權益人U^prime的驗證密鑰,關鍵這個權益人是由理想函數確定的U^prime = F(S_,ro^,sl^prime),其中sl^prime決定了B^prime所在的時槽和所處的世代e_。【這裡明確了共識驗證就是驗證個簽名以及產生簽名的人是否符合規則】U_i計算C^prime = maxvalid(CC,BC),設置C^prime為新的本地鏈並且設置狀態st = H(head(C^prime))。

(c)如果U_i是由理想函數F(S_j,ro^j,sl)決定的當前世代的時槽sl的時槽領導者,它就生成一個新的區塊B = (st, d, sl, delta),其中st 是當前狀態,d in ^*是數據,delta = Sign_(st, d, sl)是關於(st, d, sl)的簽名。U_i計算C^prime = C | B,廣播C^prime,設置C^prime是本地新的鏈,設置狀態st= H(head(C^prime))。

3. 交易生成。與協議pi_相同。【交易生成與靜態權益情況相同】

5.2模擬一個可信的信標

儘管協議pi_處理了多個世代,並且考慮了權益的變化,它依舊依賴理想函數F_^來執行領導人選舉。在本節,我們展示如何設計協議pi_實現這個理想函數,這樣權益人就能夠計算所需的隨機數和額外的在領導人選舉中需要的信息。【基本上前面的協議描述確定了每次選領導人的集合的方法】

我們回憶一下,理想函數F_^和F_^的唯一本質不同在於連續為世代e_2,e_3,...生成隨機串ro^2,ro^3,...的方式。這裡的思想很簡單,協議pi_使用一個擲幣協議產生一個無偏的隨機串,用於定義ro^j,jgeq 2,在初始的隨機字元串和初始的誠實權益人分布的基礎上繼續推動協議運行。然而,注意到攻擊者能夠通過異常終止使得一個簡單的擲幣協議不能成功運行【所以搞了一個(n,t)秘密分享】。因此,我們因此涉及了一個擲幣協議,假設有保障的輸出傳輸。【假設消息可以有效傳輸】

協議pi_在圖13中描述,使用了一個可驗證的秘密分享機制(PVSS)。

圖13:協議pi_

pi_由權益人U_1,...,U_R(U_i,U_j可以是相同的,i,j in )中的一個子集運行,這些權益人是在一個世代e_j中選出來的,世代持續R = 10k個時槽,每一個時槽選擇一個權益人。協議pi運行時具有以下的階段:

1)。承諾階段(4k時槽)當世代e_j開始的時候,對於1 leq i leq R(R表示這是所有的在這個時代被選出來的領導者),權益人U_i取樣一個均勻隨機的字元串u_i和隨機數r_i,用於底層的承諾機制,生成份額sigma_1^i,...,sigma_m^i leftarrow Deal(n, u_i)(領導者承諾並給所有權益人),並使用每一個權益人U_k的公鑰加密每一個份額signma_k^i。最後,U_i提交加密的份額和承諾Com(r_i,u_i)到區塊鏈上。

2)。打開階段(4k時槽)。在4k個時槽之後,對於1 leq i leq R,權益人U_i打開承諾,提交Open(r_i.u_i)到區塊鏈,條件是區塊鏈前4k個時槽所有領導者都執行了秘密分享。否則,U_i結束。

3).恢復階段(2k時槽)在8k個時槽之後,對於領導者U^alpha,如果它沒有參與到打開階段,也就是,它沒有提交打開消息Open(r_alpha,u_alpha)消息在CC^lceil區塊中,那麼,對於1 leq i leq n,U_i提交份額sigma_i^alpha到區塊鏈用於插值。當份額sigma_1^alpha,...,sigma_n^alpha中的大多數都可用時,每一個權益人U_i可以計算Rec(sigma_1^alpha,...,sigma_n^alpha)以恢復u_alpha。

該協議模擬epochrnd_req的過程如下:

給定輸入(genblock_req,U_i,e_j,S_j),權益人使用區塊鏈中承諾的值計算ro^j = SUM_u_l,其中BL是在世代e_中選擇的權益人子集。它返回(genblock,B_0,S_j)其中B_0=(S_j,ro^j)。

10.2性能

在部署40個節點時的性能,時槽5秒,權益均等,平均每秒257個交易。

~~~~~~以上大部分是翻譯稿~~~~pi_修改較多

【至此,這個可證明的POS協議脈絡基本清楚。我們整理如下:首先,在創世塊設置了各個參與人的公鑰,權益,領導人選擇隨機數,參數k等,設置R=10k為一個世代的時槽數。在第一個世代,每個時槽的領導者按照創世塊的設定權益選舉,使用創世塊提供的隨機數,每個選舉出來的領導負責打包區塊;同時在第一個世代的前4k個時槽,這個世代的所有領導者做承諾提供隨機數,中間4k個時槽,所有領導者打開承諾,後面2k個時槽,所有權益人恢復前面8k個時槽中有些領導人承諾了但是沒有打開的隨機數。在第二個世代,使用前面8k個時槽產生的區塊中的交易所決定的權益分布,作為第二個世代的權益分布,使用前面8k個時槽中領導人公布的隨機數作為第二個世代的隨機數,進行第二個世代的領導人選舉;同時各個參與方在第二個世代繼續進行承諾,分享,打開承諾的操作。依次類推。

那麼為什麼這套系統要搞這麼複雜的承諾,分享的方法呢?仔細考慮一下,會發現除了創世塊的隨機數之外,在純粹的賬本這個環節,並沒有引入新的隨機數,因此也就不具備挖礦哈希所帶來的隨機數源,因此不得不依賴領導人提供提供隨機數的方式,而領導人中也有攻擊者存在,所以不得不採取承諾,秘密分享這些方法。代價就是這個賬本的效率還是幾百級別的。】

~~~~~End~~~~~~


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 博說區塊鏈 的精彩文章:

TAG:博說區塊鏈 |