
撰文:Vitalik Buterin
編譯:Yangz,Techub News
以太坊協議設計中有很多「小設計」對以太坊的成功至關重要,但卻無法很好地歸入一個更大的子類別。在實踐中,大約有一半的內容是關於各種 EVM 改進的,其餘的則是各種小眾話題。本文就將探討這部分話題。

The Splurge,2023 年路線圖
The Splurge 的主要目標:
- 使 EVM 達到性能穩定的「最終狀態」
- 在協議中引入賬戶抽象,使所有用戶都能從更安全、更便捷的賬戶中受益
- 優化交易費用經濟學,提高可擴展性,同時降低風險
- 探索先進的加密技術,使以太坊從長遠來看變得更好
改進 EVM
改進 EVM 旨在解決什麼問題?
目前的 EVM 難以進行靜態分析,因此難以創建高效的實現方法、正式驗證代碼並隨著時間的推移進行進一步擴展。此外,它的效率極低,因此很難實現多種形式的高級加密技術,除非通過預編譯明確支持這些技術。
如何改進 EVM?
當前 EVM 改進路線圖的第一步是 EVM 對象格式(EOF),計劃在下一次硬分叉中引入。EOF 是一系列 EIP,它規定了新版本的 EVM 代碼,具有許多顯著特點,其中最突出的包括:
- 代碼(可執行,但無法從 EVM 讀取)與數據(可讀取,但不可執行)分離
- 禁止動態跳轉,只允許靜態跳轉。
- EVM 代碼不再遵從與 gas 相關的信息。
- 新增顯式子程序機制。

EOF 代碼框架
儘管最終有可能廢除舊式合約(甚至可能強制轉換為 EOF 代碼),但舊式合約將繼續存在並可創建。新式合約將受益於 EOF 所帶來的效率提升,包括因子程序功能而略微縮小的字節碼,以及 EOF 特有的新功能或其特有的 gas 成本縮減。
引入 EOF 後,進一步升級將變得更加容易。目前最完善的是 EVM 模塊化算術擴展(EVM-MAX)。EVM-MAX 專門為模塊化算術創建了一組新的操作,並將其置於一個新的內存空間,其他操作碼無法訪問。這樣,就可以使用蒙哥馬利乘法(Montgomery multiplication)等優化運算。
一種較新的思路是將 EVM-MAX 與單指令多數據(SIMD)功能相結合。從 Greg Colvin 的 EIP-616 開始,SIMD 作為以太坊的一個小設計已經存在了很長時間。SIMD 可用於加速多種形式的加密算法,包括哈希函數、32 位 STARK 和格密碼。EVM-MAX 和 SIMD 是對 EVM 性能導向型擴展的天然組合。
組合式 EIP 的大致設計思路是,以 EIP-6690 為起點,然後:
- 允許任何奇數或任何 2 的冪至(2768)作為模數
- 為每個 EVMMAX 操作碼(
add,sub,mul)添加一個版本,該版本不再取 3 個直接值(x/y/z),而是取 7 個直接值(x_start、x_skip、y_start、y_skip、z_start、z_skip、count)。在 Python 代碼中,這些操作碼將執行相當於以下的操作:

- 但在實際執行中,這些操作碼將被並行處理
- 有可能的話,可以增加
XOR、AND、OR、NOT和SHIFT(循環和非循環),至少對二乘以二的模數來說是這樣。此外,還可添加ISZERO(將輸出推入 EVM 主堆棧)
這樣就足以實現多種形式的加密算法,包括橢圓曲線加密、小域加密(如 Poseidon、circle STARKs)、傳統哈希函數(如 SHA256、KECCAK、BLAKE)和格密碼。
當然,其他 EVM 升級也是可能的,但迄今為止,它們受到的關注要少得多。
現有的相關研究
還有哪些工作要做,如何權衡?
目前,EOF 計劃被納入下一個硬分叉。雖然計劃總有被移除的可能(此前就有過在最後一刻將計劃從硬分叉中移除的情況),但這麼做會是一場艱苦的「戰鬥」。移除 EOF 意味著未來對 EVM 的任何升級都不需要 EOF,這是可以做到的,但可能會更困難。
EVM 的主要權衡在於 L1 的複雜性與基礎設施的複雜性。要在 EVM 實現中添加 EOF,需要大量代碼,而且靜態代碼檢查也相當複雜。不過,作為交換,我們可以簡化高級語言、簡化 EVM 實現並獲得其他好處。這麼說吧,一個優先考慮持續改進以太坊 L1 的路線圖將包括並建立在 EOF 的基礎上。而其中的一項重要工作是實現類似 EVM-MAX 加 SIMD 的功能,並對各種加密操作需要耗費多少 gas 進行基準測試。
對路線圖的其他部分有何影響?
在 L1 調整其 EVM 後,L2 可以更容易地進行復刻。一方調整而另一方不調整,會導致不兼容,而這也有其自身的弊端。此外,EVM-MAX 加上 SIMD 可以降低許多驗證系統的 gas 成本,從而提高 L2 的效率。用 EVM 代碼取代預編譯代碼,也許不會對效率造成太大影響,但卻能執行相同的任務,從而更容易移除更多的預編譯。
賬戶抽象
賬戶抽象旨在解決什麼問題?
如今,交易只能通過一種方式驗證,即 ECDSA 簽名。賬戶抽象的初衷是在此基礎上進行擴展,使賬戶的驗證邏輯可以是任意的 EVM 代碼。這樣就能實現一系列應用,包括:
- 轉用抗量子加密技術
- 淘汰舊密鑰(普遍認為這是一種值得推薦的安全做法)
- 多籤錢包和社交恢復錢包
- 低價值操作使用一個密鑰簽名,高價值操作使用另一個密鑰(或一組密鑰)簽名
- 允許隱私協議在沒有中繼器的情況下運作,從而大大降低複雜性,並消除關鍵的核心依賴點
自 2015 年開始對賬戶進行抽象以來,這些目標已擴展成一大套「便捷目標」,例如一個沒有 ETH 但有其他 ERC20 代幣的賬戶可以用這些代幣支付 gas 費。下圖是這些目標的一個總結:

MPC 指的是多方計算,這是一種已有 40 年曆史的技術,可將密鑰分割成多個片段存儲在多個設備上,並使用加密技術生成簽名,而無需直接合並密鑰片段。
EIP-7702 是計劃在下一次硬分叉中引入的 EIP,也是人們日益認識到有必要讓包括 EOA 用戶在內的所有用戶都能享受到賬戶抽象帶來的便利,從而在短期內改善用戶體驗,並避免分裂成兩個生態的結果。這項工作始於 EIP-3074,並在 EIP-7702 中達到高潮。EIP-7702 使賬戶抽象的 「便捷功能」適用於所有用戶,包括現在的 EOA(外部賬戶,即由 ECDSA 簽名控制的賬戶)。
從圖表中我們可以看出,雖然某些挑戰(尤其是關於「便捷性」的挑戰)可以通過多方計算或 EIP-7702 等增量技術來解決,但促使最初提出賬戶抽象建議的大部分安全目標只能通過回溯並解決最初的問題來解決,即允許智能合約代碼控制交易驗證。目前還沒有做到這一點是因為安全實現這一目標仍是一項挑戰。
賬戶抽象如何運作?
賬戶抽象的核心是允許智能合約而不僅僅是 EOA 發起交易,其複雜性來自於如何以有利於維護去中心化網絡和抵禦拒絕服務攻擊的方式實現這一點。
多重驗證問題是一大關鍵挑戰:

假設有 1000 個賬戶,其驗證功能都取決於某個單一值
S,而 mempool 中的交易在 S的當前值下都是有效的,那麼單個翻轉 S 值的交易就會使 mempool 中的所有其他交易失效。這樣,攻擊者就能以極低的成本向 mempool 發送垃圾郵件,堵塞網絡上的節點資源。多年來,我們一直在努力擴展功能,同時限制 DoS 風險,最終,我們就如何實現「理想的賬戶抽象」達成了共識,提出了 ERC-4337。

ERC-4337 將用戶操作的處理分為兩個階段,即驗證和執行。首先處理所有驗證,然後處理所有執行。在 mempool 中,只有當用戶操作的驗證階段只涉及自己的賬戶,且不讀取環境變量時,該用戶操作才會被接受。這可以防止多重驗證攻擊,也會對驗證步驟執行嚴格的 gas 限制。
ERC-4337 被設計為協議外標準(ERC),因為當時以太坊客戶端開發者正忙於合併(the Merge),沒有多餘的能力開發其他功能。而這也是 ERC-4337 使用用戶操作作為對象,而不是常規交易的原因。不過,最近我們意識到,至少有必要在協議中加入 ERC-4337 中提出的部分功能。兩個主要原因是:
- EntryPoint 作為合約固有的低效率:每捆綁一次操作需要花費約 10 萬 gas,而每次用戶操作則需要花費數千 gas。
- 需要確保以太坊屬性延續到賬戶抽象用戶。
此外,ERC-4337 還擴展了兩個功能:
- Paymasters:允許一個賬戶代表另一個賬戶支付費用,打破了在驗證階段只能訪問發送人賬戶本身的規則,引入了特殊處理方法,以允許付款人機制並確保其安全。
- 聚合器:支持簽名聚合,如 BLS 聚合或基於 SNARK 的聚合。這對在 Rollup 上實現最高級別的數據效率是必需的。
現有的相關研究
- BLSWallet 代碼(使用聚合功能):https://github.com/getwax/bls-wallet
- EIP-7562 (最先提出賬戶抽象):https://eips.ethereum.org/EIPS/eip-7562
- EIP-7701(基於 EOF 的嵌入式賬戶抽象):https://eips.ethereum.org/EIPS/eip-7701
還有哪些工作要做,如何權衡?
剩下要解決的主要問題是如何將賬戶抽象完全引入協議。最近較受歡迎一種方案是 EIP-7701,旨在基於 EOF 實現賬戶抽象,即賬戶可以設置一個單獨的代碼段用於驗證,如果該賬戶設置了該代碼段,那麼在該賬戶交易的驗證步驟中就會執行該代碼。

EIP-7701 帳戶的 EOF 代碼結構
這種方法的優點在於,它清楚地表明有兩種等效的方法來查看本地賬戶抽象:
- EIP-4337(但作為協議的一部分)
- 一種新型的 EOA,其中的簽名算法是 EVM 代碼執行
如果我們一開始就嚴格限制驗證過程中可執行代碼的複雜性(不允許訪問外部狀態,甚至一開始就把 gas 限制得太低,以至於無法用於抗量子或保護隱私的應用),那麼這種方法的安全性就非常明顯了:它只是把 ECDSA 驗證換成了需要類似時間的 EVM 代碼執行。然而,隨著時間的推移,我們需要放寬這些限制,因為允許隱私保護應用在沒有中繼器的情況下工作以及量子抗性都是非常重要的。要做到這一點,我們確實需要找到方法,以更靈活的方式解決 DoS 風險,而不要求驗證步驟變得極端簡約。
主要的權衡似乎是在「儘快採納一些較少人滿意的方案」與「等待更長時間,也許會得到一個更理想的解決方案」間做出選擇。理想的方案很可能是某種混合方案。一種混合方案是更快地納入某些用例,留出更多時間來解決其他用例。而另一種方案是首先在 L2 上部署賬戶抽象版本。然而,這麼做的挑戰在於,要讓 L2 團隊願意為採用某個提案而付出努力,他們就必須確信 L1 和/或其他 L2 會在稍後採用兼容的版本。
我們需要明確考慮的另一個應用是密鑰存儲賬戶,它可以在 L1 或專用 L2 上存儲賬戶相關狀態,也可以在 L1 和任何兼容的 L2 上使用。要高效做到這一點,可能需要 L2 支持
L1SLOAD或REMOTESTATICCALL 等操作碼,也需要 L2 上的賬戶抽象實現作為支持。對路線圖的其他部分有何影響?
包含列表(Inclusion lists)需要支持賬戶抽象交易。在實踐中,包含列表的需求和去中心化 mempool 的需求最終將非常相似,儘管前者的靈活性稍高一些。
此外,賬戶抽象的實現最好能在 L1 和 L2 上儘可能統一。如果將來我們預計大多數用戶都會使用密鑰存儲 Rollup,那麼在設計賬戶抽象時就應該考慮到這一點。
EIP-1559 改進
EIP-1559 旨在解決什麼問題?
EIP-1559 於 2021 年在以太坊上激活,並顯著改善了平均區塊包含時間。

然而,目前 EIP-1559 的實施在以下幾個方面存在缺陷:
後來用於 Blob 的方案(EIP-4844)就是為了解決第一個問題而明確設計的,而且整體上更加簡潔。不過,EIP-1559 本身和 EIP-4844 都沒有試圖解決第二個問題。因此,目前的現狀是兩種不同機制的混淆狀態,甚至隨著時間的推移,兩種機制有可能都需要改進。
除此之外,以太坊資源定價還有其他一些與 EIP-1559 無關的缺陷,但可以通過調整 EIP-1559 來解決。其中的一個主要問題是平均情況與最壞情況的差異,即以太坊的資源定價必須設置為能夠處理最壞情況,即一個區塊的全部 gas 消耗佔用一個資源,但平均情況的使用量遠小於此,從而導致效率低下。

如何解決這些低效問題?
多維度 gas(multidimensional gas) 是解決這些低效問題的方法,可為不同的資源設定不同的價格和限制。這一概念在技術上獨立於 EIP-1559,但 EIP-1559 使其變得更容易。如果沒有 EIP-1559,如何優化打包一個具有多種資源限制的區塊,將是一個複雜的多維度「knapsack」問題。有了 EIP-1559,大多數區塊在任何資源上都不會滿負荷運轉,因此「接受任何支付足夠費用的交易」這一簡單算法就足夠了。
如今,我們已在執行和 Blob 上設置了多維度 gas,而原則上,我們可以將其擴展到更多維度,包括 calldata、狀態讀/寫和狀態大小擴展。
EIP-7706 為 calldata 引入了新的 gas 維度。同時,它也簡化了多維度 gas 機制,使所有三種類型的 gas 都歸屬於一個(EIP-4844 風格的)框架,從而解決了 EIP-1559 的數學缺陷。
EIP-7623 是解決平均情況與最壞情況資源問題的一個更徹底的方案,它在不引入全新維度的情況下,對最大 calldata 進行了更嚴格的限制。
另一個方向是解決更新率問題,找到一種更快的基費計算算法,同時保留 EIP-4844 機制引入的關鍵不變式(即從長遠來看,平均使用量正好接近目標值)。
現有的相關研究
- EIP-1559 常見問題:https://notes.ethereum.org/@vbuterin/eip-1559-faq
- 關於 EIP-1559 的經驗分析:https://dl.acm.org/doi/10.1145/3548606.3559341
還有哪些工作要做,如何權衡?
多維度 gas 主要有兩個缺陷:
- 增加了協議的複雜性
- 增加了填滿區塊所需的最優算法的複雜性
對於 calldata 而言,協議複雜性是一個相對較小的問題,但對於「EVM 內部」的 gas 維度(如存儲讀寫)而言,就成了一個較大的問題。難點在於,設置 gas 限制的不僅是用戶,還有調用其他合約時設置限制的合約。而現在,它們設置限制的唯一方式是一維的。
解決這一問題的一個簡單方法是,多維度 gas 只能在 EOF 內部使用,因為 EOF 不允許合約在調用其他合約時設置 gas 限制。非 EOF 合約在進行存儲操作時,必須支付所有類型 gas 的費用(例如,如果
SLOAD的費用是區塊存儲訪問 gas 限額的 0.03%,那麼非 EOF 用戶也將被收取執行 gas 限額的 0.03%)。對多維度 gas 的更多研究將有助於理解其中的利弊得失,並找出理想的平衡點。
對路線圖的其他部分有何影響?
多維度 gas 的成功實施可以大大減少某些「最壞情況」下的資源使用,從而減輕為支持基於 STARK 的哈希二叉樹而優化性能的壓力。為狀態大小的增長設定一個硬指標,將使客戶端開發者更容易規劃和預估未來的需求。
如上所述,由於 EOF 有著 gas 不可觀測的特性,它能讓更極端版本的多維度 gas 更容易實現。
可驗證延遲函數(VDF)
VDF 旨在解決什麼問題?
目前,以太坊使用基於 RANDAO 的隨機性來選擇提議者(proposer)。基於 RANDAO 的隨機性的工作原理是要求每個提議者透露一個他們事先承諾的秘密,並將每個透露的秘密混合到隨機性中。因此,每個提議者都有「1 位操縱權」,可以通過不出現來改變隨機性(需要付出代價)。這對尋找提議者來說還算合理,因為放棄一個提議就能給自己帶來兩個新提議機會的情況非常罕見。但對於需要隨機性的鏈上應用來說,這就不太合適了。理想的情況是,我們能找到一種更強大的隨機性來源。
VDF 如何運作?
可驗證延遲函數(VDF)是一種只能按順序計算的函數,無法通過並行化提高速度。一個簡單的例子就是重複哈希:計算
for i in range(10**9): x = hash(x)。通過 SNARK 正確性證明,輸出結果可用作隨機值。我們的想法是,輸入是根據 T 時可用的信息選擇的,而輸出在 T 時還不為人所知:只有在 T 時之後的某個時間,當有人完全運行計算時,才會知道輸出。由於任何人都可以運行計算,因此不可能隱瞞結果,也就無法操縱結果。可驗證延遲函數的主要風險在於意外優化(unexpected optimization)。如果有人發現瞭如何以比預期快得多的速度運行函數,那麼就可以根據未來的輸出結果操縱他們在 T 時透露的信息。意外優化可能通過兩種方式發生:
- 硬件加速:製造一種專用集成電路(ASIC),其運行計算循環的速度比現有硬件快得多。
- 意外的並行化:找到一種通過並行化更快地運行函數的方法,即使這樣做需要多 100 倍的資源。
創建一個成功的 VDF 就要避免這兩個問題,同時保持效率實用。(例如,基於哈希的方法的一個問題是實時的 SNARK 證明對硬件的要求很高。硬件加速通常通過讓公共利益參與者自己為 VDF 創建和分發合理接近最優的 ASIC 來解決。)
現有的相關研究
- vdfresearch.org:https://vdfresearch.org/
- 對以太坊使用的 VDF 攻擊的思考,2018 年:https://ethresear.ch/t/verifiable-delay-functions-and-attacks/2365
- 針對 MinRoot(一種擬議的 VDF)的攻擊:https://inria.hal.science/hal-04320126/file/minrootanalysis2023.pdf
還有哪些工作要做,如何權衡?
目前,還沒有一種 VDF 結構能完全滿足以太坊研究人員的要求。要找到這樣一個函數,還有很多工作要做。而如果我們找到了完美的 VDF 結構,主要的權衡就在於功能與協議複雜性和安全風險。如果我們認為 VDF 是安全的,但它最終是不安全的,那麼根據它的實現方式,安全性就會降低到 RANDAO 假設(每個攻擊者只能操縱 1 位)或更差一些。因此,即使 VDF 出錯也不會破壞協議,但會破壞應用或任何嚴重依賴 VDF 的新協議功能。
對路線圖的其他部分有何影響?
VDF 是以太坊協議中一個相對獨立的組成部分,除了提高提議者選擇的安全性外,它還可用於依賴隨機性的鏈上應用,以及加密的 mempool。不過,基於 VDF 的加密 mempool 仍依賴於額外的加密發現,而這些發現尚未出現。
需要牢記的一點是,鑑於硬件的不確定性,在生成 VDF 輸出及該輸出被納入間會有一些「間隙」。這就意味著信息的獲取需要提前幾個區塊。這可能是一個可以接受的代價,但在單個 slot 終結或委員會選擇等設計中應加以考慮。
混淆和一次性簽名(Obfuscation and one-shot signatures):密碼學的遙遠未來
我們要解決什麼問題?
Nick Szabo 最著名的文章之一是 1997 年發表的一篇關於「上帝協議」的文章。在這篇文章中,他指出多方應用通常依賴於「可信第三方」來管理交互。在他看來,密碼學的作用就是創建一個模擬的可信第三方來完成同樣的工作,而實際上不需要信任任何具體的行為者。

「數學上值得信賴的協議」,由 Nick Szabo 繪製
到目前為止,我們只是部分接近這一理想。如果我們需要的只是一個透明的虛擬計算機(數據和計算無法被關閉、審查或篡改),隱私並非目標,那麼區塊鏈就可以做到這一點,儘管可擴展性有限。但如果隱私是目標之一,那麼直到最近,我們還只能為特定應用制定一些特定協議,比如用於基本身份驗證的數字簽名、用於原始匿名形式的環形簽名和可鏈接環形簽名、基於身份的加密(以便在關於可信發行人的特定假設下實現更方便的加密)、用於 Chaumian 電子現金的盲簽名等。這種方法需要為每個新應用付出大量努力。
2010 年代,我們首次看到了另一種基於可編程加密技術的更強大的方法。我們可以使用強大的新協議(特別是 ZK-SNARK)為任意程序添加加密保證,而不是為每個新應用創建一個新協議。ZK-SNARKs 允許用戶證明他們所持有數據的任意聲明,證明的方式易於驗證,且除聲明本身外不會洩露任何數據。這是在隱私和可擴展性方面同時邁出的一大步,在我看來,它就像是谷歌在人工智能領域中提出的 transformer。數千年來針對特定應用的難題突然有了一種通用的解決方案,而我們只需將其插入,就能解決各種令人煩心的問題。
而且,ZK-SNARKs 只是三個類似的極其強大的通用原語中的第一個。這些協議非常強大,每當我想到它們時,我就會想起童年《遊戲王》中極其強大的埃及神卡組(強大到不允許在決鬥中使用)。同樣,在密碼學中,我們也有「三神協議」:ZK-SNARKs、全同態加密(FHE)和混淆技術(Obfuscation)。

ZK-SNARKs、全同態加密和混淆技術如何運作?
我們已經將 ZK-SNARKs 發展到了高度成熟的水平。在過去五年中,證明者速度和開發者友好性都有了很大提高,ZK-SNARKs 已成為以太坊可擴展性和隱私策略的基石。但是,ZK-SNARKs 有一個重要的限制,即需要知道數據才能對其進行證明。ZK-SNARK 應用中的每一個狀態都必須有一個「所有者」,而這個 「所有者」必須能夠批准對它的任何讀取或寫入。
第二種協議沒有這種限制,它就是全同態加密(FHE)。FHE 允許在不看到數據的情況下對加密數據進行任何計算。這樣,就可以為了用戶的利益在用戶數據上進行計算,同時保持數據和算法的私密性。它還可以擴展 MACI 等投票系統,使其具有幾乎完美的安全性和隱私保證。一直以來,FHE 飽受「實際應用效率太低」的詬病,但現在它已變得足夠高效,出現了相關應用。

Cursive 就是一個利用雙方計算和 FHE 來發現共同利益並保護隱私的應用
但 FHE 也有其侷限性,任何基於 FHE 的技術仍需有人持有密鑰。秘鑰持有的方式可以是 M-of-N 分佈式設置,甚至可以使用 TEE 增加第二層防禦,但仍是一個限制。
而這也引出了第三個協議,即不可區分混淆(indistinguishability obfuscation)。雖然該協議離成熟還很遠,但到 2020 年,我們已經有了基於標準安全假設的理論上有效的協議,而且最近正在開始實施。不可區分混淆允許創建一個「加密程序」來執行任意計算,從而隱藏程序的所有內部細節。舉個簡單的例子,你可以把私人密鑰放入一個經過混淆的程序中(該程序只允許你用它來簽署質數),然後把程序分發給其他人。那麼,這些人就可以使用該程序簽署任何質數,但無法取出密鑰。當然,不可區分混淆的功能遠不止於此,與哈希算法一起,它可以用來實現任何其他加密原語,甚至更多。
經過混淆的程序唯一不能實現的就是防止自己被複制。但為此,將有更強大的功能即將出現,即量子一次性簽名(quantum one-shot signatures),前提是人人都擁有量子計算機。

通過混淆和一次性簽名,我們可以建立幾乎完美的無信任第三方。我們唯一無法單獨使用加密技術做到的事情,也是我們仍然需要區塊鏈來實現的事情,就是保證抵禦審查。這些技術不僅能讓以太坊本身更加安全,還能在其基礎上構建更強大的應用。
為了瞭解這些基元如何賦能,我們可以通過「投票」這個例子來進一步瞭解。投票是一個很有意思的話題,需要滿足許多棘手的安全屬性,包括非常強的可驗證性和隱私性。雖然具有強大安全屬性的投票協議已經存在了幾十年,但如果我們需要一種可以處理任意投票協議的設計,比如二次投票、成對有界的二次融資(pairwise-bounded quadratic funding)、群組匹配二次融資(cluster-matching quadratic funding)等,那麼我們希望「計票」步驟會是一個任意的程序:
- 首先,假設我們將投票公開放在區塊鏈上。這樣我們就有了公開可驗證性(任何人都可以驗證最終結果是否正確,包括計票規則和資格規則)和抗審查性(無法阻止人們投票),但沒有隱私性。
- 其次,我們可以添加 ZK-SNARKs 保證隱私性:每張選票都是匿名的,同時確保只有獲得授權的投票者才能投票,而且每個投票者只能投一次票。
- 然後,我們可以加入 MACI 機制。投票會被加密為中央服務器的解密密鑰。中央服務器需要執行計票過程,包括剔除重複投票,併發布 ZK-SNARK 證明答案。這就保留了之前的保證(即使服務器在作弊!),但如果服務器是誠實的,就可以增加抗脅迫保證(coercion-resistance guarantee):用戶即使想證明自己是如何投票的,也無法證明。這是因為,雖然用戶可以證明自己投了一票,但卻無法證明自己沒有投另一票來抵消這一票。這可以防止賄賂和其他攻擊。
- 接著,我們可以在 FHE 內部進行統計,用 N/2 of N 的閾值解密計算對其進行解密,使得抗脅迫性保證為 N/2-of-N,而不是 1-of-1。
- 隨後,我們可以對統計程序進行混淆處理,並設計混淆程序,使其只有在獲得許可的情況下才能輸出結果,許可可以是區塊鏈共識證明,也可以是一定數量的工作證明,或者兩者兼而有之。這會使得抗脅迫保證幾乎是完美的:在區塊鏈共識的情況下,需要 51% 的驗證者串通一氣才能破解;而在工作證明的情況下,即使每個人都串通一氣,用不同的投票者子集重新進行統計以試圖提取單個投票者的行為的成本也是極其高昂的。我們甚至可以讓程序對最終計票結果進行小幅隨機調整,從而使提取單個投票者的行為變得更加困難。
- 最後,我們可以添加一次性簽名(one-shot signatures,一種依賴於量子計算的基本原理,允許簽名只能用於對特定類型的信息進行一次簽名),使抗脅迫保證真正做到完美。
不可區分混淆還允許其他強大的應用。例如:
- DAO、鏈上拍賣以及其他具有任意內部秘密狀態的應用。
- 真正通用的可信設置:可以創建一個包含密鑰的混淆程序,將
hash(key, program)作為程序的輸入,並運行任何程序提供輸出。有了這樣一個程序,任何人都可以將其放入自己的程序中,將程序中預先存在的密鑰與自己的密鑰結合起來,從而擴展設置。這可以用來為任何協議生成 1-of-N 的可信設置。 - 僅通過單個簽名進行驗證的 ZK-SNARKs:實現這一點非常簡單,在可信設置中,有人會創建一個混淆程序,只有當信息是有效的 ZK-SNARK 時,該程序才會用密鑰簽名。
- 加密 mempool:對交易進行加密,使其只有在未來發生鏈上事件時才會被解密。這甚至包括 VDF 的成功執行。
有了一次性簽名,我們可以讓區塊鏈免受 51% 的最終性逆轉攻擊,儘管審查攻擊仍然可能存在。與一次性簽名類似的基元可以賦能量子貨幣(quantum money),無需區塊鏈即可解決雙重支出問題,不過許多更復雜的應用仍然需要區塊鏈。
如果這些原語能夠變得足夠高效,那麼世界上大多數應用都可以去中心化。主要的瓶頸在於驗證實現的正確性。
現有的相關研究
- 不可區分混淆協議 2021 年: https://eprint.iacr.org/2021/1334.pdf
- 首個已知的一次性簽名構建:https://eprint.iacr.org/2020/107.pdf
- 混淆協議的嘗試實施 (1):https://mediatum.ub.tum.de/doc/1246288/1246288.pdf
- 混淆協議的嘗試性實現 (2): https://github.com/SoraSuegami/iOMaker/tree/main
還有哪些工作要做,如何權衡?
首先,不可區分混淆技術的發展極其不成熟, 候選結構的開發速度比應用慢上幾百萬倍,根本無法使用。不可區分性混淆以「理論上」多項式時間的運行時間而聞名,但實際運行時間比宇宙壽命還長。雖然,最新的協議已使運行時間不再那麼極端,但對於常規使用來說,開銷仍然太高。 此外,量子計算機甚至都不存在。我們目前在互聯網上可能讀到的所有構造,要麼是原型機,不能進行任何大於 4 比特的計算,要麼不是真正的量子計算機,因為它們雖然可能有量子部件,但不能運行真正有意義的計算,如肖爾算法或格羅弗算法。 最近,有跡象表明,「真正的」量子計算機已不再遙遠 . 然而,即使「真正的」量子計算機很快就會出現,普通人在筆記本電腦或手機上擁有量子計算機的那一天,很可能是在強大的機構獲得能破解橢圓曲線密碼學的量子計算機之後的幾十年。 對於不可區分混淆,一個關鍵的權衡是安全假設。有一些更激進的設計使用奇特的假設。這些設計的運行時間通常更符合實際情況,但這些特殊假設最終可能會被打破。隨著時間的推移,我們最終可能會對格密碼有足夠的瞭解,從而做出不會被打破的假設。然而,這條路風險更大。更保守的方法是堅持使用安全性可證明可還原為「標準」假設的協議,但這可能意味著我們需要更長的時間才能獲得運行速度足夠快的協議。
對路線圖的其他部分有何影響?
功能極其強大的加密技術可以徹底改變遊戲規則。舉個例子:
- 如果我們能得到像簽名一樣容易驗證的 ZK-SNARKs ,我們可能就不需要任何聚合協議了,我們可以直接驗證鏈上的簽名。
- 一次性簽名可能意味著更安全的權益證明協議。
- 許多複雜的隱私協議都可以用「僅僅」擁有一個保護隱私的 EVM 來代替。
- 加密 mempool 更容易實現。
起初,應用層會受益匪淺,因為以太坊 L1 本身需要在安全假設上予以堅守。然而,僅應用層的使用就能改變遊戲規則,就像 ZK-SNARKs 的出現一樣。





