本文探討了零知識證明技術在去中心化世界中的關鍵作用,解決了區塊鏈的隱私和安全問題。文章舉例說明了ZK技術在DEX、Oracle、投票和拍賣的應用,確保交易驗證同時保護用戶隱私。區塊鏈的公開透明性帶來安全問題,如DeFi中的隱私洩漏和搶跑交易風險。區塊鏈中智慧合約獲取鏈下資料存在安全風險,需要考慮引入隱私保護措施。文章也介紹了ZK私有DEX、zkOracle、匿名投票和隱私拍賣的創新場景。基於ZK技術,可以保護用戶隱私並驗證資料的準確性,解決區塊鏈專案的安全問題。
1.引言
零知識證明(Zero-Knowledge,或簡稱ZK)技術可以解決去中心化世界中的隱私和安全問題。本文透過DEX、Oracle、投票和拍賣四個實例,說明了ZK技術在其中扮演的關鍵角色。 ZK技術被用來保證在DEX上的交易既可以被驗證,又可以保護使用者的隱私,隱藏使用者的身分或其他交易細節。基於ZK技術可以確保從上機取得的資料的準確性,防止資料在傳輸或計算過程中被竄改。在區塊鏈投票項目中,有資格的投票者可以以匿名身分進行投票,投票資訊能夠防止被預先篡改,也是ZK技術能夠解決的。該技術還可以為區塊鏈鏈拍賣項目中的競標者提供身分隱私保護功能,同時可以解決暗示出價的問題。
2.去中心化世界的隱私風險
區塊鏈沒有秘密,所有資訊都在公眾視野之下,這使得其在隱私保護方面有所欠缺。此外,大量智能合約的運作記錄下數據,這就帶來了額外的安全風險。接下來,我們將詳細探討這些重大特性所引發的安全性問題和潛在風險。
區塊鏈的公開透明性所引發的安全問題
區塊鏈的公開透明性保證了交易的可追溯性,但同時又引發了安全性問題。例如,DeFi中的個人隱私外洩風險和搶跑交易風險。
隱私外洩:透過位址標籤染色法、交易IP匹配和廣播節點節點等方法可以輕鬆關聯鏈上位址在現實世界中的真實身分。這些分析方法不僅可以揭露使用者的身份,還揭示了使用者的行為模式和投資策略。例如,某些地址的間隙交易或特定類型的交易活動會揭示該用戶的投資偏好或習慣,此類資訊並不正當地用於競爭優勢或不被局部利用。
搶跑交易:攻擊者能夠利用區塊鏈的透明性來待監控確認的交易隊列。他們透過分析這些未處理的交易,可以在交易中設定更高的手續費,從而誘導礦工優先處理這些交易。這樣,攻擊者可以在其他用戶執行交易之前,以獲取先機優勢,為自己謀取利益。這種行為不僅扭曲了交易過程的公平性,還會導致市場排隊和不利於其他用戶的情況。
因此,DeFi協議的設計和實施應充分考慮這些潛在的安全威脅。我們應考慮引入額外的隱私保護措施,以保護用戶隱私外洩和交易行為分析等風險。
區塊鏈在獲取鏈下資料時存在的安全風險
在區塊鏈中,智慧合約無法直接取得鏈下數據,只能存取區塊鏈上的交易數據或其他合約的狀態。智能合約是區塊鏈上自動執行的程序,其運行結果必須在所有節點中保持一致性,即給定相同的輸入,其執行結果必須完全一致。由於鏈下數據可能發生變化,如果智能合約直接獲取鏈下數據,則不同節點在執行相同的一致性時可能會得到不同的結果,這將破壞區塊鏈的一致性。
然而,在許多情況下,智能合約需要依賴鏈下的數據。例如,一個DEX需要取得特定股票或數位貨幣的最新價格。這些數據一般需要從鏈下的金融市場或其他交易所取得。系統通常會透過預示機來取得鏈下的資料。當智能合約需要鏈下資料時,它可以請求預示機,預示機將獲取鏈下資料並返回給智能合約。而且,預示機也可以將鏈上的資料傳輸至鏈下。
,引入前置機也帶來了新的安全風險,在某些情況下前置機會因錯誤或惡意行為提供不準確的數據。因此,前置機的設計和實現需要對安全性給予高度重視。
涉及投票和拍賣的區塊鏈項目,還需要考慮特別的安全保護措施。區塊鏈技術為投票平台提供了透明和不可篡改的特性。然而,篩選合格選民、投票選民投票、阻止投票資訊被預先篡改已經成為新的挑戰。鏈上拍賣的核心問題是透視出價和帳戶視覺化。當你能看透對方的籌碼時,你就擁有了先發優勢。
3.隱私化驅動創新場景
3.1 ZK私有DEX
區塊鏈的公開透明性為DeFi領域的許多專案帶來了隱私上的挑戰。面對這樣的挑戰,Salus將以DEXs為例,探討ZK技術在增強DEXs隱私權保護的關鍵角色。
假設有一個具有隱私保護功能的私有DEX。透過使用ZK技術,它能夠隱藏交易資訊的部分內容,同時也能驗證這些交易的有效性。在這個DEX中,只有部分交易資訊是公開的,例如所有註冊用戶,他們的銀行帳戶、存款和存款的資產名稱以及數量,如圖1所示。交易者本人會知道自己的全部交易訊息,但其他交易者無法獲得他人的完整交易資訊。以下,以參見五個具體的交易事件例如:
圖1 只知道部分公開資訊的私人DEX,圖片來源https://arxiv.org/pdf/2309.01667.pdf 假設在這個私人DEX平台上發生了五筆交易,他們相對應的事件資訊是:
Alice在平台上存入了1000 USD。
Bob在平台上存了10 BTC,此時BTC的價格是1000美元。
Alice在平台上進行交易,將800美元兌換為0.5 BTC,此時BTC的價格為1,600美元。
Alice在平台上抽取了0.3 BTC,此時BTC的價格為2000美元。
平台記錄了Alice的總支出和總收益,分別是480美元和600美元。
這個基於ZK技術的私人DEX平台實現了隱私保護功能,其中完整的交易資訊只對參與交易的用戶可見。該平台不會公開展示完整的交易事件訊息,而是提供隱私的事件資訊。接下來,我們將詳細說明這些隱私事件資訊具體指什麼,以及如何進行驗證:
當存款1000美元時,銀行帳戶會顯示Alice的身份。然後Alice會得到一個由平台產生的資產權限或簽名。為了防止雙重支付並確保合規,簽署的訊息必須包含超出資產細節的額外屬性。這些屬性包括一個唯一的資產標識符,即Alice的使用者識別符。這些資訊應該被隱藏,以保持用戶的性。 Alice被要求基於ZK技術來證明她的盲化使用者識別碼(盲化使用者識別碼)等於她的註冊憑證(registration credential)。為了滿足稅務報告-客戶合規要求(tax-report-client-compliance),交易所中出售資產的收益和提現交易需要計算。這需要在存款和交易中其中包括資產購買時的意外成本。因此,我們在資產作為憑證中引入購買價格額外屬性。
當Bob存入10 BTC時,平台不知道Bob的身份。因為目前交易不是法幣。
當Alice以800美元兌換0.5 BTC時,她使用1000美元的資產憑證請求兩個新的憑證,分別是剩餘的200美元和0.5 BTC,保留其細節。平台在特定條件下批准她的請求,這些條件包括基於ZK技術證明她有足夠的美元,確保共享相同的用戶標識符,確認剩餘美元金額為非負,匹配BTC的價格與最新的票據,並驗證總交易價值等價。
當提取0.3 BTC 時,雙方進行交易操作,除了被交換的資產外。 Alice 在區塊鏈上驗證了提取的BTC 的收據。
當總支出為480,總收益為600 時,Alice 展示了一個標有她身份的有效註冊憑證,並請求一個標有新標籤的更新註冊憑證,將支出和收益重置,並獲取一個用於向監管機構展示的文件憑證。文件憑證包含Alice的真實身份,正確的支出480和收益600,以及一些監管輔助資訊。由於支出和收益被平台隱瞞負債資訊洩露,Alice應證明承諾的支出和收益等於她註冊憑證中的數值,平台會進行盲簽(盲簽)。 Alice解除盲簽名並將訊息簽名對提交給監管機構進行稅務報告。
3.2 zkOracle
假設存在一個基於區塊鏈的農業保險智能合約,該合約根據天氣預報提供的天氣數據來判斷是否向投保的農場主支付賠償。例如,如果某地區發生嚴重乾旱,那麼該地區的農場主就可以從該保險合約中獲得賠償。
但是,如果天氣預報因為某些原因錯誤報告了該地區的天氣狀況,例如實際上該地區正在遭受嚴重乾旱,而天氣預報卻報告稱季節量正常,這種錯誤的資訊將導致智能合約出現錯誤判斷,因而拒絕向實際上正面臨乾旱的農場主支付賠償。
從上面這個例子可以看出,確保預報機提供資料的準確性是我們的關鍵。 zkOracle是基於ZK技術的預報機,一個贏得信任且安全的預報機。下面,將具體介紹傳統預報機和zkOracle 的主要區別,並解釋了為什麼ZK 技術在其中發揮了關鍵作用。
傳統的前置機可以被劃分為清晰不同的類型,我們採用以下四個維度來闡述和比較前置機之間的差異:
輸入神諭
輸出神諭
輸入/輸出預言機
用途
將鏈下資料傳輸到鏈上環境
將鏈上資料傳輸到鏈下環境
使用鏈下計算的自動化智能合約
資料來源
鏈下數據
鏈上數據
鏈上數據
計算
簡單(聚合,上傳)
複雜度(索引,聚合,過濾,或其他複雜度計算)
複雜(索引,過濾,觸發條件檢查等)
輸出
鏈上數據
鏈下數據
上鏈資料和目標智能合約調用
在本文中,我們的重點是對Output Oracle和I/O Oracle的討論。這兩種機的數據均源自於區塊鏈,這意味著這些數據已經經過了區塊鏈的驗證和保護。如何確保沿海機計算和傳輸的安全性是我們討論的重點問題。
為了實現一個安全的主機,我們可以對輸出oracle和I/O oracle進行ZK改造,實現輸出zkOracle和I/O zkOracle。以下部分將比較傳統oracle、輸出zkOracle和I/O zkOracle的工作流程,並闡述了output zkOracle和I/O zkOracle在哪些方面進行了ZK改造。
1. 傳統預言機(Traditional Oracle)
傳統機的工作流程如圖2所示:
步驟①:從資料來源取得數據
步驟②:在計算組件中對資料進行計算
步驟③:將計算結果輸出
圖2 傳統預言機
可利用ZK技術對傳統預告機工作流程中的步驟②與步驟③進行ZK改造,步驟①維持不變:
2.輸出zkOracle
步驟②-ZK改造:計算並產生ZK證明
在計算組件中基於ZK技術對從資料來源取得的資料進行計算,通常是排序、聚合和過濾,計算的結果是一個ZK證明。使得計算和輸出可驗證。
步驟③-ZK改造:驗證ZK證明
步驟②計算得到的ZK證明可以在智能合約或任何其他環境中被驗證。可以透過確認步驟②驗證計算的有效性。
圖3 輸出zkOracle
3. I/O zkOracle
步驟②-ZK改造:計算並產生ZK證明
I/O zkOracle的計算組件由output zkOracle和input zkOracle組成。 I/O zkOracle與密集的output zkOracle相比,計算的主要內容變多了,即input zkOracle涉及將鏈下的計算結果設置為智能合約調用這部分的結合,使得利用複雜的鏈下計算來實現智能合約自動化操作成為可能。
步驟③-ZK改造:驗證ZK證明
步驟②計算的輸出包括鏈上資料(作為任何calldata完成智能合約呼叫)和一個可驗證的ZK證明。這個ZK證明可以在智能合約或其他環境中被驗證。驗證確認步驟②計算的有效性。
圖4 zkOracle I/O
3.3 匿名投票
在區塊鏈上進行的投票活動中,所有資訊都是公開的,這使得投票者的隱私資訊被潛在的攻擊者獲取。基於區塊鏈的投票項目面臨挑戰:
投票者的身分隱私:保證投票者的隱私,需要使用匿名身分進行投票。
投票結果的可驗證性:防止投票資料被竄改,需要設計一個機制來確保投票結果的真實性可被驗證。
在基於區塊鏈的投票項目中,如何既保護投票者的身分隱私,也保證投票結果的可驗證性,是一個需要解決處理的問題。利用ZK技術,可以有效地實現這兩者的平衡。
在區塊鏈匿名投票項目中,結合使用ZK匿名技術和梅克爾樹實現投票並進行驗證。我們將投票流程分為主要三個階段
1.使用哈希和簽名方法為投票者產生匿名身份
投票者在進行投票之前需要使用自己的真實身份資訊進行資格確認和身份驗證。驗證通過後,他們將得到一個與自己真實身份無關的匿名身份(匿名身份)。投票者以此匿名身分進行投票保護個人識別資訊不被洩露。
2.基於ZK技術和merkle tree驗證投票者匿名身份
投票者使用匿名身份進行投票之前,需要驗證其匿名身份,驗證通過的投票者才可以投票。
使用merkle樹來儲存所有投票者的匿名身份,這樣可以防篡改,並保證投票者身份資訊的完整性。
將投票者的匿名身分資訊產生的身份承諾作為葉子結點,由一定數量的葉子結點建構merkle樹。使用一個基於merkle樹的驗證電路驗證投票者的身分。驗證需要三個方面的數據:
目前投票者的身分承諾,記作輸入目標節點(輸入目標節點)。
Merkle樹的根節點(root node)。
輸入目標節點到根節點的路徑索引(路徑索引)。路徑索引表示目標節點在merkle樹中的位置訊息,由左0右1表示。
在由輸入目標節點和路徑索引產生根節點的過程中,利用由兄弟節點和使用者資訊產生的身份承諾來確定使用者的身份。為了確保用戶選票的唯一性,我們使用經過哈希處理後的身份識別碼和外部識別碼作為投票證明。
3. 投票並驗證
這個階段可以分為以下六個步驟,如圖5所示:
計算問題:將投票者的匿名身分插入merkle tree中,並進行驗證。
等價轉換:將問題依序轉換為ZK低階電路(低階電路)、R1CS結構(rank-1約束系統)和QAP(二次算術程序)問題,以產生驗證和證明金鑰的過程。
公共參數產生:為了確保ZK系統的安全性,需要一個可靠的設定來產生用於產生證明和驗證證明的公共字串。
產生ZK證明:可以使用ZK電路為投票者產生ZK證明。為了產生這樣的證明,需要以投票者匿名身分資訊和投票資訊作為ZK電路的輸入,這一步驟通常在鏈下完成。之後,產生的ZK證明就會上傳到區塊鏈上。
驗證ZK證明:在鏈上驗證證明,即驗證投票的有效性,驗證投票者的投票是否符合這個電路有界系統。如果驗證成功,則傳回1,否則回傳0。
投票合約(Voting Contract):投票合約根據部署的驗證合約和驗證秘鑰對投票結果進行驗證。在用戶與合約交易的過程中,ZK證明的產生和驗證都是可以基於ZK電路進行計算的,很大程式設計保護投票者的身份資訊。
圖5 投票驗證流程
基於此,我們可以實作一個區塊鏈匿名投票項目。
3.4 隱私拍賣
區塊鏈公開拍賣存在一個弊端。由於區塊鏈交易都是公開的,任何人都可以觀察到投標者的出價和資金狀況。如果一個投標者知道了其他投標者的出價。或者,他知道了其他投標者的身份,就可以根據區塊鏈公開的交易資訊獲知此帳號擁有的可用資金。該投標者就可以根據其他投標者的出價或可用資金來調整自己的出價以贏得拍賣。公開區鏈塊拍賣面臨招標者身分公開和資金曝險等挑戰。隱私拍賣可以防止這種不公平現象的發生。
在隱私拍賣中,投標者可以在不明確身份或可用資金的情況下提交出價。
保護隱私:身分隱私帳戶的身份需要保密,因為揭露帳戶就能揭露他們在拍賣中的可用資金。
保護賣方利益:拍賣需要阻止侵權投標者(資金請求)提交超過他們可用的出價。
使用ZK技術來保護投標者的身分隱私,同時能夠驗證他們擁有出價的可用資金。
在隱私拍賣中,每個競價者需要兩個帳戶地址:
公開的質押帳戶(Public Stake account):提前轉移拍賣的入場費;
隱私帳戶(Private account):這個帳戶裡持有的叫價者用於滿足中標出價的實際資金。換句話說,如果叫價者成功得標,這個帳戶裡的錢就會被用來支付得標的價格。
這個帳戶地址毫無關聯,其他人無法透過報價者質押帳戶的交易來確定隱私帳戶下的最高出價。
私下拍賣的流程如下:
1.基於ZK技術驗證帳戶地址和可用資金
每個請求者將帳戶地址的雜湊值和可用資金的雜湊值預提交至merkle樹。基於ZK技術驗證該用戶確實擁有該帳戶地址,即哈希值的原像(原始資料)與帳戶地址和可用資金一致。
2.驗證帳戶防止人為抬高價格
在投標人提交報價之前,隱私拍賣合約可以檢驗上一位投標人的帳戶。為了防止同一帳戶人抬高價格,上一位投標者不能和當前投標人是同一人。雖然這樣的設定無法完全避免一個人同時控制兩個質押帳戶和兩個隱私帳戶,但需要注意的是,擁有兩個帳戶意味著每個帳戶中的可用資金會減少。這進一步減少了贏得拍賣的機會,因為資金被質押給merkle tree之後,將無法將其轉移到隱私帳戶中。
3.基於ZK技術驗證招標人可用的資金是否出價
使用比較器電路(比較器電路)來驗證投標者的可用資金是否出價,主要驗證以下內容:
如果比較器的ZK電路回傳的結果為真,表示投標者的可用資金相等或出價,即出價有效,否則出價無效。
該電路還包括中間檢查以防止篡改證人文件(見證文件)。
檢查帳戶地址和可用資金的雜湊值是否存在於merkle樹中。
基於此,我們可以實現一個區塊鏈隱私拍賣專案。
4. 總結
我們不能忽視區塊鏈專案在安全性方面所面臨的挑戰。 ZK技術可為DeFi專案提供隱私保護功能,避免使用者身分外洩和搶跑攻擊等安全問題。該技術也可以為預言機提供更安全的資料驗證方法。在區塊鏈投票項目中,ZK技術的應用可實現匿名投票,既保護了投票者的身分隱私,也能驗證投票資訊的真實性。在區塊鏈拍賣專案中,使用該技術可以保護投標者的身份隱私,同時驗證他們擁有足夠的出價資金,從而保護賣方的利益。
資訊來源:0x資訊編譯自網際網路。版權歸作者Salus所有,未經許可,不得轉載!