隱私幣 Zcash 不「隱私」

買賣虛擬貨幣
前言如果大家讀過我前面寫的那篇雜談隱私幣的文章[林19],也許您會注意到我提到過 Zcash 在設計上從隱私交易角度看存在一些 over-engineering,本文將在這方面展開敘述。可審計的前文中提到 Zcash 實際上對 Zerocoin 的修正版,而這兩個方案的核心思想都可以在[ST99]中找到。[ST99]文章名字叫“Auditable, anonymous electronic cash”。可以看出這篇文章除了意在設計一個匿名電子貨幣,重點還在於要保證這個匿名貨幣是可審計的(Auditable)。[ST99]是這樣定義可審計性的:“An electronic cash system that has a complete report of transactions allows monitoring the same way the banking system is monitored today. ”翻譯成中文意思是:“一個能夠對所有交易有完整的報告且能像現有傳統銀行系統那樣對交易進行監視的電子現金系統”。[ST99]定義的需要記錄在案的系統事件包括:使用者開戶,使用者從銀行提錢,使用者轉賬給一個商家,商家往銀行儲存從使用者手中所得的貨幣。這篇論文對可審計性更精確的定義如下:“設計者必須可以描述系統中發生的所有事件。尤其是必須能報告誰在某個時刻取了錢。”
如何保證可審計性?

那麼具體可審計性這個性質是如何保證的呢?主要就是透過Merkle tree(見圖1)來記錄上述事件。這裡簡單介紹下Merkle tree是什麼:Merkle tree實際就是雜湊樹,只是被冠名成Merkle tree。

我們可以想象下圖中的Merkle tree每個葉節點對應一個未被花掉的Zcash。當有一個使用者在區塊鏈上生成或花掉某個貨幣,Merkle tree會將這個操作和使用者使用地址,即對應公鑰連結起來記錄在Merkle tree上。這也是為何Zcash的承諾如此複雜的原因:

從圖2中, 我們可以看到這裡Zcash對應的承諾是將使用者地址公鑰和數值 v 本身繫結到一起了,這就相當於在審計時可以將使用者身份和存取記錄繫結起來了。

如何實現可審計性?

[ST99]的Theorem 1是這樣論述該方案如何實現可審計性:“Auditability: We have already shown that if a polynomial time player can spend a coin c then it must have appeared as a leaf in the tree. As all the leaves in the tree are different, this shows that a one to one correspondence between usable coins and leaves in the tree (and therefore withdrawals) exists. 我們已經證明一個多項式時間參與者一旦花費一個貨幣c,那麼該貨幣必然作為一個樹葉出現。由於樹上所有葉子都不同,這意味著樹上葉節點(因此對應的取錢事件)和可用貨幣之間一一對應”。

換句話說,這裡之所以用了Merkle tree 很大程度上是為了保證在審計時透過查詢Merkle tree的操作記錄時有跡可尋。為了保證使用者在使用所取得電子貨幣的隱私性,使用者在支付這個操作上需要使用零知識證明來對應地證明使用者知道Merkle tree對應的某個葉節點的秘密,從而證明他對貨幣的所有權和貨幣的合法性。

Zcash

在Zcash中則是用零知識證明證明使用者執行Zcash pour操作時知道Merkle tree對應葉節點承諾的輸入。這也是為何我認為Zcash在可審計性上是和[ST99]這篇論文一脈相承的原因。

如果硬要說這兩個方案有什麼不同的話,那就是Zcash為了適應區塊鏈這個對通訊量和吞吐量(Throughput)有強要求的應用環境在技術細節上做了些改動,比如他們用了從Pinocchio[PHGR13]這篇文章衍生出來的零知識證明方案來保證常數級別的通訊量。

但我們注意到由於Zcash必須滿足上述可審計性的要求,由Merkle tree及Zcash承諾相關零知識證明所帶來計算量是相當高的,由這張從Zcash文章[SCGGMTV14]摘錄的圖3中可見,93%以上的計算都是Merk tree及其和可審計性相關的運算導致的。

由於Zcash提供隱私保護的交易(Shielded transaction)計算量如此之大,使用者在生成證明上需要花費非常長的時間,而同時Zcash又提供了無隱私保護的透明交易(transparent transaction ), 很多使用者就乾脆不選擇使用shielded transaction而直接使用透明交易。

換句話說,大部分時候由於Zcash在Usability上所存在的缺陷,很多使用者使用Zcash是無法保障其隱私性的。

另外一個頗為弔詭的地方是,[ST99]這篇文章設計一個很重要的出發點就是系統中沒有任何金鑰存在,進而保證能抵抗由此可能引發的針對金鑰資訊的諸如勒索之類的攻擊。

然而,由於Zcash設計中可審計性導致對應零知識證明的命題過於複雜,為了保證對應通訊量足夠小,結果對應的零知識證明反倒需要trusted setup,這個實際上違背了[ST99]的初衷。

很多人可能會問什麼是trusted setup,這個如果展開講可能又需要另外一篇文章,通俗地說,零知識證明的trusted setup過程可以類比成數字簽名方案的選擇公私鑰對的過程,負責初始化的人能掌握系統私鑰,換句話說他能用該私鑰合法生成對應該公鑰的簽名,這個性質對映到零知識證明系統中意味著可以合法生成證明。

如上文中提到的那樣,Merkle tree所用到的零知識證明的意義在於證明貨幣的合法性和使用者對貨幣的持有權,系統私鑰在手就可以合法地無限量偽造(或者說製造)貨幣且無法被人偵測。這顯然違背了區塊鏈去中心化的宗旨。

事實上Merkle tree在去中心化隱私支付中起的作用基本上可抽象成聚合器(粗略定義見本人前文[林19]),文獻中需要trusted setup基於bilinear pairing group無需Merkle tree的聚合器,且比Zcash中所用方案計算上更高效,且通訊量相當的還是有幾個的。

Zcash非得用這個在計算量上負擔如此之大的方案,除了可能存在的智慧財產權上的糾紛,我唯一能想到的理由就是Merkle tree在可審計性方面的優勢,但這總給人一種得不償失的感覺。

Suterusu專案將重點關注基於無需trusted setup常數級別通訊量的零知識證明的隱私保護區塊鏈方案,尤其是基於Mimblewimble協議和Cryptonote方案的改進和實現。

我們將重點使用基於group of unknown order的代數結構來設計實現無需trusted setup的常數級別通訊量的零知識證明方案,在此基礎上我們的技術模組將讓開發人員可以一鍵發更為高效安全的上述兩大型別隱私保護區塊鏈方案。

最後,我們還將提供跨鏈協議來保證對應匿名數字資產的流通性和可交換性。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;