JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

零知識證明

讓別人確信某個陳述為真,卻又不洩露任何別的東西——連它為什麼為真都不說。同一套把戲,既能藏住一個祕密,也能讓一份小小的證明替成千上萬筆交易作保。

一個聽起來不可能的承諾

想像一個色盲的朋友,手裡拿著兩個球——一紅一綠——除了顏色之外完全一樣。在他眼裡兩個球看起來沒有區別,他根本不相信顏色有什麼不同。而你能清清楚楚看到顏色。你要怎樣說服他這兩個球確實不一樣,卻又不告訴他哪個球是哪個?

妙處就在這裡。你的朋友每隻手各握一個球,藏到背後,要麼交換、要麼不換——由他自己決定,你看不見。然後他把手再亮出來,問你:*我換了沒有?* 如果兩個球的顏色真的不同,你每一次都能答對。要是它們其實一模一樣,你最多只能猜——大約一半對。玩上十輪,你靠瞎猜十輪全過的機率大約只有千分之一。最後你的朋友*確信*這兩個球不一樣,卻對哪種顏色在哪隻手裡一無所知。這道縫隙——證明一件事為真,卻不洩露事實本身以外的任何東西——正是零知識證明的全部精髓。

三條性質,以及它們各自的價值

密碼學家用三條要求把這個想法釘死。一個好的零知識證明必須是完備的:只要陳述為真,誠實的證明者總能說服誠實的驗證者。它必須是可靠的:只要陳述為假,作弊的證明者就偽造不出一份能矇混過關的證明(除非撞上微乎其微的運氣)。它還必須是零知識的:驗證者只學到「這條陳述為真」,而且他*單憑自己*就能造出一份看起來一模一樣的對話記錄——所以證明裡沒有任何可被提取的祕密。

搞區塊鏈的人為什麼要在意這個?因為鏈所做的事,很大一部分就是*把別人已經做過的活兒重新核一遍*。每個全節點都把每筆交易重跑一遍,以確認結果誠實無誤。這很安全,卻很浪費。零知識證明給出另一筆划算的交易:重活只幹一次,附上一份簡短的證明,讓其他所有人去驗證這份證明,而不必重做那些活兒。驗證可以比重新執行便宜上千倍——而同一套機器還能順帶把輸入保密。

用大白話講 zk-SNARK

色球遊戲是一場*對話*——你來我往,要好多輪。但在區塊鏈上,你想要的是一錘定音的東西:一份小小的檔案,誰都能驗,還不必跟你交談。這正是 zk-SNARK 所提供的。這個拗口的名字拆開來其實很整齊。簡潔(Succinct):證明極小——常常只有幾百位元組——無論它背後的計算有多龐大。非互動(Non-interactive):不用一來一回;證明者貼出一份證明就走人。知識論證(Argument of Knowledge):它表明證明者確實*知道*某個有效的祕密輸入,而不只是說這樣一個輸入可能存在。

幾百個位元組怎麼能為上百萬步計算作保?背後的深層把戲,是把*整段計算*變成一個巨大的代數方程式,再讓證明者在驗證者隨機挑出的某一個點上去求值。一個在任何地方對不上的多項式,在一個隨機點上幾乎必然也對不上——所以一次隨機抽查,就頂得上把全部都查一遍。撐起公鑰密碼學的,正是同一套數學,它讓證明者把那些數值「鎖定」下來,事後無法悄悄改動。

PROVER  (does the hard work, holds secrets)
  inputs: secret x, public statement S
  -->  builds proof  pi   (a few hundred bytes)

VERIFIER (cheap, knows no secret)
  has: statement S, proof pi
  -->  check(S, pi) == true ?   (milliseconds)

  true  => S holds, and prover knew a valid x
  false => reject;  x itself never travels
這種不對稱:證明既昂貴又私密,驗證則又快又公開。

兩大收益:隱私與擴容

第一大收益是隱私。普通的鏈上交易把一切都攤開——付款人、收款人、金額。換成零知識證明,你可以*只*貼出一份證明,它說:「這筆支付遵守了每一條規則——付款人確實擁有這些幣,沒有憑空造幣,進出帳目對得平」——而金額和當事人始終隱而不露。網路拿到了它需要的誠實,卻不必動用監視。同樣的套路,能讓你證明「我已年滿 18 歲」或「我在白名單上」,卻不必透露你的生日或身份。

第二大收益是擴容,而如今它的聲量更大。ZK Rollup 把成千上萬筆交易拿到一旁,在更便宜的硬體上執行,再向主鏈貼出新的狀態、足夠任何人據以重建該狀態的交易資料,外加*一份* zk-SNARK,證明這其中每一筆交易都有效。基礎鏈從不重跑它們;它只核對那份小小的證明。成千上萬筆交易,坍縮成一次驗證——而由於證明在數學上是可靠的,資料又公布在人人都能看到的地方,Rollup 繼承的是主鏈的安全性,而不是要你去信任某個營運方。

誠實的邊界,與一個量子問題

這一切都不是免費的,而且這門學問還很年輕。生成證明*計算量很大*——要花上幾分鐘,或動用專用硬體,才能為一批交易出具一份只需毫秒就能驗完的證明。描述一段計算的電路繁複細密,很容易出現微妙的錯誤,而驗證器裡的一個 bug 可能是災難性的——正因為大家對它是盲目信任的。這些都是活躍的工程難題,正在快速收窄,但尚未解決。

還有一個更長遠的問題。今天許多 zk-SNARK,依賴的是與經典公鑰密碼學相同的難度假設——那類容易驗證、卻被認為難以逆推的問題。一台足夠強大的量子電腦,理論上可能攻破其中某些特定的假設,這正是推動後量子密碼學的同一份擔憂。讓人安心的一點是:這是個有解題方向的已知問題。STARK 風格的證明已經只依賴雜湊函數,而雜湊函數看起來對量子攻擊頗有韌性,研究者也正積極地在後量子的根基上構建 SNARK。

退一步看,這個圖景頗為驚人。一個念頭——*證明一件事,別的什麼都不透露*——悄悄地一次回答了區塊鏈兩個最棘手的張力:如何在一本公開帳本上保持私密,以及如何在不要求人人重做人人活兒的前提下擴容。這正是零知識證明身處前沿、而非偏居一隅的原因。接下來,我們會看到 ZK Rollup 及其同類是怎樣被縫進一張真正運轉的網路的——把這段優美的數學,變成你真能發出去的交易。