區塊鏈相關隱私技術方案-以太坊

獲得智能合約之父認同的隱私方案Zether是到底什麼?
區塊鏈兄弟 區塊鏈兄弟 2019-02-27 19:49:261780
當前,類似以太坊這樣的區塊鏈智能合約平臺已經變得非常流行。雖然不同類型的去中心化應用,可以很容易地構建在這樣的平臺上,但目前似乎沒有爲它們增加一個有意義的隱私層的簡單方法。

而來自斯坦福大學的博士生Benedikt Bunz(Bulletproofs防彈證明方案作者之一)、斯坦福大學教授Dan Boneh以及來自Visa研究部門的Shashank Agrawal以及Mahdi Zamani,聯合提出了一種針對以太坊智能合約平臺的隱私方Zether。它與以太坊以及其他智能合約平臺兼容,在效率和可用性方面,該協議採用了類似於以太坊的基於賬戶的方法。論文的作者們描述了保護Zether免受重放攻擊和非正常預先交易(front-running)的技術。此外,他們還開發了一種機制來實現與任意智能合約的互操作性。這有助於一些流行的去中心化應用,如拍賣、支付通道,投票等。

而該方案,也得到了智能合約之父尼克.薩博(Nick Szabo)的轉發支持。

作爲協議的一部分,作者們還提出了Σ-Bullets,這是現有零知識證明系統Bulletproofs(防彈證明)的改進版本,Σ-Bullets使得Bulletproofs(防彈協議)與Sigma協議變得更具互操作性。研究者們將Zether作爲以太坊智能合約實施,並通過測量Zether合約使用的gas量,來展示該設計的實用性。在2019年2月初的實驗中,一筆Zether保密交易的成本大約是0.014 ETH(大約1.51美元),目前研究者們正在討論對以太坊虛擬機的一種小更改(獨立於Zether),而這將極大地降低Zether保密交易的成本。

相關隱私技術方案

在詳細瞭解Zether隱私方案之前,我們先快速回顧一下市場上已經存在的隱私技術方案:

用於BTC的保密交易(CT)首先是由Maxwell提出的,他用佩德森承諾(Pedersen commitments )和OR-proofs來建立一個支付機制,其中交易金額是隱藏的,但可驗證一筆交易的輸出之和是否超過輸入的總和。門羅幣(Monero)則更進一步,其使用了一種特殊類型的簽名方案,以隱藏由 發送方(匿名集)選擇的UTXO集交易的起源地及目的地,然而,門羅的簽名大小是隨匿名集的大小而線性增加的。而Zether擴展的匿名屬性,類似於門羅(但它們的模型是不同的)。

ZCash基於的是Zerocash協議,其使用了一種稱爲zkSNARKs的更爲複雜的零知識證明系統,以次線性成本提供了匿名性。發送者和接受者隱藏在使用屏蔽地址的人羣當中。使用SNARKs的其中一個缺點是,需要預先生成一個大的公共引用字符串(CRS),而這種方式沒有人知道陷門,這是一項具有挑戰性的任務。發送方需要下載這個公共引用字符串(CRS),併爲一個大型迴路生成證明,而這是非常耗時的。

還有其他幾種方法可以使區塊鏈交易實現匿名。CoinJoin爲一組用戶提供了一種共同創建比特幣交易的方法。 (MimbleWimble/Grin)結合了保密交易(CT)和CoinJoin等技術,以非交互方式聚合交易。CoinShuffle和Mixcoin可爲BTC混合協議。TumbleBit使用了一種不受信任的媒介(稱爲Tumbler),使得交易不可鏈接。M¨obius則通過一個以太坊智能合約取代了tumbler媒介。

Zether的匿名方式不同於以上的方案,其不依賴其他用戶的積極參與,Zether用戶可選擇他們自己的匿名集(類似門羅)。另一方面,如果用戶主動使用混合服務,它還可以提供更好的匿名性。

Hawk是一個以隱私保留方式建立任意智能合約的框架。特別地,它可完全隱藏拍賣中的出價,但這也需要付出巨大的代價。在Hawk框架當中,合約的隱私部分是被轉換成一個迴路(circuit)。一名管理者,其受參與者的私密輸入委託,在迴路上生成一個zkSNARK證明,以表明它已被正確地執行。SNARKs除了依賴可信設置之外,引用字符串(reference string)還依賴於迴路,因此需要爲每個合約生成不同的字符串。此外,迴路模型對可參與的用戶數量進行了限制,因此Hawk儘管很強大,其可提供更好的隱私性,但它並不是完全去中心化的,其對於簡單的合約而言太昂貴了。

另一個通用框架Ekiden,通過智能合約平臺兼顧了性能和保密性,但它依賴於可信執行環境(例如英特爾SGX),所以它也不是完全去中心化的。

RSCoin、 Solidus、 zkLedger等方案的運作模式,介於比特幣/以太坊等完全去中心化的設置和現代金融系統的中心化設置之間。

在這類模型中,銀行控制貨幣供應,但會使用區塊鏈進行交易。這裏所使用的技術和zkLedger有一些相似之處,其中每個銀行都有一個賬戶。zkLedger中的發送方銀行A創建多個任務,將一些錢x發送給接收銀行B。對應於B的任務是−x,對應於B的任務則是x,所有其他任務則等於0。然後有證據表明,這些任務是形成良好的,並且A的金額超過了x。當我們在Zether協議中使用類似的想法時,Zether需處理非正常預先交易(front-running)、重放、兼容性等更多的問題,這與在開放平臺上建立智能合約有關。

並行工作:Zexe是最近針對Zerocash類型貨幣的一種私有腳本語言提案,它提供與比特幣腳本類似的功能,同時隱藏腳本和腳本本身的輸入。但是,它並不支持像智能合約那樣的有狀態計算。

Quisquis是一種新的匿名系統,其旨在解決像門羅幣和Zcash所存在的一些問題(例如,未使用交易輸出(UTXO)集的不斷增長問題)。其模型是一種有趣的UTXO和賬戶混合體。而基本單位是一個賬戶(由公鑰和commitment承諾組成),它們只能一次性使用:在一筆交易中,舊帳戶會被銷燬,而新帳戶會被創建。儘管Quisquis提供了一種新的匿名方法,但它也面臨非正常預先交易(front-running)攻擊的問題(匿名集中的公鑰可能會在交易被處理之前進行更新),更重要的是,Quisquis是一個獨立的加密貨幣,而Zether的目標則是建立一個部署到任何智能合約平臺的系統,其可供其他智能合約使用,以實現更多的隱私性。

Zether隱私方案的特點

好了,談了那麼多隱私方案,以及它們和Zether的對比,想必大家已經對該方案有了初步的認識了。那這種方案具有哪些特點呢?

首先,我們要知道的是,Zether不需要對以太坊這類底層智能合約平臺的設計進行任何更改。Zether作爲一個智能合約,它可單獨執行,其也可通過其他智能合約執行,以交換保密數量的ZTH token,Zether使用的技術,可應用於其他基於賬戶的加密貨幣,並完全獨立於它們的共識機制。

其特性如下:

保密:Zether的交易是保密的,賬戶餘額始終是加密的,用戶需提供密碼證明來使用ZTH。

零知識證明:Zether使用零知識證明技術作爲重要基礎。爲了讓Zether變得更有效,研究者提出了一種新的零知識證明機制,稱爲Σ-Bullets,其使得Bulletproofs(防彈協議)與Sigma協議變得更具互操作性。這使我們能夠有效地結合基於Bulletproofs(防彈協議)的範圍證明以及ElGamal加密(Σ-Bullets也可以在其他設置中進行應用)。

實施方式:我們將Zether作爲一種以太坊智能合約進行實施,並測量執行所需的gas量。在實現對以太坊的增強改進後,這種實施將變得更爲有效。作爲實施的一部分,協議作者們在以太坊上提供了一個高效的Bulletproofs實現。

互操作性:Zether提供了一種將資金鎖定在智能合約賬戶中的方法,這可以更容易地爲幾個重要的去中心化應用添加保密性。在論文當中,作者們展示了Zether可構建的四種應用,它們分別是:保密競拍應用、保密支付通道、保密權益投票、以及私密權益證明(private proof-of-stake)。

匿名性:論文作者們描述了Zether的一個擴展,它還可隱藏一筆交易中的發送者和接收者,雖然與匿名性相關的開銷與羣體大小成線性關係,但其不需要可信設置,也不需要更改基礎智能合約平臺。因此,Zether的匿名保證與門羅幣更相似,不同之處在於Zether是基於賬戶模型的。

Zether隱私方案的部分重要術語

Fund transaction(資助交易):通過存入以太幣和指定一個Zether賬戶(Elgamal公鑰),來資助一個Zether賬戶。任何人都可資助一個Zether賬戶,並不斷地進行資助。

轉讓交易(Transfer transaction):用於將ZTH從Zether帳戶轉移到另一個帳戶。

燃燒交易(Burn transaction):用於將與Zether帳戶相關聯的所有ZTH,換回以太坊地址中的以太幣。

Elgamal加密(Elgamal encryption):一種非對稱加密方案。密鑰sk,公鑰pk =gˢᵏ。要加密消息m,選擇一個nonce r,密文爲(gʳ, m.pkʳ)。而要解密,計算 (gʳ)ˢᵏ,併除以m.pkʳ得到消息m。然而,在Zether當中,爲了使這種加密具有額外的同態性,消息被製成指數,製造密文爲(gʳ, gᵐ.pkʳ);

Epoch週期:具有時間概念的設置參數,指k個連續區塊的時間。

Zether隱私方案概述

在這一節,我們首先會討論具有核心功能的簡單版Zether,然後描述一些它的缺點,以及如何克服它們。

一個簡單的Zether合約:Zether智能合約(ZSC)需要一種Zether token(ZTH),Zether賬戶使用ElGamal公鑰進行標識,這些公鑰存儲在ZSC的內部狀態當中。通過公鑰y,使用b ZTH創立一個賬戶,用戶可將b ETH發送到這個智能合約。ZSC合約生成隨機性爲0的b的ElGamal加密(因爲b無論如何都是交易的一部分),並將其添加到與y相關的加密餘額中。某人可通過顯示當前的餘額b*,將ZTH轉換回ETH,並提供y的密文的零知識證明(即該密文與智能合約中的y相關)。

爲了將一些b數量的ZTH轉移到公共密鑰y’,而不會暴露b本身,某人可在y和y’的條件下加密b。在實現當中,作者們使用了一個新的零知識證明機制,也就是上面提到的Σ-Bullets,有效地證明加密傳輸餘額和新發送方餘額的聲明。

Front-running(非正常預先交易):

Zether簡化版本的第一個問題,就是零知識證明是在合約的某種狀態下生成的,例如,轉賬交易中的零知識證明,需顯示剩餘餘額爲正。用戶Alice將生成與其當前賬戶餘額相關的證明,以加密形式存儲在合約當中。然而,如果另一個用戶將一些ZTH傳輸給Alice,並且Bob的交易首先得到處理,則Alice的交易將被拒絕,因爲證明將不再有效。請注意,Bob可能是一個非常好的用戶,但在這種情況下,Alice因爲處理這筆交易而失去其支付的費用。我們將這種情況稱爲非正常預先交易(Front-running)。燃燒交易(Burn transactions)也有類似的問題:如果密文發生變化,加密某個值的密文證明將會失效。

爲了解決這一問題,我們可引入一種新的交易類型,它只鎖定賬戶,以防傳入的轉賬。Alice可等到該交易進入區塊鏈後,再啓動傳出傳輸(或進行燃燒交易)。雖然這似乎解決了問題(需兩步流程爲代價),但它爲像Bob這樣希望將ZTH發送給Alice的用戶,帶來了新的問題。當Bob發佈傳輸交易Tx時,Alice的帳戶可能不會被鎖定,但它可能在Tx進入之前被鎖定,從而導致Tx被拒絕。

當我們是匿名的時候,任何一種鎖定方法都變得更加不可靠。如果Alice想隱藏自己,爲了確保她的交易通過,她必須鎖定匿名集中的所有帳戶。顯然,這是不允許的:Alice一定不能鎖定其他用戶的帳戶。另外,Alice只能將鎖定的帳戶放在她自己的匿名集中。但是,如果有人在Alice的交易進入之前,解鎖了他們的帳戶,那麼Alice的匿名程度就會降低了。

等待傳輸(Pending transfer):

爲了解決非正常預先交易(Front-running)問題,作者們把所有的傳入傳輸保留在一個等待狀態中。這些轉賬會不時地轉入賬戶,以便流入的資金可被使用。這種滾動法不能在任意時間發生,否則證明將會再次失效。爲了解決這個問題,協議作者將時間分爲幾個epoch時期,其中一個epoch由k個連續區塊組成。

k的選擇取決於兩個因素:a)區塊鏈最新狀態與任何用戶view之間的間隔,;b)將交易納入區塊鏈所需的時間。

在每一個epoch週期結束時,待處理的轉賬將轉入相應的賬戶。

用戶會希望在epoch週期開始時發佈他們的傳輸交易(或燃燒交易)。因此,即使他們沒有看到區塊鏈的最新狀態,並且這需要一些時間來納入他們的交易,他們也不會進入下一個epoch週期。

只要明智地選擇k,交易將在帳戶更改狀態之前處理。

智能合約滾動(Rolling over on a smart contract):

不幸的是,滾動賬戶並不像看起來那麼簡單,因爲只有在交易發送給智能合約之後,合約纔會做任何事情。

不能指望每個用戶都爲每個epoch週期發送一則滾動消息。此外,他們不可能在正確的時間收到這樣的信息。第一個想法,是在一個epoch週期中收到第一則消息時,爲所有賬戶滾動等待傳輸交易。

然而,這爲消息發送者帶來了不合理的巨大負擔:其將不得不支付很大的滾動成本。此外,用戶也無法得知,他們的交易在一個epoch週期當中是否會是第一筆,因此,他們無法估計正確的gas供應量。

在收到該賬戶的第一則消息時,我們在一個epoch週期滾動一個賬戶。

因此,一則消息只會覆蓋一個賬戶。爲了實現這一點,協議作者們定義了一個單獨的(內部的)滾動方法,其他方法所做的第一件事就是調用這一方法。

可能會出現一些賬戶連續幾個epoch週期都沒有被滾動的情況,原因在於它們沒有發起交易。這不是問題,因爲賬戶持有人(比如Alice)也沒有想要使用她的錢。而當Alice想要操作她的賬戶時,她將發佈一筆交易。自上次滾動後轉入她賬戶的所有資金,將立即進行滾動,並可被使用。

重放攻擊保護(Replay protection):

像其他支付機制一樣,Zether需要處理重放攻擊問題,以太坊通過將nonce與每個賬戶關聯,提供了自己的重放攻擊保護措施。不幸的是,這一程度的保護對於Zether而言是不夠的,這是因爲兩個原因: (1) Zether賬戶擁有自己的公鑰,它們與以太坊地址並不關聯,(2) Zether交易包含非交互式零知識證明。

一個惡意的行動者可竊取這些證明,並將它們放進新的交易。如果賬戶的狀態沒有更改,則新的交易也將處理成功,這會導致資金損失。一個敵對的實體可通過重放請求再次鎖定賬戶。

爲防止此類問題,我們將nonce與每個zether帳戶關聯起來。當交易被處理時,nonce將遞增。來自帳戶的新交易 必須在與帳戶關聯的nonce的最新值和交易記錄上簽名數據,包括任何零知識證明。此方法將交易的所有組件綁定在一起,並確保新鮮性。零知識證明不能被導入惡意交易,而有效交易也無法被重放。

可探討的是,是否存在一種方法,可使用以太坊地址本身作爲Zether賬戶的身份。然後,這些賬戶將使用與地址對應的密鑰進行操作,那麼,我們就可免費獲得重放攻擊保護和簽名驗證。然而,這將迫使用戶從固定的以太坊地址操作Zether帳戶。他們將無法將帳戶委託給其他地址,例如將帳戶鎖定到一個智能合約。

此外,以太坊地址只是公鑰的哈希結果,在零知識條件下證明哈希聲明是非常昂貴的。最後,爲Zether帳戶提供單獨的公鑰,也有助於使設計更模塊化和獨立化。

匿名性:

Zether可擴展到匿名傳輸,Zether的匿名版本,需要一個更爲複雜的零知識證明,其也需要一個新的重放攻擊和雙花保護機制,以及一個將賬戶鎖定到智能合約的不同機制,關於這部分內容,方案作者們在論文的附錄D.1部分有進行詳細的探討。

關於Σ-Bullets

在文章的開頭部分,我們談到Zether使用了一種稱爲Σ-Bullets的零知識證明系統,實際上它是將Bulletproofs(防彈協議)與Σ-protocols集成到了一起,以便對代數編碼值(例如∃x:g^x =y ∧ h^x = u ∈ G. (格式編輯問題,建議看論文原文))進行有效證明。另一方面,Bulletproofs(防彈協議)是一種迴路證明系統,它非常適合範圍證明和其他更復雜的算術語句。如果所有值都使用相同的承諾密鑰,則bulletproof(防彈協議)確實可對Pedersen承諾值進行證明。而使用Σ-Bullets,我們可關於代數編碼數據,證明更復雜的語句。

例如,我們可有效地證明一組Elgamal加密值在一定範圍內。此外,我們可將one-out-of-many證明(又稱環簽名)與範圍證明結合起來,以允許匿名傳輸。one-out-of-many證明是一種Σ-protocol ,它隱藏了正在被使用的賬戶。然後使用Bulletproof(防彈證明)表明該賬戶有足夠的資金用於轉賬。關於Σ-Bullets的詳細介紹,讀者可在原論文的附錄G中找到。

實施與評估

爲了正確評估Zether協議並證明其可行性,研究者們將基礎版Zether作爲以太坊智能合約進行實施。實踐表明Zether是可行的,它目前可在以太坊虛擬機上進行運行。此外,研究者們還討論了爲改進合約性能而進行的一些優化工作。一些改進已經被單獨討論,並且已被提交到以太坊改進提議(EIP)隊列。

在測試中,研究者們測量了總的gas成本,包括髮送交易的基本成本、存儲成本以及證明/簽名驗證成本。截止發稿時,一筆基礎Zether交易的成本約爲0.014 ETH(1.51美元)。測試表明,大部分的成本是由橢圓曲線操作產生的,對於一筆轉移交易,橢圓曲線操作佔總成本的90%。而對於一筆fund交易,大部分的費用來自於初始化一個新帳戶,而將資金添加到現有賬戶的成本,則要低得多。最後,研究者給出了交易數據的大小,注意,這並不包括基本的以太坊交易數據(大約110字節)。

更多專欄文章:http://www.qukuaiwang.com.cn/zhuanlan
聲明:本文由入駐區塊網專欄作者撰寫,觀點僅代表作者本人,絕不代表區塊網贊同其觀點或證實其描述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章