摘要:Aztec 是以太坊上一個旨在解決隱私問題的zk-rollup:也就是說它是唯一一個從頭開始構建的完全保護用戶隱私的Layer 2。為了理解隱私交易這種範式改變以及直接在網絡架構中建立隱私的重要性,我們得先討論“為什麼說以太坊不是一條隱私的鏈”。以太坊:一條公共區塊鏈大家可能已經聽說過公共…
Aztec 是以太坊上一個旨在解決隱私問題的zk-rollup:也就是說它是唯一一個從頭開始構建的完全保護用戶隱私的Layer 2。
為了理解隱私交易這種範式改變以及直接在網絡架構中建立隱私的重要性,我們得先討論“為什麼說以太坊不是一條隱私的鏈”。
以太坊:一條公共區塊鏈
大家可能已經聽說過公共賬本這個詞,它由兩個部分組成:賬戶和余額。
以太坊上最原始的交易是將 以太坊 從一個賬戶(地址) 發送到另一個賬戶。網絡通過增加某個賬戶的餘額和減少另一個賬戶的餘額來記錄這些交易—— 換句話說,ETH 實際上並沒有”轉移“。
讓我們詳細看看一個例子:snoop狗g.eth 想發送一筆交易給cozomomedici.eth。
只是兩個商人
以下是交易的經過:Snoop 一開始有100 個ETH,然後他的賬戶扣了20 個ETH。而Cozomo 一開始有0 個ETH,然後他的賬戶被計入20 個ETH。 Snoop 的最終賬戶餘額為80 ETH,Cozomo 則為20 ETH。轉賬完成。
ETH 轉賬交易的賬本示意圖
我們可以在etherscan.io 上看到每個賬戶計入和扣除的交易款項,下圖中顯示的”ins“(轉入) 和”outs”(轉出) 記錄是公開的,所有人可見。下面是一個ENS 名為twinkienft.eth 的近期交易歷史記錄。
在這裡記錄了ta 所有的光輝事蹟:twinkienft.eth 的公共交易!
你可能會問:”誰是twinkienft.eth 啊?” 我也沒有頭緒,但我可以看到ta 所有的交易記錄!你去etherscan.io 上看看,你也可以觀察所有被記錄在區塊鏈的交易。
就在etherscan.io 的首頁!
大家可以看到這裡明顯有問題:我們不僅可以看到所有的賬戶交易,還可以看到它們的金額、資產和交易方。
這其實就是公共區塊鏈帶來的作用。由於其公開屬性,公共區塊鏈具有可審計性和可驗證性。
但這也意味著,如果某人的隱私洩露了(無論是有意還是無意的) —— 我們可以查看他們的完整交易歷史。
跟踪公共交易數據是一項大生意:像Chainalysis 和Nansen 這樣的公司會做一些複雜的分析來關聯各種錢包並監控其交易活動,並對誰持有著什麼資產做出概率假設。
大家想像一下,如果你每次刷卡買羊角包時,都得向全世界展示你的銀行賬單。這真的很傻,對吧?
這就是以太坊的現狀。
解決方案:賬戶加密?
“呃,好吧,” 你可能會說,”這很容易解決,只要將賬戶、餘額和持有者加密就可以了。” 咄,白痴!我怎麼會這麼蠢。
這就是我每天的感受…
除了討論一下加密賬戶如何實現之外:
請回憶一下之前所講的賬本。經過對賬戶和交易加密之後,我們會得到:
似乎行得通
那麼加密之後,網絡應該如何檢查賬戶,確保沒有雙花或者共謀的作惡行為。事實證明,要解決這個問題是非常困難的。
回到剛才那個例子。如果Snoop 和Cozomo 需要進行交易,那麼他們必須要交互,因為網絡不能幫助檢查他們是否進行了有效的交易。
1. Snoop 請求Cozomo 的加密賬戶狀態
2. Cozomo 向Snoop 發送已加密的狀態
3. Snoop 對Cozomo 的狀態進行解密,確認交易前的餘額
4. Snoop 向Cozomo 發送一筆加密支付
5. Cozomo 向Snoop 發送他最新的加密狀態
6. Snoop 解密Cozomo 的最新狀態,確認交易後的餘額(並且Cozomo 確實獲得了他被承諾的金額)
這種精心設計的流程有很嚴重的缺點:很昂貴、很耗時,並且你每次只能和一個人進行交互—— 雙方還必須同時在線。
更糟糕的是,當他們結束了一場雙方對話之後,任何一方都沒有辦法說服世界上的其他人,他們只是互相驗證了他們的一筆交易。
使用票據(note) 記賬不香嗎?
但是,如果我們把歸屬結構顛倒過來呢?以太坊默認使用賬戶模式,其中賬戶中包含餘額。換句話說,查一下賬戶,你就會得到它的餘額信息。
那如果我們換一種思維方式呢?比如說某筆資產(用note 來表示) 的持有者是某人。
賬戶裡包含餘額信息vs. 資產票據推導出持有者
比特幣 就是使用這種模式,叫做UTXO (unspent transaction output, 未使用的交易輸出)。但是不用糾結這個術語是什麼意思了,把UTXO 當作現金(銀行票據) 就好。
讓我們先思考一下,為什麼使用現金記賬會更安全、更隱私—— 或者更準確地說,比基於賬戶的系統更安全、更隱私。
它之所以安全,是因為只有交易現金的雙方知道其所有權已經易手!而全宇宙的其他人都不會知道。
你可以把現金交易模式想像成某件物品(note) 的所有權的變更,而賬戶交易模式則是兩個賬戶的狀態的變更。
圖示:某張加密票據的所有權變更
當一筆Aztec 交易在進行時,網絡只需簡單地為給定的票據重新分配所有權,而不是更新賬戶餘額(增加或減少餘額)。
為什麼這個模式這麼有用?事實證明,加密一張票據要簡單得多,因為只需在上面寫兩個東西:這個票據值多少錢以及它的所有者是誰。那麼當它轉手時,只需塗掉舊的所有者的名字,然後寫上新的所有者的名字。
在Aztec 上進行簡單轉賬
那麼,在一筆簡單的票據交易中,到底會發生什麼呢?
假設Snoop 有兩張面值為50 ETH 的票據(總額為100 ETH),而Cozomo 手上沒有任何票據。
Snoop 手上的那兩張票據需要銷毀掉,並且要創建兩張新票據:面值為80 ETH 的票據分給Snoop,面值為20 ETH 的票據則分給其新的所有者Cozomo。
但是,如果必須披露這些票據的價值,如何保護隱私呢?
嗯..他們並沒有披露這些信息,至少沒有公開。當然,Snoop 和Cozomo 知道他們交易的資產價值,就像一筆現金交易一樣,但他們不需要向全世界公開。
為了保護他們相互的隱私,Snoop 發布了一筆帶鎖的交易,他知道只有Cozomo 的私鑰才能解開這把鎖。類比一下,這有點像將這張票據放進一個小小的保險箱中。當然,他們都知道箱子裡有什麼(20 ETH),所以Snoop 必須要相信Cozomo 不會在屋頂上大喊:“有人剛給我轉了20 個ETH!”
但除此之外,所有權被重新分配的票據會返回到一個數據結構中,這個數據結構包含了所有曾經創建的票據—— 這是一個默克爾樹哈希,我將在下文簡要地介紹一下它。
在網絡觀察者看來,系統的狀態會是什麼樣子的—— 每張票據的面值和所有者都是完全加密的。
好管家
我們知道Snoop 銷毀了兩張票據,創建了兩張新的票據,然後把其中一張新票據轉給了他的朋友Cozomo。那麼我們如何確保他們不會共謀作惡,比如雙花?如果Snoop 銷毀了總值為100 ETH 的兩張票據,然後創建了總值為200 ETH 的兩張新票據,那怎麼辦?或者,他們直接創建任意數額大小的票據呢?
回想一下這兩個步驟:
1. Snoop 銷毀了兩張面值為50 ETH 的票據並分別創建了面值為20 ETH 和80 ETH 的票據
2. Snoop 將面值為20 ETH 的票據轉給Cozomo
為了確保第一步沒有發生可疑的行為,Snoop 需要做的就是向系統(Aztec) 證明他打算創建的兩張票據和他準備銷毀的兩張票據是等值的。
這被稱為連接-分割交易,這種交易符合這條簡單的等式:A + B = C + D
下面是燒腦部分,跟上了!
為了證明轉出票據(C + D) 等值於轉入票據(A + B, 或者說100 ETH),Snoop 在他的瀏覽器中本地生成了一個零知識證明(zero-knowledge proof,ZKP)。
利用零知識證明,他能夠證明出這條等式A + B = C + D,而無需揭露他們的任意資產價值。
然後Aztec 驗證了這一證明,並表示:”由於這是零知識證明,那麼這一定是有效的。“ 此時,智能合約銷毀這兩個轉入票據,然後生成兩個轉出票據,並將新的轉出票據作為加密承諾記錄在票據登記表中。
所有權證明
值得討論的是,如何在Aztec 中證明票據的所有權,這和在以太坊中證明類似。你如何證明你控制了某個以太坊地址的訪問權—— 通過使用你的錢包對一個信息進行簽名。
那麼你如何證明你能夠訪問Aztec 的某張票據?一個非常非常奇特的加密簽名叫做零知識證明。
這個證明說,”在Aztec 狀態中,a) 存在著一張特定價值的票據,b) 我擁有這張票據的所有權。“
那麼Aztec 系統的狀態怎麼存儲?它存儲在兩個默克爾樹中:
-
一顆是票據樹,包含著所有曾經創建的票據;
-
一顆是無效樹,包含著所有曾經被銷毀的票據
如果你在Aztec 中擁有一張票據,這意味著這張票據存在於”票據樹“中,並且在”無效樹“中不存在對應的無效票據。
左邊這棵”票據樹“生氣勃勃,而右邊這個”無效樹“則傷心欲絕。如果右邊的樹會說話,它可能會說”我討厭死你了“之類的話。
當我們說到”銷毀“一張票據,這實際上意味著添加一張無效票據到”無效樹“中,而不是刪掉”票據樹“中的一張票據。
默克爾樹簡圖
為了發送那些已證明為我所有的票據,將需要創建一個全新的默克爾樹(和默克爾根)。一旦”票據樹“和”無效樹“的默克爾根移動到新的值中(換句話說,系統的狀態已更新),這些默克爾根就會被發佈到以太坊的主鏈上,且交易就會被視為已記錄。
寫在最後
我希望本文能讓讀者深刻地理解到為什麼隱私如此具有挑戰性:我們需要在不違反或暴露用戶數據的情況下,驗證交易是合法且正確執行的。
這些獨特的限制意味著隱私保護架構必須從頭開始架構。 Aztec 是唯一一個以這種方式構建的L2 —— 用戶的隱私通過其核心架構受到保護,並利用零知識證明來維護網絡運作。
來源| Aztec Network
作者| Jon Wu