咱們生活的環境充滿了隨機性。一直以來,運氣,機率和命運這些概念都與隨機性牢牢聯繫在一塊兒。全部人類沒法理解或沒法預測的事物每每都被歸類爲隨機事物。從生理上來講,咱們也是沉浸在了隨機海洋中。從雲的運動到粒子和波浪的行爲,隨機性簡直無處不在。算法
然而,儘管人類接觸到了各類各樣的隨機事物,對隨機性很熟悉,但依然難以將它轉化爲計算機可使用的東西。當咱們談論計算機系統中的隨機性時,咱們真正指的是僞隨機性,即儘量模擬出現實世界應有的隨機性,使之近乎於「真正的隨機性」。以密碼學安全僞隨機數生成器爲例,這是一個很是強大的隨機性模擬。安全
隨機數在隱私技術和密碼學中發揮着重要做用。使人驚豔的是,經過生成一個隨機數來對一條消息進行異或運算(XOR),提供了一種簡單但十分強大的加密方案。即便是雙方之間最簡單的私人通訊形式(即雙方提早共享密鑰的對稱加密方案)也要求共享的密鑰是隨機的。若是此共享密鑰不是隨機的,則加密就毫無用處,由於任何知道密鑰生成算法的人均可以肯定密鑰而後解密該條消息。網絡
隨機數的重要性不只體如今安全通訊渠道的創建上,還體如今確認通訊對象上。若是多我的試圖經過有限帶寬的頻道來互相通訊,則能夠利用隨機數來肯定頻道攜帶消息的合理順序。dom
隨機數可以有效幫助團體或計算機達成一致協議或共識。隨機共識協議就是這樣一個例子。本文將探討隨機數在區塊鏈中的做用。異步
區塊鏈就是一個多方嘗試就全局視角的某種更新達成一致(共識)的成功案例。更新一般在一輪內完成,也就是在一個週期性離散時間間隔內。函數
在互聯網上,特定時間段內發送的消息數量是有上限的(即吞吐量),而且發送消息必將花去必定的時間( 即延遲),這都對共識形成了必定的限制。任何區塊鏈共識協議的目標是在上述限制範圍內達成一致協議。在公鏈上有數千個節點參與了區塊鏈的維護,若是每一個節點須要向全部其餘節點發送消息並得到其反饋,那麼網絡的限制會大大增長達成共識的成本。這是由於在一輪時間內經過網絡發送的消息數量太大。所以,爲了確保共識,則須要經過減小在互聯網上發送消息的數量來優化通訊方案。區塊鏈
比特幣達成此協議(中本聰共識)的方式是經過使用 工做證實(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)致使中心化。 所以,在理解區塊鏈的安全性時,探究隨機性在該區塊鏈協議中的角色乃是重中之重!
內容來源:公衆號-以太坊愛好者
原文連接:
www.tokendaily.co/blog/random…
做者: Aparna Krishnan
翻譯&校對: 哲妹 & 阿劍