到目前為止,特務 K 與小雨大概能感受到,改進以太坊這台電腦的方式,大概就是重新組織點對點網路裡面節點合作的方式。
隱私目前仍在應用層做實驗。有人議論隱私應該要在第一層,以覆蓋整個系統。也有人認為隱私做在第二層就好,理由是隱私是應用層的事,而把隱私放在第一層如果出了狀況很難排除是發生什麼問題。
能改變節點合作方式的做法,大概就兩種:賽局式的、或密碼學式的。
賽局式的就是用類似押金加上賞罰,棍子加上蘿蔔。
密碼學式的就多了,看當時的科技到哪裡。
兩者的目的都是要 約束節點的行為 ,才讓穩定長期的「合作」成為可能。
一般來說,密碼學式的設計是比較偏好的,因為這是能在假設攻擊者計算能力的限制之下,真正約束人們的行為。以龍捲風現金為例,我們想約束別人不能領走你的存款。之所以壞人沒辦法領走你的存款,是因為壞人沒辦法猜到、或爆搜出你的秘密值是什麼,並發出一個有效的提款證明。壞人行為被約束,是一種他本質上「不能」做到該行為。
但賽局式的設計,例如:發出兩種矛盾的驗證者投票,作為對檢查點的攻擊。雖然可以事後對攻擊者沒收押金作為懲罰,卻沒辦法阻止這種攻擊事前發生。
那麼,為什麼還要做賽局式的設計?為什麼矛盾的驗證者投票沒辦法用密碼學式的機制去阻擋?因為真的沒辦法。密碼學式的機制只能約束人們事前「有做過」的事情,但沒辦法約束「沒做過」或「未來不會做」的事。龍捲風現金的使用者,可以就其「已經存款」與「尚未提款」的事實做出密碼學式證明。但驗證者就沒辦法對其事後會不會做出攻擊投票,做出密碼學式證明。
賽局式設計固有其精彩之處:舉凡燃氣動態定價、換幣協議、拍賣提取值、穩定幣等等。大多是利用既有的知識應用在各種不同問題之上。
密碼學式的設計,則因為區塊鏈的發展,加速了許多。許多被視為聖杯或神話的科技,漸漸從純理論,走到實務,最後變成某種不值一提的日常。零知識證明算是這裡走完 70% 的科技。
在這些科技加速的過程中,許多嚴肅的密碼學家或電腦科學家,紛紛跳下來開公司、蓋專案。他們換上迷因頭圖,拍一些幽默風格的 影片,來取得使用者的注意力。
0xPARC 團隊推出的 可程式化密碼學(Programmable Cryptography) 一文與敘事,算是近期一般開發者對幾樣密碼學科技未來發展好理解的路線圖。其文中有張簡化的科技樹經常被引用。
這科技樹裡面羅列幾樣密碼學科技,上層是下層的推廣,只要有上層的技術,下層的都只是某種功能的特例,可以輕易達成。
粗體字幾樣科技,代表那些密碼學提供最基本的運算閘門,是可以用程式去撰寫想要的業務邏輯的。像零知識證明一樣,是某種數學蓋出來的硬體。
零知識證明(圖中標 zkSNARKs,是比較文謅謅的寫法)是目前比較明朗的技術。效能的改進以月為單位在進步。
為了了解一下現在零知識證明現在效能到哪裡, ethproofs.org 網站列有各家 zkVMs 團隊競爭的資訊。寫作的時候,證明方產出一個區塊的證明的時間,平均要 3 分鐘。而在以太坊點對點網路上,這個數字要壓到 12 秒 以下。我們就保守估計,「單機版密碼學電腦」的頂尖效能,大概是慢「點對點網路電腦」的 百倍到千倍 。
然而驗算壓縮的運用方式,如捲,比較像是意外發掘的。原先的設計還是用在隱私應用。
Zcash 和龍捲風現金這種,都是某種純轉帳的應用。個人之間的狀態(存款束縛),其實並沒有互動。
人們一直在思考要如何變出更豐富的隱私應用。如果密碼學可以程式化,那人們應該要能寫出像以太坊合約一樣的程式,但儲存在鏈上的狀態又能保有隱私。
這變成要有「狀態分享(State sharing)」的問題。我的秘密值要能和你的秘密值互動。
零知識證明就像是單機版的主機一樣,人們只能針對自己的私密狀態去做運算。如果要和其他的人私密值互動的話,需要用其他的密碼學。
多方運算(MPC)與 多方同態加密 (MP-FHE)是這類多機版的密碼學。但目前也有各自的問題。
要不是有善意多數的假設,不然就是有針對應用需要複雜設計的問題。
為了給讀者一些概念。以太坊做 256 位元整數加法,耗費燃氣為 3 gas ,這是一個純 CPU 的運算。早先 Zama 團隊的 fhevm ,可以把兩個加密過後的 8 位元整數相加,得到其和的加密,這要 94,000 gas。可以當作「通用多機版的密碼學」,現在慢「點對點網路電腦」大概 一百萬倍 。
置於最頂的,是「 不可區分混肴(Indistinguishability obfuscation, iO)」,是當前密碼學的聖杯。
有這樣科技,所有密碼學能做想做的事情都能做到。
這個科技可以把一個原始碼編譯、或混淆成加密後的混淆碼。注意,這和一般前端看到的 JavaScript 醜化或最小化非常不同,雖然看起來很醜但還是能看出些端倪。混淆碼是密碼學意義上的密文。
要執行混淆碼,則是用密碼學的步驟和混淆碼互動。互動後得到的輸出結果,會等同於用原始碼執行的輸出結果。
人們想像中的應用是這樣。你可以有一個合約程式,裡面寫死一隻私鑰。混淆碼是一團密文,因此人們無法得知私鑰是什麼。但運算之後,如果符合某種自訂的條件,程式可以用裡面寫死的私鑰簽章。 ^vitalik_2014
但這科技目前在哪裡呢?
混淆碼也是要用最基本的加法或乘法算數閘門拼出來的。所以要會飛之前要先能爬,可以看最基本的乘法閘門。
一篇 2015 年的論文寫說:2 位元的乘法迴路(很小對吧?),混淆過程需要 10^27 年的時間與 20 Zetta bytes 的記憶體!(ZB 比 TB 還要多 9 個零, 2016 年整個網際網路的資料估計為 1 ZB)。 ^iO ^ZB
作者哪來 10^27 年青春與 20 ZB 記憶體?已知宇宙年齡,以及太陽餘命,大概是 10^10 年。
他們是模擬和估計出來那些數字的,並不是實際運算得到的。
有志於 iO 的團隊 Machina iO ,今年把這個 2 位元的乘法迴路壓到:混淆時間一小時, 記憶體尖峰用量 62 GB,與混淆後迴路大小 20 GB。算是從天文數字壓到一個具體看得見的數字了。 ^iO
點對點網路架構的設計,取決於當時有什麼約束行為的手段:主要是賽局或密碼學工具。其中密碼學科技仍有許多進展的空間。魔法般的科技正從奇幻小說變成實際能用的方案。這些新科技都會進一步改善區塊鏈的設計,區塊鏈也會因此推進密碼學上的進步。許多與區塊鏈無關的隱私解決方案也會因應而生。