屏蔽交易
屏蔽交易是一種完全私密的轉帳,發生在「屏蔽池」之內,把發送方、收款方與金額一次全部藏在單一零知識證明之後。機密交易只隱藏金額、環簽章只隱藏發送方,而屏蔽交易在鏈上基本上不洩漏任何東西,除了「發生了某筆有效花費」這件事。這是 Zcash 開創的模型:屏蔽池內的幣只以密碼學承諾的形式存在,交易以零知識證明「規則被遵守」,卻不暴露任何輸入。
這個池子運作得像一座巨大的共享金庫。每枚屏蔽幣都是一張「票據」——(數值、收款人、隨機數) 的紀錄——在鏈上只以隱藏承諾的形式儲存,這些承諾作為葉子被附加到一棵僅可追加的 Merkle 樹。要花用,你建構一個 zk-SNARK,同時證明四件事:你知道某張票據的秘密開啟方式,而其承諾是樹中的一片葉子(Merkle 路徑成員證明);該票據先前未被花用(你揭露它的作廢符,一個網路會記錄的唯一標籤);新的輸出票據格式正確;且數值平衡。驗證者只檢查這個簡潔證明與作廢符,從不知道是哪張票據被花掉、價值流向了誰。
因為匿名集是整個屏蔽池——可能達數百萬張票據——而非固定十六的環,其隱私上限遠高於環簽章系統。交易有幾種型態:屏蔽(透明轉屏蔽,t 轉 z)、解屏蔽(z 轉 t),以及完全私密的 z 轉 z。陷阱在於:隱私只與「實際使用該池的人數」一樣大,且關鍵地,只與「你行為中最弱的一環」一樣好:屏蔽進去、解屏蔽到新地址、且絕不讓時間或金額產生關聯。
誠實的弱點在於使用率與元資料。在屏蔽為可選的鏈上,多數使用者以透明方式交易,於是屏蔽集比理論上小;而往返模式(屏蔽 X、隨即把 X 解屏蔽到一個被標記的交易所)即使鏈上連結已斷,仍可能透過金額與時間關聯而洩漏。產生 zk-SNARK 的運算負擔也比一般簽章重,這在歷史上限制了低功耗裝置上的屏蔽交易,直到 Sapling 等證明系統才使之變得可行。
Alice 有一張價值 5 ZEC 的屏蔽票據。為私下付給 Bob 2 ZEC,她建構一筆 z 轉 z 交易:證明顯示她的票據在承諾樹中、揭露其作廢符,並輸出兩張新的票據承諾(2 給 Bob、3 找零給自己)。觀察者只看到一個證明、一個新作廢符、兩個新承諾——沒有地址、沒有金額。
一筆 z 轉 z 轉帳:整個花費都藏在一個零知識證明之內。
可選的隱私是實務上的致命傷:少有人使用的屏蔽池只提供很小的有效匿名集,因此隱私倡議者主張隱私應是預設,而非選用功能。