反直覺的Algorand:突破“不可能三角”,理想國還是烏托邦?
一
2017年10月,伯克利大學。
algorand的分享會剛剛結束。Micali教授站在臺上,望向人群。
有人舉手問了一個問題:
“在algorand系統裡,驗證節點如果作惡是不會受到任何懲罰的嗎?這樣的話整個系統可以輕易被收買吧,哪怕我事先並不知道這些驗證節點是誰……”
algroand核心設計理念有一個非常重要的假設:在一個系統中,絕大部分人都是誠實的。這個假設貫穿整個系統,代表了algorand最本質的核心。但顯然,現場提問的這位朋友對此仍然有所質疑。
Micali教授打斷了對方的問題:“algorand整個系統的確沒有所謂的「懲罰」機制。你後面說的其實是另一個問題。”
他把身體轉向觀眾,說了接下來這樣一段意味深長的話:
“我和你,包括在場所有人,我想我們都同意「誠實」究竟意味著什麼。
你知道密碼學誕生至今最古老的協議是什麼嗎?是「祕密分享協議」(secret sharing)。
這個協議的原理大部分人都說得出來:我們都害怕忘記密碼,而密碼其實就是一串數字而已,於是有人想出了一個方法——把這串數字拆成十個不同的數字,它們相加的和剛好等於密碼的值,然後我把這10個數字隨機發給10個不同的人保管。我請求他們做一個誠實的人,不要把自己的數字告訴別人。當有一天我自己忘記了密碼,我就去找他們每個人要回數字,相加一遍就好了。
按照你的質疑,如果人們會一邊認為自己是誠實的,一邊把手裡的數字告訴別人,那祕密分享這個協議是不成立的——不僅如此,整個密碼學領域裡所有的協議大概也都不存在了。「誠實」的基礎是不去考慮那些不誠實的做法,我認為不止是我一個人這麼想的。”
二
micali是世界級的密碼學家,任職於MIT,得過圖靈獎。
如果你對隱私幣(privacy coin)和zcash比較熟的話,你可能聽說過,這些專案很多都用到了密碼學裡的一個理論——零知識證明(zero knowledge proof)。
第一篇提出零知識證明理論的論文發表於1985年,micali正是這篇論文的聯合作者。
零知識證明,包括密碼學,原本只是一個很小眾的學科。直到2009年,一個化名中本聰的密碼朋克發表了關於比特幣構想的白皮書,密碼學裡的許多理論才得到了實際應用。同時,比特幣和區塊鏈也迅速吸引來了其他人的眼光。
比特幣的出現當然也立刻引起了 micali 的興趣。“我在想我可以做點什麼。我把自己關在房間裡,幾個月都不出門,不停地研究區塊鏈的協議、共識、治理、激勵機制,然後,我終於知道自己想要的是什麼了。”在杭州的見面會上,micali這樣告訴橙皮書,“最後我把激勵機制拿掉,單獨去思考整個協議。我把自己的想法寫成了一份白皮書,扔到網上,然後你猜發生了什麼?”
幾個同在MIT的同事找了上來,其中一位叫nickolai zeldovich,他是系統安全領域鼎鼎有名的人物。nickolai覺得白皮書裡的設想看起來過於美好,不像是真的,“too good to be true”,於是他問 micali,能不能把白皮書拿出來測試一下?micali回答,當然可以。
於是,他們著手準備了一次測試。
“我們租了1000臺亞馬遜的伺服器,每臺模擬500名使用者,然後增長到1000個使用者、2000個使用者、5000個使用者,15000個使用者,一直到500000使用者。測試的結果顯示,達到15000個使用者時,系統完全沒有變慢——在那一刻我知道,我的想法不僅在白皮書上可行,在測試上也是可行的。”後來,nickolai也成了白皮書的聯合作者之一。
有了白皮書,有了技術可行性的測試,是時候動手做點大的了。
micali 把這個專案正式取名為algorand,他想把 algorand 建設成為區塊鏈裡切實可用、值得依賴的基礎設施——換句話說,就是做成一條最好的公鏈。
algorand是一個複合詞,由algorithm(演算法)+random(隨機)組成。這個名字揭示了alogrand的設計原理,即用演算法隨機產生出塊節點與驗證節點—— 這本身就是一種很“密碼學”的思路。
三
技術型的創始人在區塊鏈行業裡不見得是一個優勢。事實上,擁有網紅型的技術創始人,才是這個行業真正通吃的殺手鐗。
micali 關於圖靈獎的頭銜,能夠為 algorand 吸引來不少好奇的目光。但其實 micali 本身也是一個特別擅長傳達理念的人。
這個瘦瘦小小的老頭子教授,看起來永遠是一副精神充沛的樣子。在上海萬向舉辦的區塊鏈大會上,micali 與 oasis lab 創始人 dawn song、cosmos 創始人 jae、以太坊創始人 vitalik 分到了同一組做 pannel 討論。當主持人一個一個詢問嘉賓觀點的時候,micali是唯一一個執意要從座位上站起來、面向觀眾大聲回答問題的人。
雖然他講的英語有很重的義大利口音,但這個口音似乎從來沒有影響過他對自己所表達的東西的自信力。杭州見面會現場的話筒臨時出了問題,micali對工作人員搖了搖頭,示意自己其實並不需要話筒。
在這些公開的分享會裡,micali喜歡用“魔法”來代替algorand涉及到的許多複雜的密碼學演算法,以此讓聽眾更好的理解algorand系統究竟是如何運作的。
對於第一次接觸algorand的人來說,這個系統在設計上有兩個非常“反直覺”的地方:
-
這個系統裡沒有任何的“懲罰措施”
-
這個系統不需要你押注任何的資產
在大部分公鏈系統的設計裡,為了防止節點作惡,系統往往會設定相應的懲罰機制。dpos或者bpos的共識機制要求節點抵押一部分的資產,以此作為籌碼,約束節點的行為。可以說,大部分割槽塊鏈專案的“信任”,都是通過這種基於資產抵押的懲罰機制,建立起來的。
但在micali的腦子裡,上面這些並非都是必須存在的東西。這背後反映了algorand與眾不同的設計哲學。
micali認為,當“錢”不需要拿去做任何抵押、可以隨時流動的時候,系統裡大部分的錢就會掌握在誠實的人手裡。因為大部分的人都是誠實的,錢只要足夠分散,大部分錢也會是誠實的。而對一個POS的系統來說,“錢”就是一種投票權。如果大部分投票是誠實的,那麼這時,“懲罰”也就沒有必要存在了。
“我認為我們應該做一個「不可能作弊,而非如果有人作弊就去懲罰它」的系統。我覺得這才是更好的設計。”micali在一次分享會上說,“當錢可以隨意流動的時候,大多數錢掌握在大多數人的手裡,而大多數人是誠實的,這個網路就是安全可靠的。”
四
對一個公鏈而言,最核心的問題其實是怎麼產生下一個區塊。
第一個區塊,也就是創世塊,是不需要考慮的,它是人為定義的,不需要共識。第二個區塊怎麼產生才是關鍵。
在micali的設計裡,algorand通過兩個階段的“魔法”——這個魔法背後其實是數學和密碼學——來確定下一個區塊的產生。
-
第一階段:魔法隨機選出一個人來產生區塊(概率與這個人所擁有的錢的數量成正比,不需要鎖定或抵押),然後他把「簽名的區塊+自己的公鑰」廣播到網路裡;
-
第二階段:魔法隨機選出一千個人來驗證這個區塊。這一千個人組成的委員會對該區塊是否有效達成共識,他們把「自己對區塊的投票意見+自己的公鑰」廣播到網路裡。
micali 喜歡把“公鏈系統”想象成一個小型的人類社會:“在一個社會裡肯定會有一小撮壞人,比例可能是1%、2%,或者20%,但是不可能大部分人都是壞人。不然所謂的「社會」就不存在了,那就是一個野蠻動物的黑暗叢林。”
因此,當第一個人被選出來的時候,他可能有10%的概率是壞人。壞人會發布錯誤的區塊,或者把不同的區塊發給不同的人,以此完成欺騙。這時,如果我們再隨機選出一千個人,這一千個人都是壞人的概率是非常非常低的。相反,這一千個人和整個系統一樣(如果足夠隨機的話),大部分人都會是好人。
如果你既沒有被選為生成區塊的人,也沒有被選為驗證區塊的一千人,當你看到一個區塊被這1000個人中的750個人驗證過,那麼你也可以知道,這個區塊是正確的。
這就是algorand的基本原理。
那麼問題來了:這一千個人的委員會到底是怎麼選舉出來的呢?
一人一票,通過純民主的方式,讓網路裡所有的使用者一起來選舉?這樣效率肯定非常低。
algorand採用了一種反直覺的做法:讓他們自己推選自己。
這部分其實也是密碼學的精華。
委員會的選舉,依賴於一個神奇的彩票程式。這個彩票程式有如下幾個特點:
-
每個使用者都有一個彩票程式
-
彩票程式只在使用者本地的計算機上執行
-
使用者自己無法通過彩票程式作弊
-
如果中獎了,使用者可以拿出證據證明自己中獎
整個彩票程式的計算量非常小,就是一些雜湊和字串的比較。中獎的概率和你手裡的錢的數量成正比,而且,一個公鑰有100萬個幣,和100萬個公鑰,每個地址有1個幣,他們被選舉上的概率是相同的,同時,二者彩票搖獎的時間和速度也是相同的。
然後,一旦你中獎了,你的計算機就會給你一張中獎證明,這個中獎證明會和你對區塊的投票意見一起廣播到網路中。所有這些事情將在幾毫秒中完成,非常快速。
聰明的讀者到這裡應該反應過來了——micali 所說的那個“魔法”,其實就是這個基於密碼學的彩票程式。
這個彩票搖獎機有兩個好處:
-
委員會的選舉速度很快:時間是毫秒級,因為沒有人需要互相溝通,大家在自己本地的機器上執行就好了。
-
委員會選舉的過程很安全:假設系統中的壞人可以賄賂任何節點,讓他們說謊,但在algorand系統裡,壞人到底應該去賄賂誰呢?當委員會被選舉出來的時候,壞人可以知道這 1000 個人分別是誰,但問題是,這時哪怕委員會裡的人被賄賂了,他也已經把自己的中獎證明和對區塊鏈的驗證意見給廣播出去了——換句話說,此時區塊驗證已完成,賄賂也無濟於事。
粗略的理解大概是這樣。其中 alogrand 還做了不少的技術細節,比如:
-
vrfs(隨機驗證函式)和基於密碼學的自選舉
-
新的速度超快的拜占庭協議(即 1000 人委員會對新區塊達成共識的過程)
-
使用者可替代性(上面做拜占庭共識的過程中,如果對區塊產生分歧需要經過最多 9 輪投票,這 9 輪以內的投票,每一輪的委員會都是不同的 1000 個人。這種可替代性可以更有效地經受被賄賂的情況)
-
……
五
基於上面這套設計,micali認為algorand跟比特幣相比有了很大的改進。
“我們今天一直在說的「區塊鏈」,其實從來就不是一條鏈。它(比特幣的鏈)是一棵樹,”micali 說,“只不過,這棵樹的分支隨著時間的進行逐漸凋亡,最終留下了最長的那一條。但在 alogrand 系統裡,從始至終就只有一條幹淨的主鏈,不需要 6 個區塊的確認時間,一個新區塊一旦產生就是最終的區塊。就是這麼簡單、乾淨、明瞭。”
比特幣之所以是一棵樹而不是一條鏈,原因在於比特幣需要額外的 6 個區塊時間才能確認該區塊的最終一致性。援引 maxdeath 在知乎上的答案:“在比特幣裡,因為網路延遲的原因,某個區塊的生成者天然地在下一個區塊的生成上具有優勢。於是,比特幣有了 6 個區塊這麼個延遲,因為一個區塊的生成者預測 6 個區塊以後的生成者的概率的時候,網路延遲能造成的優勢就微乎其微了”。
algorand 能快速確定一個區塊的最終一致性。根據 micali 的說法,algorand 上出現分叉的概率非常之低。大概需要經過「從宇宙誕生至今」這麼長的時間,系統才有可能出現分叉。
除此之外,micali 認為 algorand 還有其他一些更重要的改進,比如:
-
真正意義上的去中心化:所有節點都一樣,不存在礦工與普通使用者的不同角色。
-
藉助於計算量很小、幾乎沒有延時的隨機演算法,在可擴充套件性上可以有很大的突破;
-
很好的安全性:不僅可以抵擋協議層的攻擊,還可以抵擋網路通訊層面的攻擊。
上面這三點分別代表了“去中心化”、“可擴充套件性”和“安全性”——換句話說,algorand 解決了一直以來困擾公鏈的三難問題,即「不可能三角」。
在行業整體思潮開始轉變,越來越多人開始探討「以太坊成為世界計算機的願景是否必要」時,“區塊鏈在保持去中心化與安全性的前提下,應該儘量把計算剝離開,挪到第二層來做,讓layer2來提升效能” 幾乎已經成了行業新的共識了。
人們已經習慣並預設「不可能三角」無法解決,放棄與這個問題剛正面,轉而去尋求其他解決思路,比如分片、鏈下擴容、側鏈等等。在已經接受了一個既定條件的情況下,突然告訴你這個條件不存在了,讓你重新定義問題——這時的人們很難做出正確的反應,因為大部分人的思想已經被這個既定條件牢牢困住了,很難掙脫。
algorand 的橫空出世,如果對行業有其他方面的借鑑意義的話,也許在於 它在嘗試幫助這個行業打破這個狹小的思維框架。 用 micali 的話來說,“algorand是真正使用第一性原理設計出來的”。
六
這種第一性原理的設計思路,很大程度上歸功於 micali 在密碼學領域長期的研究。micali 嘗試用純密碼學的方法來搭建新的公鏈基礎設施,一方面為整個行業打開了一片新世界,但另一方面,也帶來了更多人對 algorand 的質疑。
最大的質疑聲聚集在同一個問題上—— alogrand 沒有完善的激勵機制。
對於這個問題,micali 在早期曾經嘗試論證為什麼不需要經濟激勵機制。coindesk 2017 年 5 月發表的一篇報道里,micali 表示“激勵機制是最難的”,他的解釋是這樣: 當你為系統加入激勵機制,人們就會嘗試去利用激勵機制賺錢。他們會想出各種你預想不到的辦法專空子。中本聰肯定不會想到,pow 最終會導致比特幣出現產業規模級的挖礦活動。
“我們必須把激勵機制當作最後一種方法來使用。我相信我可以(讓 algorand 在沒有激勵機制下運作起來),但我沒有確切的論證方法證明我可以,因為這比「讓 algorand 自己證明自己」要來得更難。”
但沒有激勵機制,就像沒有懲罰機制一樣,很容易讓人懷疑因此可能產生更大的問題。比如,沒有激勵機制,怎麼吸引更多的人加入整個生態?人們為什麼要參與成為 algorand 的節點,哪怕這個節點不需要消耗太多的計算資源和資產,沒有好處的話,人們一開始為什麼要去做呢?所有的節點會不會都變成懶惰節點?
micali 對這些問題做了一個有趣的反問: 你會因為擔心電腦上的 gmail 費電,而選擇把郵箱關掉嗎?
vitalik 顯然對激勵機制有不一樣的看法。在被問及如何看待 algorand 時,v 神說過這樣一句話:“algorand 假設系統中大部分人都是誠實的。而我們(以太坊的 casper)則是嘗試用更偏經濟激勵機制的方法、而非密碼學的方法,來實現 pos。”
micali 認為 algorand 是「更純粹的 pos」。“pow 通過算力提高了節點出塊的成本,保證系統的安全性,同時也產生了廉價電力和專業挖礦裝置的競爭賽,最終一定程度上導致了「中心化」礦池的出現。而使用需要抵押資產、有懲罰機制的 pos 共識則是另一種「隱形的中心化」。讓我來問你,一個普通的使用者能把多少錢抵押在鏈上並且保證 30 天內不動這筆錢?沒多少錢。最終那些有能力鎖定大額資產的人,就會形成新的中心化。”
看起來,沒有激勵機制和沒有懲罰機制一樣,似乎都是 micali 出於對 algorand 系統保持足夠去中心化的一個考量。不過儘管如此,在前不久的杭州見面會上,當現場許多人提出激勵機制的質疑時,micali 主動站起來回答了這個問題。他表示 algorand 並非完全沒有激勵機制,只是目前激勵機制的 paper 還沒有最終確定釋出出來。
micali 透露 algorand 的激勵機制會跟其他公鏈有所不同:“algorand 不會去獎勵出塊的節點,我們也不會獎勵那 1000 個入選委員會的區塊驗證者。如果你去獎勵最終勝出的冠軍,獎勵那些第一個衝破終點的贏家,人們就會開始想盡一切辦法把自己訓練成百米賽跑的運動員。他們會買更好的裝置,用更好的演算法,來獲得出塊或者驗證區塊的權利。相反地,alogrand 會去獎勵那些一直保持線上狀態的節點和使用者。只要你持續線上,保持對網路資料的接受和監聽,就有可能獲得 algorand 代幣的獎勵。”
這是至今為止 algorand 對外公佈的關於激勵機制方面的所有信息了。看起來,激勵機制在 algorand 專案的發展中也經歷了新的變化。從原本的「不需要」,到後來出現的「新的設計理念」,這對algorand也許是一件好事。一個專案總是需要經過一些時間,不停地完善想法。
儘管如此,algorand 仍然留下了不少問題。
按照這套激勵機制的假設,以及 algorand 希望採用的「純 pos」的共識演算法,初始代幣的發放將會變得尤為關鍵。Alogrand希望通過拍賣的形式發放代幣,由市場決定Algo代幣的價格,但這一部分目前還沒有太多的資訊。
此外,如果假設系統中所有的節點都是一樣的,那麼使用者有可能通過類似“輕節點”的方式進行訪問嗎?
在杭州分享會現場,有人問到了這個問題:在沒有礦工的情況下,一個新節點加入網路需要如何開始同步歷史資料?algorand 論文的聯合作者陳婧回答稱,他們將會開發一套專門的歷史資料同步工具,並且新加入的節點也並不需要從創世塊開始同步所有區塊的資料。
algorand 留下的最後兩個問題是:目前沒有實際的程式碼和開發程序,以及,目前 algorand 僅有的測試結果仍然是跑在非常穩定可靠的亞馬遜雲伺服器上的,這跟實際的公鏈執行場景可能會有所差別。
而從另一方面來說,無論是經濟激勵機制、代幣發放,還是系統工程上的實現細節,這些疑問看起來似乎都不是一個密碼學家最擅長的事情。
七
2017 年那場伯克利大學的分享會,micali 在 ppt 的最後放了一張圖。
這是一座羅馬石拱橋,名叫朱利安橋。這座橋橫跨法國東南部的卡拉翁河,於公元前3年建立。至今這座橋仍然在使用中,古羅馬人完全想象不到的、後世新誕生的各種重型交通工具在橋上通過,但這座橋依然堅挺無比。
micali 說這座橋是一個美妙的基礎設施。
一個去中心化、不可篡改、無法遮蔽的公共賬本,同樣也是人類夢寐以求的一個美妙的基礎設施。
問題是,什麼才是實現這種理想基礎設施的最好方法?
是最早出現的比特幣嗎?
還是會有更好的?
algorand提出了一個很有趣的想法:儘可能多地依賴於密碼學演算法本身,而減少經濟激勵對人性可能產生的影響。
這種「隨機抽取樣本來達成網路共識」的辦法,在 micali 眼裡還有更大的用處。
當被問及 algorand 最大的不同點是什麼的時候,micali 說,“algorand 的拜占庭演算法能讓網路對任何的話題和決定快速達成共識。這將給予 algorand 更大的可能性。我認為 algorand 最大的不同是它的進化能力。整個社群對 algorand 未來的發展如果有新的想法,有更好的主意,都可以通過這種方式快速達成共識。因此,algorand 能擁有更快的進化迭代速度。”
algorand的「進化能力」,讓我想到了另外一些東西。
自古以來,在人類社會裡,一群人做出決定的唯一方式是選舉出一個管理機構。你不可能讓10萬人逐一舉手投票。哪怕有了區塊鏈這一種人類歷史上首次擁有的、防篡改、可以讓數百萬人同時發聲達成共識然後做出集體決定的技術,一人一票的“純民主”也不現實——因為效率實在太慢了。所以 EOS 才會使用 21 個超級節點的設計。
但 algorand 提出了另一種思路:如果我們的社會,每做一次決定,是通過隨機選取社會裡 1000 個人作為樣本進行投票的話,會怎樣?這種方式會不會更好?
老實說我不知道答案。雖然從概率上來說,這可能會是一個更貼近於社會全部成員意志的投票方式。但如果真理通常只掌握在少數人手中呢?如果選出來的這 1000 個人都是笨蛋呢?如果這 1000 個笨蛋做了最糟糕的決定?
我不敢想象這種機制,但同時我又對這種想象感到興奮。對我們來說,唯一能確定的是,這樣的社會將在極大的“不確定性”中向前走。
在回去的路上,我想起了另一個密碼學家 Bruce Schneier。Bruce Schneier 寫過一本書叫《應用密碼學》。幾年後,他又寫了另外一本書叫《Secrets & Lies》。在第二本書裡,Bruce Schneier 寫下了這樣一段前言(選自LeanCloud創始人江巨集翻譯版本):“七年前我寫了另一本書:《應用密碼學》。我在其中描繪了一個數學的烏托邦:可以永遠保守祕密的演算法,以及能安全可靠地執行無監管的賭博、抗檢測的認證、匿名貨幣等美妙的電子化互動的協議。在我眼中,密碼學是帶來平等的偉大技術;任何有廉價計算機的人都能擁有與最強大的政府同樣的安全。在兩年後寫此書第二版時,我甚至說「僅靠法律保護自己是不夠的,我們還需要靠數學保護自己。」 然而我錯了。密碼學做不到以上的任何一點。 這並不是因為 1994 年以後密碼學變弱了;也不是因為書中的技術內容不再正確。而是因為密碼學不存在於真空中。 密碼學是數學的一個分支。和數學的其它部分一樣,它是關於數字、等式、邏輯的。而對於你我來說在生活中能感受到的安全是關於人的:人知道的事、人之間的關係、人和機器的關係。資訊保安是關於計算機的:複雜、不穩定、有缺陷的計算機。 數學是完美的;現實是主觀的。數學是確定的;計算機是易怒的。數學是有邏輯的;人是不確定、易變和難以理解的。 《應用密碼學》的錯誤在於我沒有對上下文做任何討論。我把密碼學當作答案™來講述。這是很幼稚的。 […] 一個同事曾和我說,世界上充滿了《應用密碼學》的讀者設計的糟糕的安全系統。[…] 幾年前我聽過一句話,在這裡稍微改動一下:如果你認為技術能解決安全問題,那麼你既不懂安全也不懂技術。”
algorand 最大的亮點是“密碼學”的設計,但人們也將因為“密碼學”不斷對它產生質疑。