ZK的力量:去中心化世界的隱私驅動創新

1. 引言

零知識證明(Zero-Knowledge, 或簡稱ZK)技術可以解決去中心化世界中的隱私和安全問題。本文透過DEX、Oracle、投票和拍賣四個實例,說明了ZK技術在其中扮演的關鍵角色。 ZK技術被用來確保在DEX上的交易既可以被驗證,又可以保護使用者的隱私,隱藏使用者的身分或其他交易細節。基於ZK技術可以保證從預言機取得的資料的準確性,防止資料在傳輸或計算過程中被竄改。在區塊鏈投票項目中,有資格的投票者可以以匿名身分進行投票,投票資訊能夠防止被預先篡改,也是ZK技術能夠解決的。該技術也可以為區塊鏈拍賣專案中的競標者提供身分隱私保護功能,同時也能解決虛假出價的問題。

2. 去中心化世界的隱私風險

區塊鏈沒有秘密,所有資訊都在公眾視野之下,這使得其在隱私保護方面有所欠缺。此外,許多智能合約的運作離不開鏈下數據,這就帶來的額外的安全風險。下文,我們將詳細探討這兩大特性所引發的安全性問題和潛在風險。

  1. 區塊鏈的公開透明性所引發的安全問題

區塊鏈的公開透明性保證了交易的可追溯性,但同時也引發安全性問題。例如,DeFi中的個人隱私的洩漏風險和搶跑交易風險。

隱私外洩:透過位址標籤染色法、交易IP匹配和廣播節點探針等方法可以輕易關聯鏈上位址在現實世界中的真實身分。這些分析方法不僅可以揭露使用者的身份,也揭露了使用者的行為模式和投資策略。例如,某個地址的頻繁交易或特定類型的交易活動會透露出該用戶的投資偏好或習慣,這種資訊經常被不正當地用於競爭優勢或不恰當地利用。

搶跑交易:攻擊者能夠利用區塊鏈的透明度來監控待確認的交易隊列。他們透過分析這些未處理交易,可以在交易中設定更高的手續費,從而誘導礦工優先處理這些交易。這樣,攻擊者可以在其他用戶之前執行交易,以獲取先機優勢,為自己謀取利益。這種行為不僅扭曲了交易過程的公平性,還會導致市場操縱和不利於其他用戶的情況。

因此,DeFi協議的設計和實施應充分考慮這些潛在的安全威脅。我們應考慮引入額外的隱私保護措施,以保護用戶免受隱私外洩和交易行為分析等風險。

  1. 區塊鏈在獲取鏈下資料時存在的安全風險

在區塊鏈中,智慧合約無法直接取得鏈下數據,它們只能存取區塊鏈上的交易數據或其他合約的狀態。智能合約是區塊鏈上自動執行的程序,其運行結果必須在所有節點中保持一致性,即給定相同的輸入,其執行結果必須完全一致。由於鏈下數據可能會變化,如果智能合約直接獲取鏈下數據,則不同節點在執行相同的合約時可能會得到不同的結果,這將破壞區塊鏈的一致性。

然而,在許多場景下,智能合約需要依賴鏈下的數據。例如,一個DEX需要取得特定股票或數位貨幣的最新價格。這些價格數據一般需要從鏈下的金融市場或其他交易所取得。區塊鏈系統通常會透過預言機來獲取鏈下的數據。當智能合約需要鏈下資料時,它可以請求預言機,預言機將獲取鏈下資料並返回給智能合約。而且,預言機也可以將鏈上的資料傳輸至鏈下。

不過,引進預言機也帶來了新的安全風險,在某些場景下預言機會因錯誤或惡意行為提供不準確的數據。因此,預言機的設計和實現需要對安全性給予高度重視。

涉及投票和拍賣的區塊鏈項目,也需要考慮特別的安全保護措施。區塊鏈技術為投票平台提供了透明和不可篡改的特性。然而,篩選合格選民、選民匿名投票、防止投票資訊被預先篡改已經成為了新的挑戰。鏈上拍賣的核心問題是虛假出價和帳戶可視。當你可以看透對方的籌碼,那你就擁有了先發優勢。

3. 隱私化驅動場景創新

3.1 ZK Private DEX

區塊鏈的公開透明性為DeFi領域的許多專案帶來了隱私上的挑戰。面對這樣的挑戰,Salus將以DEXs為例,探討ZK技術在增強DEXs隱私權保護的關鍵角色。

假設有一個具有隱私保護功能的private DEX。透過使用ZK技術,它能夠隱藏交易資訊的部分內容,同時也能驗證這些交易的有效性。在這個DEX中,只有部分交易資訊是公開的,例如所有註冊用戶,他們的銀行帳戶、存款和提款的資產名稱以及數量,如圖1所示。交易者本人會知道自己的全部交易訊息,但其他交易者無法看到他人的完整交易資訊。以下,以五個具體的交易事件為例:

圖1 只知道部分公開資訊的Private DEXs ,圖片來源https://arxiv.org/pdf/2309.01667.pdf 假設在這個private DEX平台上發生了五筆交易,他們相對應的事件資訊是:

  1. Alice在平台上存入了1000 USD。

  2. Bob在平台上存了10 BTC,此時BTC的價格是1000美元。

  3. Alice在平台上進行交易,將800 USD兌換為0.5 BTC,此時BTC的價格是1,600美元。

  4. Alice在平台上提取了0.3 BTC,此時BTC的價格是2000美元。

  5. 平台記錄了Alice的總支出和總收益,分別是480美元和600美元。

這個private DEX平台基於ZK技術實現了隱私保護功能,其中完整的交易資訊只對參與交易的用戶可見。該平台不會公開展示完整的交易事件訊息,而是提供隱私的事件資訊。接下來,我們將詳細說明這些隱私事件資訊具體指什麼,以及如何進行驗證:

  1. 當存款1000美元時,銀行帳戶會顯示Alice的身份。然後Alice會得到一個由平台產生的資產憑證或簽名。為了防止雙重支付並確保合規,簽署的訊息必須包含超出資產細節的額外屬性。這些屬性包括一個唯一的資產標識符,即Alice的使用者識別符。這些資訊應該被隱藏,以保持用戶的匿名性。 Alice被要求基於ZK技術來證明她的盲化使用者識別碼(the blinded user identifier)等於她的註冊憑證(registration credential)。為了滿足稅務報告-客戶合規要求( tax-report-client-compliance),交易所中賣出資產的收益和提現交易需要被計算。這需要在存款和交易中包括資產購買時的確切成本。為此,我們在資產憑證中引入購買價格作為額外屬性。

  2. 當Bob存入10 BTC時,平台不知道Bob的身份。因為這筆交易並不是法幣存款。

  3. 當Alice以800美元兌換0.5 BTC時,她使用1000美元的資產憑證請求兩個新的憑證,分別是剩餘的200美元和0.5 BTC,保持隱藏其細節。平台在特定條件下批准她的請求,這些條件包括基於ZK技術證明她有足夠的美元,確保憑證共享相同的用戶標識符,確認剩餘美元金額為非負,匹配BTC的價格與最新的憑證,並驗證總交易價值等價。

  4. 當提取0.3 BTC時,類似於交易操作,除了被交換的資產。 Alice也在區塊鏈上驗證了以提取的BTC的收據。

  5. 當總支出為480,總收益為600時,Alice展示了一個帶有她身份的有效註冊憑證,並請求一個帶有新索引的更新註冊憑證,將支出和收益重置為零,並獲取一個用於向監管機構展示的文件憑證。文件憑證包含Alice的真實身份,正確的支出480和收益600,以及一些監管輔助資訊。由於支出和收益被平台隱藏以避免資訊洩露,Alice應證明承諾的支出和收益等於她註冊憑證中的數值,平台會進行盲簽名(sign blindly)。 Alice解除盲簽名並將訊息簽名對提交給監管機構進行稅務報告。

3.2 zkOracle

假設存在一個基於區塊鏈的農業保險智能合約,該合約根據預言機提供的天氣數據來判斷是否向投保的農場主支付賠償。例如,如果某個地區發生嚴重乾旱,那麼該地區的農場主就能從這個保險合約中獲得賠償。

但是,如果預言機因為某些原因錯誤報告了該地區的天氣狀況,例如實際上該地區正遭受嚴重乾旱,而預言機卻報告稱降雨量正常,這種錯誤的信息將導致智能合約做出錯誤判斷,因而拒絕向實際上正面臨乾旱困境的農場主支付賠償。

從上面這個例子可以看出,保證預言機提供資料的準確性是至關重要的。 zkOracle是基於ZK技術的預言機,一個無需信任且安全的預言機。以下,我們將具體介紹傳統預言機和zkOracle的主要區別,並解釋為什麼ZK技術在其中發揮了關鍵作用。

傳統的預言機可以被劃分為三種不同的類型,我們將從以下四個維度來闡述和比較每種預言機之間的差異:

Input Oracle

Output Oracle

I/O Oracle

用途

將鏈下資料傳到鏈上環境

將鏈上資料傳到鏈下環境

使用鏈下計算的自動化智能合約

資料來源

鏈下數據

鏈上數據

鏈上數據

計算

簡單(聚合,上傳)

複雜(索引,聚合,過濾,或其他複雜計算)

複雜(索引,過濾,觸發條件檢查等)

輸出

鏈上數據

鏈下數據

鏈上數據和目標智能合約調用

在本文中,我們將專注於對Output Oracle和I/O Oracle的討論。這兩種預言機的數據都源自於區塊鏈,這意味著這些數據已經經過了區塊鏈的驗證和保護。如何保證預言機計算和傳輸的安全性是我們討論的重點問題。

為了實現一個安全的預言機,我們可以對output oracle和I/O oracle進行ZK改造,實現output zkOracle和I/O zkOracle。以下部分將比較傳統oracle、output zkOracle和I/O zkOracle的工作流程,並闡述output zkOracle和I/O zkOracle在哪些方面進行了ZK改造。

1. 傳統預言機(Traditional Oracle)

傳統預言機的工作流程如圖2所示:

  • 步驟①:從資料來源取得數據

  • 步驟②:在computation組件中對資料進行計算

  • 步驟③:將計算結果輸出

ZK的力量:去中心化世界的隱私驅動創新

圖2 Traditional Oracle

可以使用ZK技術對傳統預言機工作流程中的步驟②和步驟③進行ZK改造,步驟①保持不變:

2. Output zkOracle

步驟②-ZK改造:計算與生成ZK證明

在computation元件中基於ZK技術對從資料來源取得的資料進行計算,通常是排序、聚合和過濾,計算的結果是一個ZK證明。使計算和輸出可驗證。

步驟③-ZK改造:驗證ZK證明

步驟②計算得到的ZK證明可以在智能合約或任何其他環境中被驗證。可以透過確認步驟②驗證計算的有效性。

ZK的力量:去中心化世界的隱私驅動創新

圖3 Output zkOracle

3. I/O zkOracle

步驟②-ZK改造:計算與生成ZK證明

I/O zkOracle的計算組件由output zkOracle和input zkOracle組成。 I/O zkOracle與前述的output zkOracle相比,計算的主要內容變多了,即input zkOracle涉及將鏈下的計算結果設置為智能合約調用的calldata。這兩部分的結合,使得利用複雜的鏈下計算來實現智能合約自動化操作成為可能。

步驟③-ZK改造:驗證ZK證明

步驟②計算的輸出包括鏈上資料(以calldata完成智能合約呼叫)和一個可驗證的ZK證明。這個ZK證明可以在智能合約或任何其他環境中被驗證。驗證可以確認步驟②計算的有效性。

ZK的力量:去中心化世界的隱私驅動創新

圖4 I/O zkOracle 3.3 匿名投票

在區塊鏈上進行的投票活動,所有資訊都是公開的,這會使投票者的隱私資訊被潛在的攻擊者獲取。基於區塊鏈的投票項目面臨兩大挑戰:

  1. 投票者的身分隱私:保證投票者隱私,需要使用匿名身分進行投票。

  2. 投票結果的可驗證性:防止投票資料被竄改,需要設計一個機制以確保投票結果的真實性可驗證。

在基於區塊鏈的投票項目中,如何既保護投票者的身分隱私,又確保投票結果的可驗證性,是一個需要巧妙處理的問題。利用ZK技術,可以有效地實現這兩者的平衡。

在區塊鏈匿名投票項目中,結合使用ZK技術和merkle tree實現匿名投票並進行驗證。我們將投票流程分為三個主要階段

1. 使用雜湊和簽章方法為投票者產生匿名身份

投票者在進行投票之前需要使用自己的真實身份資訊進行資格確認和身份驗證。驗證通過後,他們將得到一個與自己真實身份無關的匿名身份(anonymous identity)。投票者以該匿名身分進行投票可以保護個人識別資訊不被洩露。

2. 基於ZK技術和merkle tree驗證投票者匿名身份

投票者使用匿名身份進行投票之前,需要驗證其匿名身份,驗證通過的投票者才可以投票。

使用一個merkle tree來儲存所有投票者的匿名身份,這樣可以防篡改,並保證投票者身份資訊的完整性。

將投票者的匿名身分資訊產生的身份承諾作為葉子結點,由一定數量的葉子結點建構merkle tree。使用一個基於merkle tree的驗證電路驗證投票者的身分。驗證需要三方面的數據:

  1. 目前投票者的身分承諾,記作輸入目標節點(input target node)。

  2. Merkle tree的根節點(root node)。

  3. 輸入目標節點到根節點的路徑索引(path index)。路徑索引表示目標節點在merkle tree中的位置信息,由左0右1表示。

在由輸入目標節點和路徑索引產生根節點的過程中,使用由兄弟節點和使用者資訊產生的身份承諾來確定使用者的身份。為了確保用戶選票的唯一性,我們使用經過哈希處理後的身份識別碼和外部識別碼作為投票證明。

3. 投票並驗證

這個階段可以分為以下六個步驟,如圖5所示:

  • 計算問題:將投票者的匿名身分插入merkle tree中,並進行驗證。

  • 等價轉換:將問題依序轉換為ZK低階電路(low-order circuit)、R1CS結構(rank-1 constraint system)和QAP(quadratic arithmetic program)問題,以產生驗證和證明金鑰的過程。

  • 公共參數產生:為了確保ZK系統的安全性,需要一個可信任的設定來產生用於產生證明和驗證證明的公共字串。

  • 產生ZK證明:可以使用ZK電路為投票者產生ZK證明。為了產生這樣的證明,需要以投票者匿名身分資訊和投票資訊作為ZK電路的輸入,這一步驟通常在鏈下完成。之後,產生的ZK證明就會上傳到區塊鏈上。

  • 驗證ZK證明:在鏈上驗證證明,即驗證投票的有效性,也就是驗證投票者的投票是否滿足這個電路有界系統。如果驗證成功,則傳回1,否則回傳0。

  • 投票合約(Voting contract):投票合約根據部署的驗證合約和驗證秘鑰對投票結果進行驗證。在使用者與合約互動的過程中,ZK證明的產生和驗證都是基於ZK電路進行計算的,可以很大程度上保護投票者的身份資訊。

ZK的力量:去中心化世界的隱私驅動創新

圖5 投票驗證過程

基於此,我們可以實作一個區塊鏈匿名投票項目。

3.4 隱私拍賣

區塊鏈公開拍賣存在一個弊端。由於區塊鏈交易都是公開的,任何人都可以觀察到投標者的出價和資金狀況。如果一個投標者知道了其他投標者的出價。或者,他知道了其他投標者的身份,就可以根據區塊鏈公開的交易資訊得知此帳號擁有的可用資金。這個投標者就可以根據其他投標者的出價或可用資金來調整自己的出價以贏得拍賣。公開區塊鏈拍賣面臨投標者身分公開和資金曝險等挑戰。隱私拍賣可以防止這種不公平現象的發生。

在隱私拍賣中,投標者可以在不透露身分或可用資金的情況下提交出價。要實現隱私拍賣,必須攻克兩大難關:

  1. 保護買方身分:買方帳戶的身分需要保密,因為揭露帳戶就會揭露他們在拍賣中的可用資金。

  2. 保障賣方利益:拍賣需要防止惡意投標者(買方)提交超過他們可用資金的出價。

使用ZK技術來保護投標者的身分隱私,同時能夠驗證他們擁有出價的可用資金。

在隱私拍賣中,每個投標者需要兩個帳戶地址:

  1. 公開的質押帳戶(Public staking account):用於提前轉移拍賣的入場費;

  2. 隱私帳戶(Private account):這個帳戶持有投標者用於滿足中標出價的實際資金。換句話說,如果投標者成功得標,這個帳戶裡的錢就會被用來支付得標的價格。

這兩個帳戶地址毫不相關,其他人無法透過投標者質押帳戶的交易來確定隱私帳戶下的最高出價。

隱私拍賣的過程如下:

1. 基於ZK技術驗證帳戶地址和可用資金

每一個投標者將帳戶地址的雜湊值和可用資金的雜湊值預提交至merkle tree。基於ZK技術驗證該用戶確實擁有該帳戶地址,即哈希值的原像(原始資料)與帳戶地址和可用資金一致。

2. 驗證帳戶防止人為抬高價格

在投標者遞交報價之前,隱私拍賣合約可以檢驗上一位投標者的帳戶。為了防止同一帳戶人為抬高價格,上一位投標者不能和目前投標者是同一人。雖然這樣的設定無法完全避免一個人同時控制兩個質押帳戶和兩個隱私帳戶,但需要注意的是,擁有兩個帳戶意味著每個帳戶中的可用資金會減少。這進一步降低了贏得拍賣的機會,因為在資金被質押給merkle tree之後,將無法將其轉移到隱私帳戶中。

3. 基於ZK技術驗證投標者的可用資金是否高於出價

使用比較器電路(comparator circuit)來驗證投標者的可用資金是否高於出價,主要驗證以下內容:

  1. 比較可用資金和投標者的出價。如果比較器的ZK電路回傳的結果是true,表示投標者的可用資金等於或高於出價,即出價有效,否則出價無效。

  2. 該電路還包括中間檢查以防止篡改證人文件(witness file)。

  3. 檢查帳戶地址和可用資金的雜湊值是否存在於merkle tree中。

基於此,我們可以實現一個區塊鏈隱私拍賣專案。

4. 總結

我們不能忽視區塊鏈專案在安全性方面所面臨的挑戰。 ZK技術可為DeFi專案提供隱私保護功能,避免使用者身分外洩和搶跑攻擊等安全問題。該技術也可以為預言機提供更安全的資料驗證方法。在區塊鏈投票項目中,ZK技術的應用可實現匿名投票,既保護了投票者的身分隱私,也能驗證投票資訊的真實性。在區塊鏈拍賣專案中,使用該技術可以保護投標者的身份隱私,同時驗證他們擁有足夠的出價資金,從而保護賣方的利益。

Total
0
Shares
Related Posts