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

新手Jan 30, 2024
本文通過DEX、Oracle、投票和拍賣四個實例,説明了ZK技術在其中髮揮的關鍵作用。
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的價格是1600美元。
  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技術在其中髮揮了關鍵作用。

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

在本文中,我們專註於對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所示:

  1. 步驟①:從數據源穫取數據
  2. 步驟②:在computation組件中對數據進行計算
  3. 步驟③:將計算結果輸出

圖2 Traditional Oracle

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

  1. Output zkOracle

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

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

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

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

圖3 Output zkOracle

  1. 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證明可以在智能合約或任何其他環境中被驗證。驗證可以確認步驟②計算的有效性。

圖4 I/O zkOracle

3.3 匿名投票

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

  1. 投票者的身份隱私:保證投票者隱私,需要使用匿名身份進行投票。
  2. 投票結果的可驗證性:防止投票數據被篡改,需要設計一種機製以確保投票結果的真實性可被驗證。

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

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

  1. 使用哈希和簽名方法爲投票者生成匿名身份

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

  1. 基於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錶示。

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

  1. 投票併驗證

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

  1. 計算問題:將投票者的匿名身份插入到merkle tree中,併進行驗證。
  2. 等價轉換:將問題依次轉化爲ZK低階電路(low-order circuit)、R1CS結構(rank-1 constraint system)和QAP(quadratic arithmetic program)問題,以生成驗證和證明密鑰的過程。
  3. 公共參數生成:爲了確保ZK繫統的安全性,需要一個可信的設置來生成用於生成證明和驗證證明的公共字符串。
  4. 生成ZK證明:可以使用ZK電路爲投票者生成ZK證明。爲了産生這樣的證明,需要以投票者匿名身份信息和投票信息作爲ZK電路的輸入,這一步通常在鏈下完成。之後,生成的ZK證明就會被上傳到區塊鏈上。
  5. 驗證ZK證明:在鏈上驗證證明,即驗證投票的有效性,也就是驗證投票者的投票是否滿足這個電路有界繫統。如果驗證成功,則返回1,否則返回0。
  6. 投票合約(Voting contract):投票合約根據部署的驗證合約和驗證秘鑰對投票結果進行驗證。在用戶與合約交互的過程中,ZK證明的生成和驗證都是基於ZK電路進行計算的,可以很大程度上保護投票者的身份信息。

圖5 投票驗證過程

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

3.4 隱私拍賣

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

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

  1. 保護買方身份:買方賬戶的身份需要保密,因爲揭示賬戶就會揭示他們在拍賣中的可用資金。
  2. 保護賣方利益:拍賣需要防止惡意投標者(買方)提交超過他們可用資金的出價。

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

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

  1. 公開的質押賬戶(Public staking account):用於提前轉移拍賣的入場費;
  2. 隱私賬戶(Private account):這個賬戶持有投標者用於滿足中標出價的實際資金。換句話説,如果投標者成功中標,這個賬戶裡的錢就會被用來支付中標的價格。

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

隱私拍賣的過程如下:

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

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

  1. 驗證賬戶防止人爲抬高價格

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

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

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

  1. 比較可用資金和投標者的出價。如果比較器的ZK電路返回的結果是true,錶明投標者的可用資金等於或高於出價,即出價有效,否則出價無效。
  2. 該電路還包括中間檢查以防止篡改證人文件(witness file)。
  3. 檢查賬戶地址和可用資金的哈希值是否存在於merkle tree中。

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

4. 總結

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

聲明:

  1. 本文轉載自[PANews],著作權歸屬原作者[Salus],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。

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

新手Jan 30, 2024
本文通過DEX、Oracle、投票和拍賣四個實例,説明了ZK技術在其中髮揮的關鍵作用。
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的價格是1600美元。
  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技術在其中髮揮了關鍵作用。

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

在本文中,我們專註於對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所示:

  1. 步驟①:從數據源穫取數據
  2. 步驟②:在computation組件中對數據進行計算
  3. 步驟③:將計算結果輸出

圖2 Traditional Oracle

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

  1. Output zkOracle

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

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

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

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

圖3 Output zkOracle

  1. 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證明可以在智能合約或任何其他環境中被驗證。驗證可以確認步驟②計算的有效性。

圖4 I/O zkOracle

3.3 匿名投票

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

  1. 投票者的身份隱私:保證投票者隱私,需要使用匿名身份進行投票。
  2. 投票結果的可驗證性:防止投票數據被篡改,需要設計一種機製以確保投票結果的真實性可被驗證。

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

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

  1. 使用哈希和簽名方法爲投票者生成匿名身份

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

  1. 基於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錶示。

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

  1. 投票併驗證

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

  1. 計算問題:將投票者的匿名身份插入到merkle tree中,併進行驗證。
  2. 等價轉換:將問題依次轉化爲ZK低階電路(low-order circuit)、R1CS結構(rank-1 constraint system)和QAP(quadratic arithmetic program)問題,以生成驗證和證明密鑰的過程。
  3. 公共參數生成:爲了確保ZK繫統的安全性,需要一個可信的設置來生成用於生成證明和驗證證明的公共字符串。
  4. 生成ZK證明:可以使用ZK電路爲投票者生成ZK證明。爲了産生這樣的證明,需要以投票者匿名身份信息和投票信息作爲ZK電路的輸入,這一步通常在鏈下完成。之後,生成的ZK證明就會被上傳到區塊鏈上。
  5. 驗證ZK證明:在鏈上驗證證明,即驗證投票的有效性,也就是驗證投票者的投票是否滿足這個電路有界繫統。如果驗證成功,則返回1,否則返回0。
  6. 投票合約(Voting contract):投票合約根據部署的驗證合約和驗證秘鑰對投票結果進行驗證。在用戶與合約交互的過程中,ZK證明的生成和驗證都是基於ZK電路進行計算的,可以很大程度上保護投票者的身份信息。

圖5 投票驗證過程

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

3.4 隱私拍賣

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

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

  1. 保護買方身份:買方賬戶的身份需要保密,因爲揭示賬戶就會揭示他們在拍賣中的可用資金。
  2. 保護賣方利益:拍賣需要防止惡意投標者(買方)提交超過他們可用資金的出價。

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

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

  1. 公開的質押賬戶(Public staking account):用於提前轉移拍賣的入場費;
  2. 隱私賬戶(Private account):這個賬戶持有投標者用於滿足中標出價的實際資金。換句話説,如果投標者成功中標,這個賬戶裡的錢就會被用來支付中標的價格。

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

隱私拍賣的過程如下:

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

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

  1. 驗證賬戶防止人爲抬高價格

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

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

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

  1. 比較可用資金和投標者的出價。如果比較器的ZK電路返回的結果是true,錶明投標者的可用資金等於或高於出價,即出價有效,否則出價無效。
  2. 該電路還包括中間檢查以防止篡改證人文件(witness file)。
  3. 檢查賬戶地址和可用資金的哈希值是否存在於merkle tree中。

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

4. 總結

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

聲明:

  1. 本文轉載自[PANews],著作權歸屬原作者[Salus],如對轉載有異議,請聯繫Gate Learn團隊,團隊會根據相關流程盡速處理。
  2. 免責聲明:本文所錶達的觀點和意見僅代錶作者個人觀點,不構成任何投資建議。
  3. 文章其他語言版本由Gate Learn團隊翻譯, 在未提及Gate.io的情況下不得覆製、傳播或抄襲經翻譯文章。
即刻開始交易
註冊並交易即可獲得
$100
和價值
$5500
理財體驗金獎勵!