如何將Qtum量子鏈與現(xiàn)有的隱私技術(shù)相結(jié)合
近日,Qtum量子鏈發(fā)起2019全球線上隱私主題黑客馬拉松,我們收到了許多關(guān)于大賽的問題——如何將Qtum與現(xiàn)有的隱私技術(shù)結(jié)合?哪些技術(shù)適合移植到Qtum上?在哪些具體的結(jié)合點上可以開發(fā)?本文通過結(jié)合Qtum與Zether的思考,希望帶給你更多隱私方向的啟發(fā)。
眾所周知,區(qū)塊鏈上交易和合約都處于透明狀態(tài),不適合部分商業(yè)應(yīng)用場景。Zether通過智能合約賦予區(qū)塊鏈隱私交易的功能,幫助了鏈上資產(chǎn)、投票、拍賣等應(yīng)用的隱私化??墒悄壳癦ether面臨Gas過高的問題,那我們怎么通過Qtum降低Gas和增加預(yù)編譯合約呢?
1. 簡介
區(qū)塊鏈網(wǎng)絡(luò)中,盡管用戶的地址來自于隨機生成的私鑰,但地址和實體之間的對應(yīng)關(guān)系還是有可能被交易所、商戶泄漏,甚至被區(qū)塊鏈數(shù)據(jù)的抓取和聚類算法所挖掘。這種程度的隱私性限制了商業(yè)場景的應(yīng)用。
隱私幣的熱潮中,出現(xiàn)了包括Monero、ZCash、Grin和Beam在內(nèi)具有隱私特性的公有鏈,而這些也已經(jīng)被大多數(shù)用戶所認可。但是它們使用的方法都需要對區(qū)塊鏈系統(tǒng)進行較大的改動,想要在現(xiàn)有的區(qū)塊鏈上去實現(xiàn)有一定的難度。
斯坦福大學(xué)的博士生Benedikt Bunz(Bulletproofs防彈協(xié)議發(fā)明者之一)、斯坦福大學(xué)教授Dan Boneh以及Visa研究部門,提出了一種基于以太坊智能合約的隱私協(xié)議:Zether。
Zether的基本想法是通過智能合約實現(xiàn)隱私交易——即隱藏交易的金額和賬戶的余額,并最終應(yīng)用于拍賣、投票等場景中。為了滿足智能合約基于Account的特性,它提出了ElGamal encryption、Pending transfer、Rolling over等機制。為了增加Zether和其他合約的交互性,它又增加了lock/unlock的功能。為了提升Bulletproofs的性能,它使用新的Σ-Bullets進行代替。
Zether提出之后,受到了廣泛的關(guān)注。JP Morgan不但將其用于自己Quorum區(qū)塊鏈系統(tǒng)中,而且還嘗試對其進行進一步的改進。
Zether的最初設(shè)計文檔位于[1],作者公布了部分源碼[2]。JP Morgan對其的改進文檔位于[3],源碼位于[4]。
2. 原理
已有的隱私交易方法,例如ConfidenTIal TransacTIons[5]與其衍生方法MimbleWimble[6],都是基于UTXO實現(xiàn)的。Zether的主要想法是將這一類方法應(yīng)用到智能合約中,實現(xiàn)基于Account的隱私交易。為此,它對已有的方法進行了如下修改。
UTXO到Account
如果在智能合約中實現(xiàn)UTXO,會占用大量的存儲空間。所以Zether的一大主要工作是將ConfidenTIal TransacTIons的UTXO模型改造為Account模型。
ElGamal encryption
Confidential Transactions使用了Pedersen commitments隱藏每個UTXO的金額。如果對方發(fā)送給你一個Pedersen commitments取值錯誤的UTXO,不會影響你其他UTXO的使用。
當(dāng)改成Account模型的時候,需要對每個用戶接收的UTXO進行金額累加,得到最終余額,存儲于合約中。但如果直接對Pedersen commitments進行累加,其中一個的錯誤會導(dǎo)致最終余額的錯誤,影響所有金額的使用。
因此,Zether采用了ElGamal encryption的方式,用接收方的公鑰來加密交易金額。這樣,接收方就能驗證加密金額的正確性,然后合入到余額中。
解決Front-running問題
交易的過程中,需要對交易金額和交易后余額進行范圍證明。但在Account模型中,如果你發(fā)起交易的同時,另一用戶給你發(fā)送了一筆交易,并且在你的交易之前打包進行了區(qū)塊,這樣余額就發(fā)生了改變,你交易中的范圍證明就不再有效。
因此,Zether提出了Pending transfers和Rolling over的機制。即用戶收到的交易并不立即合入到余額中,而是周期地合入。每個周期中,當(dāng)你第一次與自己賬戶交互的時候,進行接收交易合入余額的操作。即,只有賬戶的所有者可以改變賬戶的余額。這樣,F(xiàn)ront-running就不會發(fā)生。
重放攻擊保護
假定用戶在某個特定的余額下發(fā)起了一筆交易。當(dāng)用戶再次出現(xiàn)這個余額時,則這筆交易能夠再次生效。這種情況就稱作Relay Attack(重放攻擊)。為了防止Relay Attack,Zether參照了Ethereum的方式,在每個賬號上加上了一個nonce。用戶每發(fā)起一筆交易,nonce的取值就會增加。用戶的交易都需要對nonce進行簽名,這樣就保證了每筆交易都無法被relay。
范圍證明
Zether使用了Σ-Bullets替代Bulletproofs。Σ-Bullets是Bulletproofs和Σ-protocols的結(jié)合。它的特點是可以證明更為復(fù)雜的陳述,且證明和驗證的過程更加高效。
3. 思考
評價Zether
Zether的優(yōu)點如下:
1.基于智能合約實現(xiàn),對區(qū)塊鏈底層邏輯不需要進行改動
2.基于Confidential Transactions方案修改,不需要zkSNARK那樣需要信任的初始化過程
Zether的缺點如下:
1.Gas消耗太高。如圖,每次Transfer需要7188k的Gas,其中6455k消耗在橢圓曲線相關(guān)計算上。
2.沒有隱藏地址。相比MimbleWimble,Zether沒有隱藏用戶的地址。需要后續(xù)進一步的改進。
還有2點問題值得考慮:
1. Zether官方并未對論文中的實現(xiàn)進行完全開源,所以無法對其進行充分驗證。只能嘗試對[4]中JP Morgan的改進算法進行驗證。
2. 需要考慮是否可以對Zether進行簡化,減少橢圓曲線的計算次數(shù),從而減輕對節(jié)點計算資源的消耗。
Zether & Qtum
Zether舉例了4個主要的應(yīng)用場景,包括Sealed-bid Auctions(私密競標的拍賣)、 Payment Channels(支付通道)、Stake Voting(權(quán)益證明投票)、Privacy-preserving Proof-of-Stake(保護隱私的PoS)。其中,前兩個是和隱私相關(guān)的商業(yè)應(yīng)用場景,是Qtum當(dāng)前重點關(guān)注的方向之一;后兩者增加了PoS過程的隱私性,可適用于Qtum共識機制的改進。
Zether目前Gas消耗太高,無法有效應(yīng)用于Ethereum。以太坊的一些EIP[7][8]可以降低其Gas,但需要很長的一段時間來實現(xiàn)這些改進。另外,通過增加預(yù)編譯合約來實現(xiàn)隱私算法中一些常用的算法,也會對Zether的應(yīng)用有很大幫助。這些改進都可以基于Qtum來實現(xiàn)。
未來計劃
首先,需要在Qtum運行Zether的智能合約,查看其Gas消耗以及對節(jié)點計算資源的真實消耗。其次,需要深入調(diào)研其他基于智能合約的隱私方案,例如AZTEC[9]等。最后,可以考慮如何基于Qtum即將推出的x86虛擬機上增加一些隱私解決方案。