零知識身分驗證與支付¶
「鏈上隱私」這個詞容易讓人誤解。比特幣的帳本完全公開,每筆交易、每個地址的餘額都可以查到,這是一種極端。Zcash 的遮蔽交易連金額都看不見,是另一種極端。多數情況夾在中間:地址被混淆、金額被遮蔽、但圖譜仍可被推測。這篇文章拆開「鏈上隱私」的可見度光譜,介紹 Monero 與 Zcash 兩種主流路線,討論鏈上分析(chain analysis)的能與不能,最後延伸到零知識身分驗證(zk-identity)在支付情境的可能應用。
鏈上隱私的可見度光譜¶
監控者觀察一條鏈,會看到四個層次:
- 帳戶(Account):誰擁有哪個地址。比特幣公開,Monero 用 stealth address 隱匿。
- 金額(Amount):這筆交易轉了多少。比特幣公開,Monero 用 RingCT 隱匿,Zcash 遮蔽交易完全隱藏。
- 時間圖譜(Transaction Graph):A 跟 B 之間的轉帳路徑。比特幣可重建完整圖譜,Monero 用 ring signatures 製造誘餌混淆,Zcash 遮蔽交易看不到圖譜。
- 元資料(Metadata):交易由哪個 IP、哪個錢包客戶端、什麼時間點送出。所有鏈都仰賴 P2P 網路層的隱私(搭配 Tor、Dandelion++ 等)。
「隱私穩定幣」的設計,多半在這四層中挑某幾層做隱匿。四層全部隱匿的設計實際上很少。理解這四層的差別,比記住「哪個幣最匿名」更有幫助。
Monero 怎麼做:環簽名 + Stealth Address + RingCT¶
Monero 的設計來自 2013 年的 CryptoNote 白皮書,三個核心機制:
- Stealth Address:每筆交易產生新的一次性收款地址,從鏈上看不到「Alice 的地址收了 100 元」,只看到「某個一次性地址收了 100 元」。Alice 用自己的私鑰能識別出哪些一次性地址是她的。
- Ring Signatures:寄件人簽署交易時,把自己的真實簽章混進其他過去交易輸出的「誘餌」(decoys)中。觀察者只能確定「這 16 個輸出之一是真的」,但無法確定哪一個。Monero 目前預設環大小為 16。
- RingCT(Ring Confidential Transactions):用 Bulletproofs+ 同態承諾隱藏金額,同時證明「輸入總和等於輸出總和」(沒有憑空印錢)。
三者組合下,鏈上看到的是:「某個一次性地址收到一筆隱藏金額,由 16 個可能寄件人之一發送」。沒有 Alice 與 Bob 的概念。
代價是區塊鏈體積大、交易驗證計算重、合規挑戰大。多數 KYC 交易所自 2020 年起陸續下架 Monero。
Zcash 怎麼做:zk-SNARKs 與遮蔽池¶
Zcash 走的是另一條更激進的路線。遮蔽交易(shielded transaction)用 zk-SNARKs(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)證明:
- 我有花費這個 note 的權限。
- 我創造的新 note 金額總和等於消耗的 note 金額。
- 沒有重複花費。
整個證明在鏈上只有幾百 bytes,驗證者不需要知道金額、地址、來源。從鏈上看到的遮蔽交易只有「有一筆遮蔽交易發生」,看不到金額、寄件人、收件人。
Zcash 經歷過幾代 zk-SNARKs:
- Sprout(2016):用 PGHR13,需要可信設定(trusted setup)。
- Sapling(2018):升級到 Groth16,可信設定範圍更小,效能大幅改善。
- Halo 2(2022 起逐步部署):完全去除可信設定的需要,是密碼學工程上的重大進展。
Zcash 的問題在使用率:遮蔽池(shielded pool)的使用人數遠少於透明池(transparent pool),實際上多數交易仍是透明的。隱私的密碼學保證再好,沒有足夠的遮蔽流量做混淆,被分析的風險仍在。
鏈上分析的能與不能¶
Chainalysis、Elliptic、TRM Labs 這類公司服務政府與金融機構,把鏈上資料轉成可訴訟、可凍結、可追溯的情報。它們公開揭露的能力與限制:
能做的:
- 比特幣的完整圖譜重建:跨多筆交易、多個地址,把屬於同一個實體的地址分群(clustering)。
- 已知交易所、混幣服務、暗網市場的標籤匹配。
- Zcash 透明池與遮蔽池的「進出邊界」分析:遮蔽池內部不可見,但進入遮蔽池的金額與時間可看到。
- Monero 早期低環大小時代的部分還原。環大小提升到 11 之後大幅降低,到 16 後幾乎不可行。
做不到的:
- Monero 當前環大小(16)下的真實寄件人辨識,計算上不可行。
- Zcash 完全遮蔽交易(shielded-to-shielded)的還原。
- 不公開的鏈上活動(如 P2P 直接交易、未上鏈的閃電網路通道內部)。
關鍵洞察是「混淆的有效性取決於使用人數」。當所有人都用遮蔽池,匿名集(anonymity set)夠大,分析難度極高。當只有少數人用,反而被標記為「可疑活動」。
零知識身分驗證:證明屬性而不洩漏屬性¶
zk-SNARKs 的應用不限於支付。把它套到「身分驗證」會出現一個全新的能力:證明你具備某個屬性,而不洩漏屬性的具體值。
例如:
- proof-of-age:證明「我超過 18 歲」,不洩漏出生年月日。
- proof-of-citizenship:證明「我是台灣公民」,不洩漏身分證字號。
- proof-of-uniqueness:證明「我是個獨特的人,不是 bot」,不洩漏是誰。
幾個正在發展的系統:
- World ID(前 Worldcoin):用 iris scan 產生獨特性憑證,使用者用 zk proof 證明「我是獨特的人」,不洩漏 iris 資料。
- Polygon ID:基於 Iden3 框架,把政府、銀行、醫療等機構發出的可驗證憑證(Verifiable Credential)轉成 zk proof。
- Anon Aadhaar:印度國民身分系統的 zk 包裝,使用者可證明「我有有效的 Aadhaar」,不洩漏號碼。
這些系統共同的設計目標是:把「我證明 X」與「我把 X 揭露給誰」徹底分離。傳統 KYC 流程是「我把護照影本給你,你決定信不信」。zk 身分驗證是「我給你一個證明,你能驗證但拿不到原始資料」。
支付情境的應用¶
零知識證明套到支付情境,能解的問題包括:
- 私密 KYC:證明「這筆交易來自合規 KYC 過的個人」,不洩漏個人身分。對交易所是合規滿足,對使用者是身分保護。
- 合規揭露:監管機構需要稽查時,使用者可以選擇性揭露特定屬性(例如「這筆超過 100 萬的交易,我是合規的個人」),其他資訊維持隱私。
- 捐款匿名:捐款人可證明「我已捐贈合法可抵稅金額」,不洩漏個人。對倡議組織保護金主,對主管機關仍可稽核總額。
- 薪資隱私:員工證明「我有資格接收這個 NGO 的薪資補助」,不洩漏個人薪資水準。
理論上很乾淨,實作上最大的瓶頸是「驗證者要相信底層的 zk 系統」。可信設定、軟體實作 bug、量子電腦對橢圓曲線的長期威脅,都是要管理的風險。
在地脈絡:VASP 法 2026 對隱私支付的影響¶
台灣 VASP 法 2026(虛擬資產服務業專法)將 KYC、Travel Rule 落實到加密幣交易所層級。這對隱私支付的影響有三層:
- 交易所端:本地交易所提供 Monero、Zcash 遮蔽交易等隱私功能會面臨明確監管壓力,可能下架或限制。
- 使用者端:使用者透過去中心化交易所(DEX)或 P2P 持有隱私幣的途徑仍開放,但匯入匯出本地法幣的管道受限。
- 倡議組織端:接受加密幣捐款的 NGO 必須在「捐款人匿名性」與「會計合規揭露」之間找平衡。零知識身分驗證可能成為新的選項,但生態還不成熟。
關於 VASP 法的詳細條文與技術影響,見 台灣 VASP 法 2026。對「為什麼匿名支付對社運倡議重要」的整體脈絡,見 為什麼匿名支付重要。社群在 匿名支付研究專題 持續追蹤這個方向。