1. 程式人生 > >區塊鏈100講:區塊鏈中的隨機數

區塊鏈100講:區塊鏈中的隨機數

image

我們生活的環境充滿了隨機性。一直以來,運氣,概率和命運這些概念都與隨機性緊緊聯絡在一起。所有人類無法理解或無法預測的事物往往都被歸類為隨機事物。從生理上來說,我們也是沉浸在了隨機海洋中。從雲的運動到粒子和波浪的行為,隨機性簡直無處不在。

然而,儘管人類接觸到了各種各樣的隨機事物,對隨機性很熟悉,但依然難以將它轉化為計算機可以使用的東西。當我們談論計算機系統中的隨機性時,我們真正指的是偽隨機性,即儘可能模擬出現實世界應有的隨機性,使之近乎於“真正的隨機性”。以密碼學安全偽隨機數生成器為例,這是一個非常強大的隨機性模擬。

隨機數在隱私技術和密碼學中發揮著重要作用。令人驚豔的是,通過生成一個隨機數來對一條訊息進行異或運算(XOR),提供了一種簡單但十分強大的加密方案。即使是雙方之間最簡單的私人通訊形式(即雙方提前共享金鑰的對稱加密方案)也要求共享的金鑰是隨機的。如果此共享金鑰不是隨機的,則加密就毫無用處,因為任何知道金鑰生成演算法的人都可以確定金鑰然後解密該條訊息。

隨機數的重要性不僅體現在安全通訊渠道的建立上,還體現在確認通訊物件上。如果多個人試圖通過有限頻寬的頻道來互相通訊,則可以利用隨機數來確定頻道攜帶訊息的合理順序。

隨機數能夠有效幫助團體或計算機達成一致協議或共識。隨機共識協議就是這樣一個例子。本文將探討隨機數在區塊鏈中的作用。

區塊鏈就是一個多方嘗試就全域性視角的某種更新達成一致(共識)的成功案例。更新通常在一輪內完成,也就是在一個週期性離散時間間隔內。

在網際網路上,特定時間段內傳送的訊息數量是有上限的(即吞吐量),並且傳送訊息必將花去一定的時間( 即延遲),這都對共識造成了一定的限制。任何區塊鏈共識協議的目標是在上述限制範圍內達成一致協議

。在公鏈上有數千個節點參與了區塊鏈的維護,如果每個節點需要向所有其他節點發送訊息並獲得其反饋,那麼網路的限制會大大增加達成共識的成本。這是因為在一輪時間內通過網路傳送的訊息數量太大。因此,為了確保共識,則需要通過減少在網際網路上傳送訊息的數量來優化通訊方案。

比特幣達成此協議(中本聰共識)的方式是通過使用 工作證明(PoW)作為隨機數源來確定每一輪中哪一個區塊將會被新增到區塊鏈中,從而減少訊息傳遞的費用。因為 PoW 設定的題目在演算法上非常難解決,只有最先算出來的人才能將他們的區塊新增到分類帳中。由於多個人同時解開難題的概率非常低,因此 PoW 可以作為一種限制網路訊息傳遞數量的機制。

理論上,任何試圖取代 PoW 的共識機制都需要找到一種方法來限制網路傳遞訊息的數量。大多數權益證明(PoS)協議用於解決該問題的方法是根據驗證者持有的代幣數量來選出一組驗證者(維護與管理區塊鏈的節點)組成一個小組委員會,然後這組驗證者可以在網路限制內相互通訊並及時達成一致。

當然,為了公平選舉出小組委員會的成員,保證沒有人會提前知道成員的身份,演算法必須能夠融入一些公平、無偏倚的(unbiasable)隨機數源。一旦該組驗證者在下一個區塊上達成了一致,那個區塊就會被廣播給網路中的每一個人。

在 PoS 協議中用於小組委員會選舉的理想隨機數源必須是不可支配的(unbiasable),即沒有人可以隨意改變隨機種子(seed)。為了實現不可支配性,隨機性協議需要確保以下兩點:

  • 隨機函式總會生成一些隨機數;

  • 隨機函式生成的隨機數沒有被操縱

(注意:我們在之後的部落格文章中將會探討 i)與ii) 之間的權衡,以及這種權衡與網路同步模型的關係)

我們在 Mechanism Labs (一個推特號)上分析過的所有小組委員會選舉協議都沒有滿足上面提到的兩點。因此,鑑於上述權衡,區塊鏈共識協議應該使用能不斷產生隨機數的隨機數源,而不是使用僅能一次性產生不可支配的隨機數的隨機數源。因為區塊鏈協議需要確保區塊鏈保持增長、不能讓隨機數源成為瓶頸。即使是偏好一致性的協議,隨機數源也不應該成為區塊鏈停滯的原因。無論如何,隨機數源都應該確保協議能夠專注於應付其他攻擊,比如對驗證者組成的小組委員會實施 DoS 攻擊使得區塊鏈停滯等等。

如果區塊鏈由於隨機函式輸出的隨機數出現了偏差而完全停止執行,那麼社交層就得付出巨大的協調成本來重新啟動區塊鏈。這將要求社群通過外部的社交媒體平臺就區塊鏈實際上是什麼的問題達成一致,而這會是一個非常耗時的討論,此成本可與當初解決 DAO 黑客攻擊的成本相當。社交層的鉅額成本也會動搖社群對區塊鏈協議安全性的信心,但只要偏差非常小並且具備從偏差狀態恢復的機制,那麼幾輪的小偏差對區塊鏈安全性的影響就比較微弱,因為公有區塊鏈協議每一輪給予驗證者的所有協議獎勵是相對較少的。每一輪或每一個時期(每幾輪)進行小組委員會選舉時,隨機函式中的偏差必須非常顯著,驗證者才能以欺騙協議來牟利並降低區塊鏈協議的安全性。

而在另一個領域內,那些用到隨機數的彩票遊戲必須保證隨機數源絕對不被操縱,因為即使出現一點偏差也會完全改變中獎結果。由於中獎者能夠獲得大量的即時獎勵,所以篡改彩票結果帶來的影響是巨大的。因此,這種彩票遊戲偏好於一次性生成不可支配隨機數的函式,即使這意味著隨機函式的輸出有時會停止。

本文將探討基於區塊鏈協議設計的背景下公正無偏的隨機數源的重要性。接下來的文章中,當我們考慮不可篡改的協議時,我們是傾向於不會被中止的協議。

理想的委員會選舉方案 應該滿足 i)不可被支配,ii)只在新一輪開始時顯示隨機種子。隨機函式必須如前文討論的定義那樣做到不可被偏轉。如果隨機數被操控(並存在協議內獎勵分配機制),就會造成不公平的獎勵分配。不恰當的獎勵分配意味著一些人將獲得更豐厚的獎勵。由於只有擁有權益的人才能成為驗證者,並且投票權與驗證者所擁有的權益成正比,那麼不公平的分配將導致區塊鏈最終只掌控在少數驗證者手裡。因此,協議的不可操縱的程度,決定了是否有人可以長期作為驗證者維護部分網路。另一方面,種子在新一輪開始之前提前多久顯示,決定了誰可以首先成為網路的一部分。由此可見,上述兩個屬性將決定區塊鏈的去中心化程度。

由於每一輪(或每一個時期)都會進行小組委員會的選舉,因此從公佈隨機函式輸出的隨機數到那一輪(或那一個時期)開始所需的時間是至關重要的。在此時間範圍內,攻擊者可以利用隨機函式輸出的隨機數得知哪些驗證者獲選。如果此輸出被隱藏,則試圖攻擊區塊鏈協議的攻擊者將無法提前得知獲選的驗證者。此時間範圍的長短決定了協議對攻擊的承受能力。較強的攻擊者,即具有較多計算能力和資源去攻擊網路的人,能夠在短時間內計算出獲選的驗證者。如果攻擊者有足夠的時間,他們會通過執行選舉委員會所用的演算法以及該輪給定的隨機數種子來確定哪些驗證者當選,然後對該輪獲選的驗證者進行拒絕服務(DoS)攻擊,導致空白區塊的產生,令該輪無任何進展。對區塊鏈來說,即使是停止一輪,後果也是毀滅性的。設想一下,如果幾小時內世界上沒有人可以進行任何交易,比特幣會變成什麼樣!因此,有能力抗 DoS 攻擊的節點才應該首先成為驗證者。另外,提前顯示種子也意味著共識協議只能應對較弱的攻擊者,這弱化了區塊鏈的去中心化性質。

基於我們曾在 替代性共識協議的元分析 中剖析的不同區塊鏈協議的使用案例,下面我們會從技術角度詳細介紹各種隨機數的生成機制。

Tendermint

Tendermint 是使用一種確定的迴圈協議方案來選出提議者的;該協議不具備隨機性。提議者是根據投票權和驗證者被選次數的堆排序演算法選出的。攻擊者只能通過新增或刪除權益來干預協議,但這種干預不能立即生效,因為驗證者在系統中移除或者新增權益所需的時間很長。儘管如此,攻擊者就可以有更長的時間提前計劃好如何操縱提議者的選擇。

使用確定性的隨機演算法意味著隨機種子會在遠早於每一輪之前公佈,提議者也能被提前確定。

Algorand

Algorand 的隨機數方案如下:被選為提議者的每一位驗證者 v 使用公式 < seedr, π > ← VRFskv (seedr−1||r) 來計算 r 輪的種子,其中 skv 是驗證者 v 的金鑰,seedr-1 是前一輪的隨機種子。

VRF 是用來證明 r-1 輪中接受的區塊包含了 π 以及 r 輪的種子。如果給定的 VRF 證明未能驗證給定的種子,則每個人計算新一輪的種子 H(seedr−1||r),其中 H 是雜湊函式。這意味著必須提前選好每位驗證者的金鑰,確保他們無法干預隨機種子。

當網路不能很好地同步時,攻擊者完全控制了訊息傳遞連結(校對注:感覺這裡像在說“非同步”假設),因此可以刪除提議的區塊並強制使用者支援空白的區塊,從而計算出未來用於選舉的隨機種子。因此,Algorand 要求 弱同步 假設,即在每個時間長度為 u 的週期中,必須存在時間長度為 s(s < u)的強同步來保證協議的不可操縱性。只要 s 值足夠大,使得在時間段 b 內至少產生一個誠實的區塊,則選擇金鑰 skv' 的攻擊者 v' 就不能操控 r 輪的隨機種子。

只有當一個區塊被提議之後,才會生成一個新的隨機數種子,和一個可用來驗證的公開 VRF 證明。這確保了提議者和隨機種子沒有被提前洩露,同時保證 Algorand 能夠抵禦針對提議者的 DoS 攻擊,即使在節點離線甚至瞬間腐化的模式下都能實現自適應安全。

Dfinity

對於大部分協議,攻擊者通常會中止協議來呼叫回退機制,從而操縱隨機數。但 Dfinity 使用的門限簽名方案(threshold scheme)是不可操縱的,因為選擇閾值的原則就是確保攻擊者無法通過阻止生成 門限簽名 來中止協議(因為隨機數種子是從門限簽名中推匯出來的)。因此閾值 t 必須根據以下公式進行選擇:t∈[f + 1,n - f],其中 f 是攻擊者控制的簽名數,n 是方案中的總簽名數,t 是用於生成隨機數的簽名閾值。選擇該閾值是為了確保攻擊者既無法預測簽名生成的結果,也無法阻止簽名的生成。

需要注意的是,在任何 BLS 方案中,只要攻擊者擁有 50% 以上 的保證金,他們就能夠操控最終的簽名與隨機數。然而,如果一名攻擊者擁有如此大份額的權益,也會出現其它型別的攻擊,這種情況就違反了 Dfinity 協議的基本假設。

一旦誠實的驗證者進入到第 r 輪,隨機種子就會被揭示。雖然從誠實的驗證者進入到新一輪正式開始之間的時間差很小,但這個時間差足以讓具有大量計算資源的攻擊者識別出提議者並對其進行 DoS 攻擊。這就是為什麼 Dfinity 只能應對溫和的攻擊者而無法應對瞬時癱瘓的狀況。

Thunderella

在雜湊函式例項化的隨機數預言機方案中,提議者將依據以下公式來確定:H_nonce(pk,q) < Dp,其中 H 是用作隨機數預言機的雜湊函式,pk 是驗證者的公鑰, q 是給定的迭代時間,nonce 是雜湊函式的熵來源。Nonce 由前一個區塊的提議者選擇。設定難度引數 D_p 是為了在單個迭代時間內,委員會成員被選為提議者的概率為 w。

如果攻擊者提議了一個區塊,她可以操控為下一輪雜湊函式生成熵的 nonce 值,從而影響下一個區塊的提議者的人選。然而,為了降低隨機數方案的可篡改性,在雜湊函式中相同的 nonce值不僅僅用於選擇下一輪的提議者,也會用於選擇接下來 r 個輪次的提議者。這使得攻擊者在計算上很難通過強制改變 nonce 值來讓自己連續成為接下來 r 個輪次的提議者。雖然這種策略僅損失了多項式安全性,但它具有可預測性的弊端(後面也會討論到)。該方案僅能夠應對慢速自適應的攻擊者。

在上述演算法中,當重複使用相同的 nonce 值給雜湊函式喂送種子時,就會導致攻擊者能夠提前預測到誰是提議者。由於在一時期中相同的 nonce 值被重複用作熵,從而導致隨機種子在新一輪開始之前被洩露,使得攻擊者可以對提議者進行腐化或者實施 DoS 攻擊。

Casper FFG

Casper FFG 計劃使用的隨機數方案是基於以下演算法:

一個時期開始時,每個驗證者承諾 H (H (H (..Sv )))),其中 S 是驗證者承諾的種子。 R 賦值為 R 與雜湊函式內原象的異或運算(R := R⊕ Pre-image of the inner layer of hash)。在一輪中,驗證者可以建立或中止一個區塊。

如果在回退機制中沒有生成隨機數,這可能會造成比可預測或可操縱的隨機數更大的問題,因為你將不再需要 1/3 的惡意者來中止協議,1個人就足夠了。

作為當前提議者的驗證者是知道下一輪的隨機種子的。

隨機數是密碼學和區塊鏈的重要部分。不良的隨機數方案會通過以下方式破壞區塊鏈的安全性:i)停止區塊鏈協議;ii)導致中心化。 因此,在理解區塊鏈的安全性時,探究隨機性在該區塊鏈協議中的角色乃是重中之重!

內容來源:公眾號-以太坊愛好者

原文連結: 

https://www.tokendaily.co/blog/randomness-in-blockchains

作者: Aparna Krishnan 

翻譯&校對: 哲妹 & 阿劍

image