3

Data Availability Sampling(一):為什麼會需要 DAS?

 9 months ago
source link: https://medium.com/taipei-ethereum-meetup/data-availability-sampling-part-one-why-das-dc17f83355b5
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Recap:為什麼會討論到資料發布的問題?

目前在 Ethereum 生態系中最常討論到資料發布的情境是在討論 L2 的設計的時候:L2 自己也是一條鏈,所以也會有自己的區塊與交易資料,那這些資料要放在哪?因為使用者需要這些資料來確保安全性。

  • 如果是 Rollup,它會將它的交易資料上傳到 L1 例如 Ethereum,把 Ethereum 當作放資料的地方
  • 如果不是 Rollup,那就會把資料放在其他地方,例如由一群被信任的成員來保管,這樣的保管者稱為 Data Availability Committee(DAC)。

更多關於 Rollup 與資料發布的關係可以參考:

但其實不只是 L2,Ethereum 這條鏈本身也會需要面對資料發布的問題,因為輕節點不會像全節點一樣下載完整的區塊資料,所以輕節點需要相信「當一個新的區塊出現時,該區塊的完整資料真的有被發布」。當一個輕節點被誘騙而相信一個「資料不完整的」區塊,這和它被誘騙去相信一個「不合法的」區塊的影響是一樣的 — 它接上的都是一條不被其他人承認的分叉鏈。

1*guF5TLqU5mGYy12FYlFELw.png
全節點不會相信不完整的區塊,但輕節點會相信

那目前 Ethereum 的輕節點是相信誰來確保一個新的區塊的資料有被完整發布?答案是「驗證者(Validator)們」。當輕節點收到一個新的區塊,它不會下載完整區塊資料,但它會看有多少驗證者投票給這個區塊。當有足夠多的驗證者投票給這個區塊,它就會相信這個區塊的完整資料有確實被發布。這是屬於 Honest Majority 的假設,也就是相信大多數的驗證者是好人。

1*bHaKwik3dGrPeooyIEoY0w.png
當足夠多的驗證者對區塊簽名,輕節點就會相信區塊有完整發布

註:目前 Ethereum 輕節點並不是真的採計數十萬個驗證者的投票來計算,因為數量太多、計算太耗資源,而是指派另一批在數量上少得多的 Sync Committee,由裡面的驗證者簽名作為給輕節點的擔保。這算是一個過渡的做法,等待未來更完整成熟的設計取而代之。

Data Availability Sampling

「相信大多數的驗證者是好人」聽起來已經是個合理且不錯的選擇,但如果我們能做得更好呢?如果有一天真的發生大多數的驗證者想聯合起來欺騙我們說有完整區塊資料但其實沒有,不過只需要 p2p 網路中存在少數好人,我們就可以免於上當呢?

這麼棒的能力肯定不會憑空出現,要具備這個能力需要構建出夠穩固的 p2p 網路、有足夠多的使用者,甚至要能在網路層加入隱私的功能。這個能力就是這個系列文的重點 — Data Availability Sampling(DAS)。

在一個具備 DAS 的區塊鏈中,輕節點不會只是被動接收新的區塊資料,而是要共同參與到 DAS 的運作之中:每個輕節點都要針對每一個區塊,到 p2p 網路中去索求該區塊身上的幾段資料並保存這些資料,並且在其他節點索求資料時分享給對方。就像分散式的檔案分享協議 BitTorrent 一樣,網路中的節點們一起保存、共享他們所在乎的資料,而不是仰賴某個中心化伺服器。

1*NuHEsQrHmsypBG1ZNSZSeQ.png
輕節點們一起透過 p2p 網路索求與分享區塊的片段資料

註:理想的情境中,區塊鏈的使用者都會運行輕節點,一起參與到 DAS 的運作中、一起確保安全性,而不是像現在完全相信其他節點。

每個輕節點在它成功拿到它索求的每段資料之前,都不能相信區塊資料已經被完整發布,不過一但索求的每段資料都拿到了,它就可以放心地相信區塊資料已經被完整發布了。但為什麼輕節點明明只拿了片段的資料卻可以放心相信完整的區塊資料有被發布?這是因為網路中的其他輕節點們也會各自保管片段資料,因此在有需要的時候,大家將可以合力藉由彼此的片段資料拼湊出完整的資料,而且 DAS 另一個神奇的能力是:輕節點們合力保存的資料不需要涵蓋完整的區塊資料,輕節點們只要拿到其中 50% 的資料就可以還原出 100% 的資料。

1*KD06E_kFdKfIjJzl4g-caQ.png
輕節點們只要有超過 50% 的片段資料,就能還原出完整的區塊資料

註:不一定是 50%,可能會更高,端看該 DAS 的設定,但一定會小於 100%。

所以在 DAS 中,即便大多數的驗證者都投票給某個區塊,輕節點也不會輕易相信該區塊。輕節點會進行採樣(Sampling),也就是索求該區塊的片段資料,當索求的片段都拿到手後才會相信區塊資料有被完整發布。

Honest Majority -> Honest Minority

相比於目前沒有 DAS 的 Ethereum,輕節點必須仰賴「大多數驗證者是好人」,也就是 Honest Majority 的假設;Ethereum 加入 DAS 後,輕節點仰賴的是只要有「少數的節點是(會採樣並保管資料的)好人」,也就是 Honest Minority 的假設。

註:「少數」指的是需要採樣並保管足以還原出完整資料的輕節點數量相對於網路裡所有(非常多)的輕節點是相對的少數。

機率上的安全性

前面有提到過,當一個輕節點收到它所索求的所有片段資料後,它就會相信區塊資料有被完整發布,而且網路中的輕節點們在有需要的時候可以合力藉由片段資料還原出完整資料,但是…如果產出區塊的人是惡意的,而且它一開始就沒有要釋放出足夠的區塊資料呢?如果它就是針對某個輕節點,並在提供給那個輕節點所需要的片段資料之後就不再提供任何資料呢?

1*ojK7NpqrnvCixn-2mT_38g.png
Alice 成功拿到索求的資料,因此相信區塊資料有被完整發布,最終她將會接上這個被其他節點丟棄的區塊

那這個可憐的輕節點就得乖乖受騙了,而這也是 DAS 的限制與 Trade-off:DAS 提供的「資料有完整發布」的保證是機率上的保證,不是百分之百、斬釘截鐵可以確定的保證,但這仍然好過於得原本得完全相信大多數的驗證者的情況。如果你覺得機率上的保證不夠安全、想要百分之百確認區塊資料到底有沒有完整發布,那很抱歉,你只能自己跑一個全節點把完整區塊資料下載下來。

註:運行輕節點的程式沒辦法知道自己被騙,對程式來說,只要收到所有索求的資料就會相信區塊是有完整發布。使用者只能透過自己的社交渠道來得知某個區塊實際上是沒完整發布的,並趕快指示自己的輕節點將該區塊標記為資料不完整。

網路隱私的重要性

如果產出區塊的人是惡意的且它就想要騙某些輕節點,那很遺憾地,它將能夠騙到那些輕節點。不過這個受騙的數量會有一個上限,畢竟攻擊者也不能釋出太多區塊導致輕節點們真的可以合力還原出完整資料。

這時大家可能在擔心,難道自己的安全性只能建立在「和產出區塊的人無仇」、「攻擊者不知道我是誰所以不會盯上我」嗎?是的,但這也是為什麼前面會提到 DAS 需要網路層的隱私功能,因為如果攻擊者能知道是「誰」在索求片段資料、或知道 A,B,C 這三個片段是「同一個人」在索求的,那它自然就能輕鬆地瞄準目標受害者並提供資料給對方。如果今天網路層具備隱私功能,那攻擊者就沒辦法知道現在到底是誰來索求這個片段資料,自然也就沒辦法讓目標上當受騙,攻擊者的攻擊效率就會大大降低:它完全沒辦法確定是否有騙到受害者,或甚至騙到任何一個輕節點。

1*fBN9r6YB4DiWYTJVESf9Aw.png
如果攻擊者不知道是誰來索求資料,就非常難騙到輕節點

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK