Algorand共識算法是圖靈獎獲得者Silvio Micali在2017年底提出。www.emoneybtc.comMichali是MIT的教授,是一位密碼學家和計算機理論學家,在偽隨機數以及零知識證明領域很有名。
Algorand共識算法的論文的下載地址:https://people.csail.mit.edu/nickolai/papers/gilad-algorand.pdf
Algorand采用了VRF函數,並結合賬戶的余額比例,隨機確定區塊生成以及投票人角色。
所謂VRF(Verifiable Random Function)就是可驗證隨機函數。
隨機數對於區塊鏈技術來說很關鍵。 本質上,分布式賬本的核心問題就是隨機選擇出塊人的問題,這個隨機性要能被全網確認,並且不能被操控,也不能被預測, 否則惡意節點通過操控這個隨機數就可以操控長鏈,從而實現雙花攻擊。
PoW的方案是讓大家進行算力競賽,設置一個計算哈希的難題,誰先算出來誰贏,算力高的贏的概率高,算力低的贏的概率低,以這樣的方式保證勝出者是隨機的。投入的算力能夠體現在哈希值上, 這樣全網能夠驗證,並選擇包含最多算力的那條鏈。惡意節點只能通過提升自己的算力來增加攻擊成功的概率。
PoS的方案是選舉,大家不用浪費電力去進行算力競賽,而是文明一點,隨機選舉一個節點來出塊,並且被選中的概率和它擁有的份額相關。 如果“隨機”這一步沒有問題的話,惡意節點只能通過增加自己的份額,增加自己被選中的概率,從而增加雙花攻擊的成功概率。 這裡有一點比PoW的方案要好就是,要實現攻擊,先得成為持幣大戶,如果攻擊成功幣價大跌,攻擊者也會承受最大的損失。
那麼接下來的核心問題就是,這個不能被操控不能被預測的隨機數從哪來。傳統地PoS方案嘗試從鏈上現有的數據入手,比如使用上一個區塊的哈希值,上一個區塊的時間戳等等來作為隨機數的來源,但這些會帶來額外的安全風險。 因為區塊本身的信息就是節點寫進去的,然後又要根據裡面的信息來選舉後續的出塊者,存在循環論證的嫌疑,安全性不會太好。 這也是傳統地認為PoS方案不如PoW可靠的部分原因。
Algorand提出的VRF能夠由私鑰( SK )以及訊息( X )產生一組可驗證的偽隨機 (pseudorandom) 數Y以及證明 ⍴。任何人都可以透過Verify函數來檢驗這個隨機字串是否真的是該公鑰對應私鑰持有者,依照規定使用Evaluate函數所產生,而不是自己亂掰的。
為什麼我們需要這麼一個大家自己產生,卻又要可以被驗證的隨機字串產生器呢?這是因為在Algorand的拜占庭演算法中,雖然也存在著每一輪不同的區塊生產者(稱為Leader)以及驗證委員會(Committee, Verifiers),但並不是用「公開選舉」的方式來選的,而是透過每個使用者自己對獎的方式來看看自己是不是下一輪的Leader。
algorand就是通過隨機算法從一群大范圍的驗證者中選取一部分驗證者運行BFT算法(Micali教授實現的BA*算法),從而達到提高共識的效果。
無論是在何種BFT的共識機制中,都是由Leader以及Committee來完成區塊的發布以及共識決議。例如EOS的dPoS BFT是固定21個BP輪流擔任Leader以及投票者、Zilliqa透過PoW加入Committee進行PBFT共識算法。這些比較直觀的拜占庭共識演算法都有一個共同特征,就是大家都可以看到下一個區塊的Leader是誰,以及負責協議共識的Committee是誰。這造成了一個可能的風險,就是這些區塊生產者以及Committee成員容易成為DDOS或是賄賂的目標。
Algorand為了解決這種潛在的風險,利用VRF來掩蓋Leader Selection的步驟。可以想像成:一般的BFT在每一輪開始時公平公開選出Leader以及Committee,Algorand則是像在每一輪開始時公布中獎號碼,每個使用者都可以自己拿自己的票根對獎,中獎的人即可成為下一輪的Leader(或是Committee Verifier),但在中獎者自己表明身分前,沒有人知道誰中獎,也就是沒有人能預測下一輪的Leader以及Committee。當然中獎與否並不是口說無憑,中獎者需要出示中獎證明,而這個證明是大家都可以驗證的,這正是我們剛剛說到的VRF。