零知識證明原理?特性與類型介紹/常見應用/儲備證明查詢範例
零知識證明(Zero-Knowledge Proof,ZKP)是一種密碼學技術,應用在區塊鏈中,例如交易所的儲備證明、隱私幣、區塊鏈擴容等。
許多人在查看加密貨幣交易所的資產儲備報告時,會看到zk-SNARK,或是ZK開頭的各種名詞,它其實是零知識證明的一種形式。
零知識證明的特點是在不透露細節的情況下,讓別人相信你掌握了資訊,實務上是透過複雜的演算法來達成。
這篇文章市場先生先介紹零知識證明,包含特性與類型,最後分享常見的應用方式,以及加密貨幣交易所使用哪種零知識證明來提供儲備證明。
這篇文章為個人經驗分享與資料整理,無任何投資推薦買賣之意,投資必定有風險,虛擬貨幣屬於極高風險的投資標的,投資前務必自行研究判斷。
本文市場先生會告訴你:
零知識證明的原理?
零知識證明(英文:Zero-Knowledge Proof,ZKP)是一種驗證方法,你可以在不透露細節的情況下,讓其他人相信你掌握了一個秘密。
舉例來說,有人宣稱自己知道一個保險箱密碼,但他不能直接告訴你密碼,那要怎麼證明他真的知道?
其實很容易,只要他能在眾人面前打開保險箱,就能讓別人相信(即證明)他真的知道密碼,而不用告訴別人密碼。
一個完整的零知識證明,是由證明者(Prover)和驗證者(Verifier)組成,驗證者會提出挑戰,要求證明者完成一些只有真的知道秘密才答得出的問題,如果證明者不知道秘密,亂猜很難通過測試。
零知識證明最早於1985年由三位密碼學家Shafi Goldwasser、Silvio Micali、Charles Rackoff共同提出,發表在論文《The Knowledge Complexity of Interactive Proof Systems》,因此它其實是密碼學的加密驗證技術,也稱為零知識協定(Zero-Knowledge Protocol)。
零知識證明最大的價值,就是不必提供隱私資料,就能進行驗證。
零知識證明的技術能為隱私提供更大的保護,在你要提供證明時,不用透露核心或原始資料,就能為資訊正確性提供保證,特別適合用在原始資料敏感、或不便透露的場合。
零知識證明可以應用在包括:
- 保護交易隱私
- 加速區塊鏈驗證效率、節省驗證時間與成本
- 身分驗證及匿名登入、匿名投票
- 合規性與審計,並同時保護敏感資料
以投票做舉例,
一般在投票前,我們都要先核對投票者的身分,
但在去中心化區塊鏈領域,每個人都很在乎隱私和保密性,即使在鏈上參加去中心化治理DAO投票,也不想讓人知道自己的身分。
此時就可以透過零知識證明技術,隱藏投票者的隱私和投票意向,又能證明這位投票者具有投票資格。
一個典型例子就是MACI投票系統(英文:Minimal Anti-Collusion Infrastructure),它使用加密和零知識證明隱藏每個人的投票方式,只公開揭露最終結果,除了保障投票者隱私,也可以有效制止賄選、買票等行為。
零知識證明的3個特性:完整性/健全性/零知識
特性1. 完整性(Completeness):按照規則一定能通過驗證
白話來講就是只要這個資訊真實存在,按驗證流程走,一眼就能分辨資訊是真是假,不需多疑。
前面舉例的開保險箱範例,就是一個具有完整性的零知識證明。
因為只要保險箱能被正常開啟,即使不說出密碼,也足夠讓人相信他真的知道密碼,不太需要懷疑。
零知識證明的驗證規則其實是事先約協議好的,因此當一項零知識證明具有完整性時,只要持有資訊的人完全誠實,通過驗證程序一定能精確的呈現證據,而想驗證的人也一定能被說服。
特性2. 健全性(Soundness):幾乎不可能透過偽造通過驗證
簡單說就是偽造證明難度要非常高,高到幾乎不可能成功,例如只有數萬億分之一的機率。
同樣用開保險箱來舉例:
如果他真的知道密碼,應該可以順利、快速打開保險箱;
如果他不知道密碼,只能亂猜,或一個個號碼慢慢試,每次嘗試都等於一次驗證,想要一次猜對的機率很小,連續幾次打不開的話,你也看破他根本不知道密碼。
要注意的是,零知識證明是一種機率性證明,而不是決定性證明,只能透過技術性方法,把錯誤機率降到可忽略的程度,但不能完全消除。
延續保險箱的例子,隨機一次猜對密碼的機率很低,但卻不等於零;如果你不放心,我們可以在保險箱上裝10道不同密碼的門鎖,想要連續、隨機猜對,並打開保險箱的機率就大幅降低。
這說明了零知識證明其實需要一系列可靠性非常高的機制來做驗證。
因此實務上通常不靠人工,而是結合數學公式、演算法、程式語言來自動執行。
例如在區塊鏈上,主要是計算透過橢圓曲線、或雜湊演算法(Hash function),比對雜湊值(Hash value)做驗證。
特性3. 零知識(Zero-knowledge):驗證的人得不到任何細節
這是零知識證明的核心精神:你能說服別人相信你,但他得不到任何細節。
透過零知識證明機制,能讓驗證的人相信「你掌握一項秘密」,但無法知道這個祕密的細節,也無法推出任何其他額外資訊。
例如在保險箱的例子中,我們看到他順利開啟保險箱時,只知道他真的掌握密碼,但誰也不知道密碼具體的數字。
零知識證明在區塊鏈上的應用
零知識證明在區塊鏈領域特別常見,因為區塊鏈本身建立在密碼學之上,而用戶普遍重視隱私保護。
常見的應用有下面幾種:
1. 交易所資產儲備證明:增加用戶對交易所資產安全性的信心
自2022年FTX交易所破產後,全球加密貨幣交易所開始主動提供資產儲備證明(Proof of Reserves, PoR),證明平台持有足夠的資產,能保障用戶資金安全。
以幣安Binance交易所為例,早期只使用默克爾樹(Merkle Tree)結構來生成PoR報告,但這種做法可能洩露部分用戶資訊,以及無法揭露帳戶負餘額問題。
後來幣安引入zk-SNARK技術結合Merkle Tree結構,用戶可以自行驗證自己的資產是否包含在總儲備中,而平台不需知道用戶實際擁有多少資產,進一步提升隱私性與透明度。
2. 擴容方案、提高節點驗證效率:鏈下交易壓縮+正確性驗證
零知識證明可以應用在區塊鏈加速去中心化節點驗證,保護隱私同時增加驗證處理效率。
例如Zk-Rollup就是一種運用了零知識證明技術的Layer 2擴容方案。
當區塊鏈主網速度慢、成本高、應用受限時,就會發展所謂的擴容技術,簡單說就是把大量交易資料先在鏈下處理好,然後把這些交易壓縮打包成一筆,搭配一個非互動式零知識證明(zk-SNARK或zk-STARK),一併上傳到主鏈。
主鏈只要驗證這份證明,就能信任整批交易都是有效的,不必逐筆驗證,大幅降低主鏈負擔,例如:zkSync、StarkNet、Polygon zkEVM 都是Zk-Rollup實際案例。
3. 隱私幣:鏈上私密轉帳
隱私幣(Privacy Coins)就是可以選性隱藏交易資訊(例如發送人、接收人、金額)的加密貨幣。
區塊鏈技術其實是一個公用帳本,交易紀錄是放在鏈上給大眾檢查,例如比特幣,每一筆交易紀錄、交易地址完全公開。
但有些用戶希望驗證過程中可以保持隱私,這時就會透過零知識證明來隱藏資訊。
舉例來說,公鏈Zcash上的原生加密貨幣ZEC就是使用零知識證明技術,協助用戶隱藏交易的發送人、接收人和金額,保護用戶的身份,防止交易被追蹤。
4. 隱私投票:DAO治理決策
隱私投票比較常應用在DAO的治理投票上,主要能隱藏投票人身分以及投票意向,不讓投票結果提前曝光,防止賄選或操縱。
區塊鏈本身是一個公開透明的帳本,智能合約會忠實呈現每個人投票結果給大家查驗,但這也讓賄選有機可趁。
舉例來說,一個與社群串通好、想操縱投票的人,可以到鏈上查驗投票結果,確認那些人(即地址)投了對自己有利選項,再對這些人支付額外報酬,這就是一種賄選。
如果是透過MACI之類,以零知識證明加密後的投票,每位選民的身分、投票意向都被隱藏,只能看到最終結果。
在零知識證明的保護下,選民可以收了錢,但卻不遵守賄選者的要求,想賄選的人就難以操縱投票。
5. zkBridge:不需要信任中介的跨鏈橋
zkBridge可以去掉信任中介,用數學證明做跨鏈,讓兩條區塊鏈的跨鏈橋智能合約直接溝通。
跨鏈橋(英文:Bridge)是一種讓你把某條鏈上的資產,轉移到另一條鏈上的協議。
舉例來說,你可以在以太坊區塊鏈上存入一顆ETH,並在BSC區塊鏈上生成一顆Wrapped ETH。
雖然跨鏈橋是靠智能合約執行,但以太坊區塊鏈無法讀取BSC區塊鏈上的紀錄,同理BSC區塊鏈也不能讀取以太坊區塊鏈資料,兩方需要一個受信任的中介機構或多簽機構參與。
zkBridge則是運用零知識證明,直接在以太坊智能合約中生成存入一顆ETH的證明,再發送到BSC區塊鏈約,智能合約驗證後就可以直接生成Wrapped ETH,不再需要受信任的中介機構
典型的實例是Polyhedra Network,它的zkBridge已支援BNB Chain、Polygon、Ethereum、Arbitrum等多條鏈跨鏈傳輸,並以zk-SNARK驗證狀態。
6. 區塊鏈上身分驗證:個人隱私保密
在區塊鏈應用中,身分驗證牽涉到個人隱私,例如:用戶是否年滿18歲、是否通過KYC、是否為DAO成員等,如果直接把資料儲存在在鏈上,等於直接公開用戶隱私。
以Polygon ID為例,它是運用零知識證明技術去的中心化身分驗證系統,用戶可在Polygon ID錢包中儲存自己的身分憑證(例如:年齡、國籍、KYC結果等),需要驗證時,只要提供一段經過加密的零知識證明,就向應用方證明你符合資格。
舉例來說,如果你想使用一個年齡限制大於18歲的DApp,你只需要提供「年滿18歲」的零知識證明,就能通過平台驗證,不用告知明確的出生年月日。
儲備證明ZKP查詢 – 以幣安為例
簡短介紹幣安
Binance 幣安交易所,目前為全球虛擬貨幣規模排名最大的交易所,於2024年全球註冊用戶達2.4億人次,支援超過100種加密貨幣。
幣安使用說明教學:幣安使用圖解教學
下面以幣安交易所為例,示範怎麼查詢幣安交易所提供的儲備證明,以及它使用的零知識證明類型。
1. 首先要打開幣安App並登入,之後按照下圖操作可以進入【儲備證明專區】。
2. 之後畫面會直接顯示驗證機制,幣安採用的是zk-SNARK驗證
幣安透過Merkle Tree+zk-SNARK提供PoR報告,證明用戶資產在交易所內維持1:1儲備,同時保障用戶資產安全與隱私。
零知識證明在其他領域的應用案例
除了區塊鏈,零知識證明也在常應用在金融、身份驗證、網路投票等領域。
但大多數還在早期開發、或是小規模測試階段,大規模落地的應用較少。
1. 金融產業:銀行讓客戶無須提供具體資產金額,就能完成資產證明,進行借貸審核
傳統金融機構在處理客戶貸款、風險評估時,通常要你提供詳細的收入、資產明細等敏感資訊,不時也有銀行客戶資料外洩的新聞。
荷蘭國際銀行(ING Bank)就開發了一種叫作零知識範圍證明(Zero-Knowledge Range Proof)的技術,它可以讓用戶證明某個數字(例如收入)在某個範圍內,但不需要揭露實際金額。
舉例來說,你可以透過零知識範圍證明,只讓銀行知道你的月收入範圍,例如台幣6萬~8萬之間,但不知道詳細數字,既能讓銀行評估放貸風險,也保護了用戶個資。
2. 鏈下身份驗證:無須出示證件或最小化出示資料,就能證明自己符合資格(例如年滿18歲)
透過零知識證明來做身分驗證是個已經發展許久的概念,但前仍在早期階段,離應用落地還有一段距離。
舉例來說,如果要到商店買香菸,你需要證明自己年滿18歲,傳統作法是要你出示身份證、健保卡、駕照等證件,但這些證件會一口氣洩露姓名、生日等不必要的個資。
透過零知識證明技術,你可以只提供「年滿18歲」這件事的數學證明,卻不用提供其他多餘資訊。
這種身分驗證方式對個資保護、數位隱私、Web3應用和政府系統都非常有潛力,只是在鏈下發展較慢。
目前歐盟推動的數位身分法規(eIDAS 2.0)中,有強調數據最小化原則(Data Minimization),需求方只能接收特定交易所需的數據,也有嘗試把零知識證明整合到其中。
3. 網路投票:不用透漏身分即可確認投票資格
現實中的投票制度,一般會先驗證你是否有投票資格,因此投票前要攜帶身份證、印章等資料,但這不只可能洩漏隱私,還可能讓選票被追蹤。
零知識證明可以讓選民在不透露身份的情況下,向系統證明自己擁有投票權;也可以在投完票後,向系統證明已經完成投票,而不會讓別人知道你投給誰,甚至不知道你是誰。
一個實際案例是由學術團隊開發的開源投票系統Helios Voting。
它結合零知識證明的概念,已被普林斯頓大學、比利時魯汶大學等機構採用,應用在校園選舉或組織治理。
雖然這種投票機制在大型公共選舉還未普及,但是在DAO、社群治理等領域,已有許多實驗性專案,或小規模測試。
零知識證明的技術類型:互動式 / 非互動式
零知識證明有兩大類型,主要差別在於證明者和驗證者是否需要來回溝通:
1. 互動式零知識證明
互動式零知識證明(英文:Interactive ZKP)就像是一場連續問答遊戲。
驗證者會一直提問題,證明者必須持續回答,直到驗證者相信證明者真的知道正確答案。
同樣用開保險箱舉例,驗證者會要求證明者開、關保險箱多次,可能是10次、100次或1,000次,而且每次關上後都重新把轉盤、數字位置撥亂,直到他真的相信證明者為止。
互動式零知識證明的好處密碼學上設計簡單,每次驗證都要雙方都要重新互動,安全性高。
但這種方法有一個缺點:如果驗證者和證明者事先串通,就能用欺騙的方式通過驗證,在需要涉及第三方信任的應用中,會產生可靠性疑慮。
舉個例來子說明第三方信任的可靠信疑慮:
餐廳聘雇廚師前,會請應徵的人出示廚師證照,有沒有一種可能,這張證照是買通監考官、作弊拿到的?
這就是一種涉及第三方信任的可靠性疑慮,雖然事後可能會被發現,但當下也可能蒙混過去。
在區塊鏈領域上,每筆交易紀背後都錄涉及資金移轉,不能接受任何信任疑慮,因此大都使用非互動式零知識證明。
2. 非互動式零知識證明
非互動式零知識證明(英文:Non-Interactive ZKP)就像是錄製一段影片,證明你知道答案。
簡單說證明者只要向驗證者傳送一次證明,驗證者可以隨時對那項證明做驗證,也不需要再和證明者互動。
延續開保險箱的舉例,證明者可以把開保險箱的過程錄成影片交給驗證者,但影片中看不到按下的密碼,且影片有加密簽章,不能被偽造,之後驗證者就能針對這影片反覆查驗,不需要再找證明者開保險箱。
非互動式的好處是:
- 不用即時連線:驗證者和證明者都不需要同時在線,適合在網路上或區塊鏈上使用
- 較難作弊:一次性生成證明,並使用公共參數防止作弊
目前區塊鏈上常見zk-SNARK和zk-STARK兩種非互動式零知識證明:
1. 零知識簡潔非互動式知識論證(zk-SNARK)
零知識簡潔非互動式知識論證的原文是:Zero-Knowledge Succinct Non-Interactive Argument of Knowledge,簡稱zk-SNARK。
其中簡潔指的是生成的證明大小(Proof Size)很小,zk-SNARK使用橢圓曲線密碼學(Elliptic Curve Cryptography,ECC),每個證明大小只有幾百個位元組(bytes),因此驗證速度很快。
但zk-SNARK運作前,要先產生一組公共參數(用於證明與驗證),這個過程叫做:可信任設置(Trusted Setup),如果有人以非法手段控制公共參數,就能偽造出可通過驗證的虛假證明。
傳統zk-SNARK是透過多方參與,產生一組通用參考字串(Common Reference String,CRS)作為公共參數,過程稱為設置儀式(Setup Ceremonies) ,可公開審核,只要有一位參與者誠實,可信任設置就是安全的。
2. 零知識可擴展透明知識論證(zk-STARK)
零知識可擴展透明知識論證的的原文是:Zero-Knowledge Scalable Transparent Arguments of Knowledge,簡稱zk-STARK。
可擴展(Scalable)代表就算驗證資料龐大,zk-STARK也能維持計算效率,適合大量交易或複雜驗證;透明(Transparent)的意思則是使用完全公開、無需信任的演算法來建構證明,不需要可信任設置來存放公共參數。
zk-STARK使用雜湊演算法(Hash Function)來建構證明,這種演算法結構運算簡單、但結果不可逆,也無需可信任設置,對抗量子電腦攻擊的能力更強,因此整體安全性更高。
但它生成的證明較大,一般需要幾十KB(Kilobytes)左右,長久下來很佔磁碟空間,這增加了zk-STARK的設置成本,也降低了驗證的速度。
市場先生快速重點整理
1. 零知識證明(ZKP)是一種驗證方法,壤你在不透露細節的情況下,讓其別人相信你掌握了一個秘密。
2. 零知識證明必須同時具備完整性、健全性與零知識三種特性。
3.零知識證明不依靠人工驗證,而是用複雜的演算法來達成。
4. 零知識證明分為互動式與非互動式兩種,應用方面以非互動式占大多數,例如:zk-SNARK和zk-STARK。
5. 現實中零知識證明主要應用在區塊鏈領域,例如:儲備證明、隱私幣、擴容方案等。
最後,
分享幾篇區塊鏈應用的文章:
這篇文章為個人經驗分享與資料整理,無任何投資推薦買賣之意,投資必定有風險,虛擬貨幣屬於極高風險的投資標的,投資前務必自行研究判斷。
FB社團-加密貨幣學習討論區
區塊鏈、虛擬貨幣是很新的領域,也有很高的風險,我也還在持續研究了解中。
我會把自己一些研究心得或體驗紀錄在FB社團中,
也歡迎對這領域比較有興趣想多了解的人一起交流。
FB社團連結:加密資產研究筆記
(加入須審核)
如果覺得這篇文章有幫助,
幫我按個讚,分享給更多人看到,謝謝!
一般留言