古詩詞大全網 - 藝術簽名 - 簡評三個基於VRF的***識算法

簡評三個基於VRF的***識算法

上交所技術公司? 朱立

Algorand、Dfinity和Ouroboros Praos三個***識算法(Dfinity雖然是項目名,這裏用來稱呼其***識算法也應無不妥)近期較受關註,而且都是基於VRF(Verifiable Random Function) 設計,可以對照學習。Algorand的版本很多,以下單指? 1607.01341v9 ,暫稱其為Algorand'(筆者手中另有Algorand的 最新版本 ,其中已對下文提及的幾處問題完成了修正,可與本文參看)。

壹、VRF的***性

VRF的意義很好理解——用以完成出塊人(群)的隨機選擇。為此,VRF的返回值應盡力難以預測。先看Algorand'和Dfinity的套路是怎麽做的:大體上是先將前壹個隨機數(最初的隨機數卻是協議給定的)和某種代表高度、輪次的變量進行組合,用某種私鑰對之進行簽名(或者是先簽名再組合),最後哈希壹下得出最新的隨機數。這樣產生的隨機數旁人很容易驗證其合乎算法,"V"就這樣得到了;而哈希返回值又是隨機分布的,“R”也因此得到保證。在此過程中,為降低操縱結果的可能性,有兩個註意事項: A) 簽名算法應當具有唯壹性,也就是用同壹把私鑰對同樣的信息進行簽名,只有壹個合法簽名可以通過驗證——普通的非對稱加解密算法壹般不具備這個屬性,如SM2。如果用的簽名算法沒有這種uniqueness屬性,那在生成新隨機數的時候就存在通過反復多次嘗試簽名以挑出最有利者的余地,會降低安全性。 B) 避免在生成新隨機數時將當前塊的數據作為隨機性來源之壹,比如引用本塊交易列表的merkle root值等等,因為這樣做會給出塊人嘗試變更打包交易順序、嘗試打包不同交易以產生最有利的新隨機數的余地。在設計和檢視新的***識算法時,以上兩個註意事項是要特別留意的。

考察壹下VRF的返回結果應該如何運用。目前所見用法中,VRF的返回結果可以用來公開完成節點或節點群體的選擇,也可以私密地完成選擇。以Dfinity為例,它是利用mod操作來唯壹、公開地確定壹個Group。Algorand'、Ouroboros Praos是私密選擇的範例,大致套路是對VRF的最新返回值,配上輪次等變量後用私鑰進行簽名並哈希,如果哈希值小於某個閾值,節點就可以私密地知道自己被選中。這種方法很可能在網絡節點數較多時的表現會更穩定,否則幸運兒個數上下波動會較大,進而影響協議表現,包括空塊和分叉。

二、簡評強同步假設版本的Algorand'

私密選擇提供了較強的抗擊定點攻擊的能力,但由於幸運兒的總數對於任何壹個幸運兒都是不能預知的,也因此給後續***識算法的設計和區塊鏈的優化帶來了困難。Algorand‘采用了很強的同步網絡假設(同步網絡假設下的***識算法當然容易做壹些),要求預先知道網絡消息傳播時間的上限:在固定時間內完成對固定比例的用戶的網絡傳播。比如要知道,1KB消息,在1秒鐘內完成全網95%的傳播,而1MB消息需要1.5分鐘完成全網95%的傳播。但這個傳輸上限應該如何選擇? 通過壹段時間的統計結果再乘以壹個系數這種經驗統計?只能說“感覺上可以”,但如果要嚴謹和安全,Algorand‘算法應該補充證明即使在遭遇DDOS或互聯網擁堵的情況下消息傳播嚴重超限後算法仍然能夠保證安全——然而這個證明是缺失的。作為對照,Ouroboros Praos公開承認之前在同步網絡假設下設計的Ouroboros協議在異步網絡條件下會出錯,所以才又做了Ouroboros Praos;新版本的Algorand承認在弱同步網絡時會在不同的塊上達成***識(後續網絡恢復強同步時分叉可以得到解決)雲雲,這些都可資參考。

即使我們暫且認可Algorand'算法可以通過設定壹個很大的傳播時間上限來回應上述問題,但隨之而來的是此時可以看出此算法缺乏壹個非常好的特性:Responsiveness。這個特性指的是:若壹個協議被設計為在壹個較大的傳播時間上限DELTA下工作,但若實際傳播時間是較小的delta,則協議的實際推進步調將只和delta有關,這種協議被稱為Responsive的。具有Responsive特性的***識算法再配以同步網絡假設會非常理想——出於安全,上限可以設置很大,然而協議執行速度只和當時網絡條件有關。Algorand'並不具有這種特性。平均而言,Algorand'完成***識所需的消息傳送次數是11輪,每輪如果要確保安全,完成***識的時間就會很長,單個分區的吞吐量就不會太高。當然,架構設計涉及很多取舍,最終評價壹個算法好還是不好還是要回到初心——準備拿來實現的目標是什麽。上述分析只是嘗試客觀地指出Algorand'算法的幾個少為人知的固有特征,供讀者自行評估。

三、簡評Dfinity的可擴展性問題

私密選擇並且立即上任的做法,也給系統分片帶來了極大挑戰。Dfinity是明確要做分片(Sharding)的,所以必須直面挑戰。可擴展性問題非常復雜,完整解決這個問題需要通盤考慮網絡、存儲、計算三方面的可擴展性——時下大多數區塊鏈3.0項目只註意到計算的分片和可擴展性,忽略了其余二者,從而不可能真正實現理想的擴展。由於公鏈節點網絡帶寬的制約,計算合約所需的數據通常很難迅速地從壹個節點拷貝到另壹節點,所以就算用VRF實現了飄忽來去的出塊節點選擇,存儲節點是沒法同樣飄逸如風的。明顯的選擇有那麽幾個:全部節點存儲全部數據,不同節點靜態地分配用來存儲不同分區。前者的可擴展性很差,對於後者而言,如果出塊節點漂浮不定且出塊節點還需要完成合約運算,就意味著基於P2P網絡來回遠程訪問存儲,性能多半急劇下降;動態決定的出塊節點只完成排序***識,計算能力和存儲捆綁,通過靜態分區提供可擴展性,可能是合理的應對。然而,最可恨的就是“然而”二字——即使如此,系統還存在壹處對存儲和網絡構成壓力的所在:最終用戶提交的待打包交易。普通公鏈(先不考慮EOS那種)的帶寬有限,如果用戶提交的待打包交易必須粗放型地全網泛濫傳播,那現有網絡帶寬可以提供多少TPS?如果出塊節點是靜態分區或者至少提前壹段時間公開知曉,事情尚有回旋余地;如果出塊節點是如此飄忽不定,而且直到最後壹刻也只有這些節點自己知道,那無論是用戶還是出塊節點候選人看起來最直接的應對之道就是全網泛濫傳播全部待打包交易、保存全部待打包交易,這樣帶寬和存儲仍然成為系統瓶頸。

所以這裏碰到的,本質上還是安全、可擴展性、去中心化的不可能三角。

四、簡評Ouroboros Praos

BM懟 Ouroboros的文字已經流傳廣泛。BM的話當然有些明顯是不對的,比如Ouroboros的DPOS是指"Dynamic [stake distribution] POS"而不是BM的Delegate POS,但其關於Pareto分布的評論則值得玩味。如果我們仔細瀏覽後出的Ouroboros Praos,可以發現協議的安全假設和安全證明完全沒有考慮經濟博弈因素,因此洋洋灑灑的證明很可能會不得要領而錯過真正需要防護的方向——畢竟壹直以來POS/DPOS這些協議的血管裏面流淌的就是基於經濟博弈和人性進行設計的血液。最明顯的例子是在forward secure signature的實現方法上,協議目前的設計是要求每個好的節點自覺主動地安全刪除用過的私鑰,而完全沒有考慮近乎零的私鑰保存成本如何面對bribe attack的誘惑,然而這卻是值得考慮的。除了形式化證明之外,Ouroboros Praos本身並沒有太多值得關註的協議特征,總體上就是用VRF抽簽結合POS算法並針對某些安全假設進行了形式化證明,其做事的態度是非常值得贊賞的。

五、總結

這幾個算法本身頗有創意,也很值得學習。與此同時,在看過以太坊CASPER目前披露的分區技術後,筆者的體會是:區塊鏈3.0的競爭才剛剛開始,從以太坊團隊的技術路線看,他們的技術考量和選擇要比很多宣稱要超越以太坊的團隊來得深刻和全面。如果當真要超越以太坊,還是應該先從理解以太坊開始。

順便感謝趣鏈邱煒偉博士對本文的貢獻!