零知識證明的核心賭注是:你可以讓別人相信一件事為真,卻不必透露為什麼真。昨天談 CBDC 時,我們把貨幣一路追到央行的資產負債表,看見「數位現金」本質上是一筆記在央行帳上的負債;而一旦貨幣與身分、交易全數上鏈,隱私就成了懸而未決的問題。今天往下一層走,看看密碼學怎麼回答這個問題——零知識證明(zero-knowledge proof,ZK)與建立其上的 ZK-rollup,正是「既要驗證、又不洩露」這道矛盾的技術解。

📖 學

一個洞穴的比喻

經典的 ZK 故事是「阿里巴巴洞穴」。一個環形山洞,中間有一道需要通關密語才能打開的門,把洞分成左右兩條路。佩姬(證明者)宣稱她知道密語,但不想告訴維克多(驗證者)密語是什麼。做法是:維克多在洞口等,佩姬先走進其中一條路;接著維克多喊「從左邊出來」或「從右邊出來」。如果佩姬真的知道密語,不管她原本走哪條,都能開門從指定的一邊走出來;如果她其實不知道,那她只有一半機率剛好站對邊。玩一次也許矇對,但重複二十次還每次都對,維克多就幾乎可以確定她真的知道——而他自始至終沒聽到密語一個字。

這個小故事濃縮了零知識證明的三個性質。完整性(completeness):如果陳述為真,誠實的證明者能說服誠實的驗證者。健全性(soundness):如果陳述為假,作弊的證明者除了極小的機率外,無法蒙混過關(洞穴裡就是「每次都猜對」那個微乎其微的機率)。零知識(zero-knowledge):驗證者除了「這件事為真」以外,得不到任何額外資訊。三者缺一,這套機制就不成立。

從「你問我答」到「一次交卷」

洞穴故事是互動式的:維克多得反覆出題,佩姬反覆回答。這在密碼學上沒問題,但拿到區塊鏈上就麻煩了——你總不能要求全世界的節點輪流跟證明者玩二十輪問答。於是有了 Fiat-Shamir 這類技巧,把「驗證者的隨機提問」換成「對前面內容取雜湊值當作提問」,讓證明者可以自問自答、一次生成一份非互動式證明。任何人事後拿到這份證明,自己驗一次就好,不需要跟原作者連線。ZK-rollup 能運作,靠的正是這種非互動性:證明打包好貼上鏈,以太坊的合約獨自驗證即可。

SNARK 與 STARK:同一目標的兩條路

目前主流的兩個家族是 zk-SNARK 與 zk-STARK,名字都在講同一件事——succinct(簡潔)、非互動的知識論證——差別在底層假設與取捨。

zk-SNARK 的證明極小、驗證極快,但通常需要一次可信設定(trusted setup):在系統啟動時產生一組公共參數,過程中會冒出一份「有毒廢料(toxic waste)」,若被人偷偷留下,理論上就能偽造證明。所以這類設定往往辦成多人參與的「儀式」,只要其中一個人誠實銷毀自己那份碎片,整體就安全。此外 SNARK 多半建立在橢圓曲線配對上,這意味著它不抗量子——未來夠強的量子電腦可能破解。zkSync、Polygon zkEVM、Scroll、Linea 大致屬於這一派。

zk-STARK 反過來:不需要可信設定(transparent,透明),安全性只依賴雜湊函數的抗碰撞性,這是密碼學裡相對保守、也抗量子的假設;代價是證明體積明顯更大。StarkWare 的 Starknet、StarkEx 走的就是這條路。可以粗略記成一句話:SNARK 賭橢圓曲線、換來小證明;STARK 賭雜湊函數、換來免設定與抗量子。哪個更好沒有標準答案,取決於你更在意證明大小、驗證成本,還是長期的量子風險。

ZK-rollup:把運算搬到鏈下,只把「證據」搬回鏈上

擴容的想法其實很直白。以太坊主網每筆交易都要全球節點重算一遍,昂貴又慢。ZK-rollup 的做法是:把成千上萬筆交易搬到鏈下(Layer 2)集中執行,然後對「這一整批交易確實被正確處理、狀態該這樣更新」生成一份簡潔的有效性證明(validity proof),只把這份證明加上最精簡的狀態摘要貼回以太坊。鏈上的驗證者合約花毫秒級的時間驗完,一旦通過,這批交易當場定案。

關鍵在於它是有效性證明而非「事後挑錯」。這正是 ZK-rollup 與 Optimistic rollup 的分野:後者預設交易都對、留一段挑戰期讓人檢舉,所以提款要等;ZK-rollup 用數學當場證明「這批就是對的」,不必等待期。搭配 2024 年 EIP-4844 引入的 blob(專為 rollup 資料設計的廉價資料通道),ZK-rollup 的手續費又降了大約一個數量級。

不只是擴容:隱私與身分

回到昨天的隱私難題。ZK 的用途遠不止把交易做便宜——它讓「證明某事而不透露細節」變成可組裝的積木。你可以證明「我年滿十八歲」卻不出示生日,證明「我的錢包餘額足夠」卻不公開餘額,證明「我是某個合法名單裡的人」卻不暴露我是名單裡的哪一個。這類 ZK 身分證明正被用來設計隱私錢包與合規之間的橋樑。Vitalik 近期也把 ZK 放到以太坊的核心藍圖裡——「Lean Ethereum」構想用 STARK 證明重新設計共識與一台對證明友善的精簡虛擬機,等於把 ZK 從二層的擴容工具,往協議底層再推一步。

2026 的進展與批評

技術在走向成熟,但別把它當萬靈丹。最現實的批評是證明成本:生成一份證明所需的運算量遠大於驗證,這讓「即時證明(real-time proving)」成為當前的攻堅目標,不少團隊在拚專用硬體與 GPU/ASIC 加速。與此同時,可信設定的信任假設、實作層面的臭蟲(電路寫錯一樣會出事)、以及各家證明系統彼此不相容,都還是待解的工程與生態問題。ZK 已經從論文走進了主網,但「便宜、快速、人人可證」還在路上。

🧠 記

  • 零知識證明讓一方證明「某事為真」而不洩露任何多餘資訊,三性質為完整性、健全性、零知識。
  • 互動式證明靠反覆問答建立信任;Fiat-Shamir 把提問換成雜湊,得到可一次交卷的非互動式證明,這是上鏈的前提。
  • zk-SNARK:證明小、驗證快,但常需可信設定,且基於橢圓曲線、不抗量子。
  • zk-STARK:免可信設定、抗量子,安全性只賴雜湊,代價是證明體積較大。
  • ZK-rollup 把交易搬到鏈下批次執行,只回貼一份有效性證明,以太坊合約毫秒級驗完即定案。
  • 有效性證明是 ZK-rollup 與 Optimistic rollup 的分野:前者當場證明、免挑戰期,後者事後挑錯、提款要等。
  • 最大瓶頸是證明生成成本,「即時證明」與專用硬體加速是 2026 的攻堅方向。

✍️ 實踐

花十五分鐘,親手把「零知識」的直覺跑一遍,不寫任何程式碼。找一個朋友或就對著紙筆,扮演阿里巴巴洞穴:你當證明者,宣稱知道某個「密語」(實際上就是心裡想的一個數字),對方連續喊十次「左」或「右」,你每次都要「答對」。先假設你真的知道、每次穩過;再假設你不知道、只能猜,記錄下你矇對幾次——親身感受「重複越多次、作弊機率越趨近於零」這件事,就是健全性的核心。接著打開下面 ethereum.org 的 ZK-rollup 文件,只讀「How do ZK-rollups work」那一段,對照今天的「鏈下執行、鏈上驗證」在腦中把資料流走一遍:交易進 L2、批次執行、生成證明、貼回主網、合約驗證。最後用一句話寫下你的疑問,明天丟給 AI——例如「為什麼有效性證明可以毫秒驗完,生成卻要那麼久?」帶著問題讀,比讀完就忘有用得多。

🔗 延伸學習

💬 問 AI

我正在學零知識證明與 ZK-rollup,請幫我:
1. 用阿里巴巴洞穴的比喻,逐步解釋完整性、健全性、零知識這三個性質分別對應故事裡的哪個環節。
2. 用一張對照表比較 zk-SNARK 與 zk-STARK:可信設定、證明大小、驗證成本、抗量子性、底層假設。
3. 說明 ZK-rollup 的「有效性證明」與 Optimistic rollup 的「詐欺證明」在信任模型與提款時間上的差別。
4. 解釋為什麼「證明生成」比「證明驗證」貴這麼多,2026 年有哪些降低成本的方向(硬體、遞迴證明等)。
最後出三題選擇題檢驗我是否真的理解,答案附在最後。