Zether將為以太坊帶來什麼?智慧合約世界的隱私方案

買賣虛擬貨幣

Zether將為以太坊帶來什麼?當前,類似以太坊這樣的區塊鏈智慧合約平臺已經變得非常流行。雖然不同型別的去中心化應用,可以很容易地構建在這樣的平臺上,但目前似乎沒有為它們增加一個有意義的隱私層的簡單方法。

而來自斯坦福大學的博士生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保密交易的成本。

(圖片來自:pxhere.com)

相關的加密貨幣隱私技術方案

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

用於比特幣的保密交易(CT)首先是由Maxwell提出的,他用佩德森承諾(Pedersen

commitments )和OR-proofs來建立一個支付機制,其中交易金額是隱藏的,但可驗證一筆交易的輸出之和是否超過輸入的總和。門羅幣(Monero)則更進一步,其使用了一種特殊型別的簽名方案,以隱藏由

傳送方(匿名集)選擇的UTXO集交易的起源地及目的地,然而,門羅的簽名大小是隨匿名集的大小而線性增加的。而Zether擴充套件的匿名屬性,類似於門羅(但它們的模型是不同的)。

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

還有其他幾種方法可以使區塊鏈交易實現匿名。CoinJoin為一組使用者提供了一種共同建立比特幣交易的方法。 (MimbleWimble/Grin)結合了保密交易(CT)和CoinJoin等技術,以非互動方式聚合交易。CoinShuffle和Mixcoin可為比特幣混合協議。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位元組)。

(圖:ZSC合約Gas成本)

目前,論文的其中一位作者Benedikt Bunz,已開源了Zether協議的部分程式碼及測試程式碼,有興趣的讀者可以瞭解一下。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;