尚未解決的區塊鏈分片問題,熱點題材,股票新聞,概念股,主力資金流入

金投資訊

尚未解決的區塊鏈分片問題
2018-12-28

  原文鏈接:https://medium.com/nearprotocol/unsolved-problems-in-blockchain-sharding-2327d6517f43

  區塊鏈分片的核心問題是鏈上的節點無法驗證所有分片中的區塊。因此,每當任一節點需要與特定分片交互時,他們通常無法下載并驗證該分片的整個歷史記錄。

  然而,一個重大的潛在問題出現了:如果不能下載和驗證一個特定的分片的整個歷史記錄,節點如何確定接收到的交易來自于有效區塊。非分片區塊鏈中不存在這樣的問題。

  簡單的應對策略

  我們將首先討論一個簡單的解決方案,這個解決方案在許多協議都提到過,我們將進一步分析這個解決方案如何嘗試解決它想要解決的問題。

  解決數據有效性的簡單方案如下:假設整個系統有數千個驗證器,其中不超過20%是作惡的,或者無效的(例如無法聯機生成一個區塊)。然后,如果我們對約200個驗證器進行采樣,假定超過1/3的節點失敗率為零。

  值得注意的是:1/3是一個重要的門檻。拜占庭共識協議中指出,只要確保少于1/3的節點失敗,無論是作惡還是違反協議的某一條,最后都將達成共識。

  假設誠實的驗證器百分比,如果分片中的驗證器為我們提供了一些區塊,解決方案假定該區塊是有效的,并且驗證器建立在該分片的規范鏈基礎上。他們開始驗證時,驗證器從前一組驗證器中學習規范鏈。通過歸納,整個鏈是有效的,由于任何一組驗證器都有產生分叉,解決方案也確定當前鏈是分片中唯一的鏈。

  如果假設驗證器可能被破壞,上述簡單的解決方案就會不起作用,這是個合理的假設。在含有1000個分片的系統中破壞單個分片比破壞整個系統的成本要低得多。因此,隨著分片數量的減少,協議的安全性相應地減小。為了確定一個區塊的有效性,我們必須確保,在記錄中的任何一個節點,系統中的分片都不存在大多數驗證者串通的情況;但是對于自適應對手,我們無法確保。正如我們在前一部分中所討論的,串通驗證器可以執行兩種基本的作惡行為:創建分支和生成無效的塊。

  惡意分叉可以通過交叉鏈接到信標鏈的區塊來解決,信標鏈通常比分片鏈更具安全性。然而,生成無效的區塊是一個具有挑戰性的問題。

  數據驗證

  如下圖,分片#1已經被攻擊,作惡者挖出了無效塊B。假設區塊B憑空捏造出來1000個token,并記錄在Alice的賬戶上。接著,作惡者在區塊B的基礎上挖出有效區塊C,然后在分片#2發起了跨分片交易,把這1000個token轉到了Bob的賬戶。此事憑空造出來token在分片2上是完全有效的。

  解決上述問題的方案有:

  1.讓分片#2的驗證者檢驗發起這筆交易的那個區塊。但由于區塊C似乎完全有效,因此,此方案不適用于上述示例。

  2.分片#2的驗證者可以大量檢驗發起這筆交易之前的區塊。但是,通常對于接受交易的分片要驗證的N個區塊,惡意驗證者可以在他們創建的無效塊上創建N+1個有效塊。

  比較好的解決方案是將分片按照無向圖進行排列(如下圖),每個分片都連接多個分片,跨分片交易只能在相鄰的兩個分片上進行。(例如,Vlad Zamfir分片本質上就依賴于這個原理)。

  如果要在不相鄰的兩個分片之間進行跨分片交易,這筆交易需要通過多個分片相互驗證。在這個設計里,每個分片的驗證者都要驗證他們的分片以及與他們相鄰的分片上的所有區塊。假設有10個分片,每個分片相鄰4個分片,不需要考慮兩個以上的分片之間的交叉分片通信。

  分片#2不僅驗證自己的鏈,還需要驗證所有相鄰的鏈,包括分片#1。所以,如果分片#1上的惡意分子試圖創建無效塊B,然后在B的基礎上構建區塊C,并發起跨分片交易,分片#2就可以通過驗證分片#1上的所有歷史記錄,識別出無效區塊B。

  雖然現在攻擊一個分片不再是可行的攻擊方法,但是如果攻擊多個分片仍是個問題。下圖中,如果對方成功攻擊了分片#1和分片#2,用無效區塊B生成的“資金”可與分片#3進行一筆跨分片交易。

  分片#3驗證了分片#2上所有的區塊,但是并未驗證分片#1上的區塊記錄,那么仍無法檢測到無效塊B。

  解決這個問題的其中一個主要方案是采用fishermen機制。

  這個方法背后的原理:無論何時,為了關聯信標鏈或是發起分片交易(或是其他原因),鏈之間相互通信區塊頭信息,在一段時間內,任意誠實驗證者都可以提供無效區塊的證明。有各種結構可以非常清楚的證明某個區塊是無效的,接收節點的通信成本要比接收整個區塊的成本小得多。

  使用這種方法,只要有一個節點是誠實的,系統就是安全的。

  但是這種方法有兩個缺陷:

  1.這段驗證的時間需要足夠長,以便讓誠實節點識別挖出的區塊,下載并進行完全驗證。這段驗證時間會極大降低跨分片交易的速度。

  2.會創造出一個新的攻擊向量,惡意的節點可以故意發起大量無效的驗證請求。解決這個問題的方案是讓驗證者在指定的賬戶里存入一些Token,待驗證成功時再返還。這只是部分解決方案,由于惡意的節點向系統發起大量無效的驗證請求帶有無效區塊(例如,防止來自誠實驗證者的有效區塊通過)可能仍然存在,這些攻擊被稱為惡意破壞攻擊。

  針對這兩個問題,目前還沒有很好的解決方案,但是這個方案仍然是解決數據驗證問題的一個主要方法。

  簡潔的非交互知識論證

  解決攻擊多個分片的第二種方法是使用某種密碼結構,允許人們證明正確執行某個計算(例如從一組交易中計算區塊)。例如zk-STARKs和其他一些共識協議,以及一些被廣泛地用于私人支付的共識協議,其中最著名的是ZCash。這種共識協議存在的主要問題是計算速度非常慢。例如:Coda Protocol,使用zk-SNARKs專門證明區塊鏈中的所有區塊都是有效的,每次交易可能需要30秒來進行一筆交易證明(這個數字現在可能更小)。

  有趣的是,證明不需要由可信方來計算,因為不僅需要證明它所構建的計算的有效性,而且需要證明本身的有效性。因此,這種證明的計算可以在一組參與者之間進行劃分,它比執行某些不可信計算更加簡潔。除此之外,它還允許計算zk-SNARK的節點在特定的硬件上運行,而不會降低系統的分布式。

  除了性能外,zk-SNARK的局限性是什么?

  依賴于較少研究過的和較少時間測試的密碼學原語;

  “Toxic waste”是zk-SNARK依賴于一組可信的設置,其中一組人執行一些計算,然后忽略該計算的中間值。如果程序的所有節點都串通并保留中間值,則可以制造假證明;

  系統設計中引入了額外的復雜性算法;

   zk-SNARK僅適用于可能計算的子集,因此,具有圖靈完備智能合約語言的協議將無法使用SNARK來證明鏈的有效性。

  數據的可用性

  我們將要討論的第二個問題是數據的可用性。通常,將特定區塊鏈的節點分為兩類:全節點,下載每個完整區塊并驗證每筆交易的節點,以及僅僅下載區塊頭的輕節點,并使用Merkle校樣來處理他們感興趣的狀態和交易。

  現在,如果大部分主要全節點串通,則它們可以生成有效或無效的區塊,并將其哈希值發送到輕節點,但不透露區塊的全部內容。他們可以通過各種方式從中受益。如下圖所示:

  假設有三個區塊:前者A,由誠實的驗證者生成;當前區塊B,由驗證者串通;下一個區塊C,由誠實的驗證者產生;

  假設你是商家。當前區塊(B)的驗證者從先前的驗證者那接收到區塊A,計算出你接收錢的區塊,并向你發送該區塊頭,其中通過Merkle證明包含你有錢的狀態(或Merkle證明將有效匯款發送給你的有效交易)。確保交易最終確定,你就可以提供服務。

  但是,驗證器永遠不會將區塊B的全部內容分發給任何人。因此,區塊C的誠實驗證器無法檢索該區塊,并且被迫停止系統或構建在區塊A之上,從而剝奪了你作為商家的權利。

  當我們將相同的場景應用于分片時,全節點和輕節點的定義通常適用于每個分片:每個分片中的驗證者下載該分片中的每個區塊并驗證該分片中的每筆交易,但驗證系統中的其他節點,包括那些快照分片鏈狀態進入信標鏈,只需要下載區塊頭。因此,分片中的驗證者實際上是該分片的全節點,而系統中的其他參與者(包括信標鏈)作為輕節點。

  對于我們上述的fisherman方案,誠實的驗證者需要能夠下載與信標鏈交叉鏈接的區塊。如果惡意驗證者交叉鏈接無效區塊頭(或用于啟動交叉分片交易),而從未分發區塊,則誠實的驗證者無法進行驗證。

  監管權證明

  需要迫切解決的問題是一旦區塊發布,是否區塊就具可用性?一個名為公證人的解決方案是讓分片之間公證人輪換的頻次比驗證者高,驗證者的唯一的工作是下載一個區塊,并證明他們能夠下載。與驗證者不同的是,公證人可以更頻繁地輪換,因為他們不需要下載分片的整個狀態。

  這種的方法的問題是,無法證明公證人是否能夠下載該區塊,因此公證人可以選擇始終證明他們能夠下載該區塊而不嘗試檢索它。解決該問題方案是公證員提供一些證據,或者投入一定數量的Token來證明該區塊已被下載。

  糾刪碼技術

  當特定的輕節點接收到一個區塊的哈希值時,為了提高節點對該區塊可用的信心,它可以嘗試下載該區塊的一些隨機片段。這不是一個完整的解決方案,因為除非輕節點共同下載整個區塊,否則惡意區塊生產者可以選擇保留未被任何輕節點下載的區塊的部分,從而導致區塊不可用。

  對此問題的解決方案是使用一種稱為糾刪碼技術的結構,即使只有區塊的某些部分可用,也可以恢復整個區塊:

   Polkadot和以太坊Serenity都圍繞這個想法進行了設計,為輕節點提供了合理地確信區塊可用的方法。這兩種方法都依賴于驗證者,因此可能容易受到惡意攻擊。

  長期可用性和結論

  上述討論的所有解決方案都證明了一個事實,即一旦一個區塊發布,則該區塊立即可用。區塊隨后可能由于各種原因變得不可用,例如:節點脫機、節點故意刪除歷史數據等等。

  一篇值得借鑒的解決方案是Polyshard,即使幾個分片完全丟失了它們的數據,Polyshard使用糾刪碼技術讓跨分片區塊依然可用。不幸的是,他們的解決方案要求所有分片從其他分片那下載所有區塊,合格過程成本高昂。

  由于預計系統中沒有節點能夠驗證所有分片中的所有鏈,因此分片協議的安全性需要以這樣的方式設計:即使某些分片中的某些以前的區塊變得完全不可用,系統也是安全的。

  在設計安全協議時,數據有效性和數據可用性仍然是首先需要關注的問題。

免責申明: 1、本站涉及的內容僅供參考,不作為投資依據,依此操作風險自擔。
2、本站部分內容轉載自網絡,如有侵權請聯系微信 nmw160 刪除。
index.xml index1.xml index2.xml index3.xml index4.xml news.xml ticai.xml

尚未解決的區塊鏈分片問題,熱點題材,股票新聞,概念股,主力資金流入

青海快三规律