零知識證明於區塊鏈中的落地應用

買賣虛擬貨幣
摘要現今區塊鏈技術的發展速度愈發加快,區塊鏈應用落地伴隨而來的是使用者對隱私安全性的要求愈發提高。基於此情況,眾多區塊鏈開發團隊提出了多種不同的使用者隱私安全保護機制。其中零知識證明與區塊鏈技術相結合作為一種新的方案為提高區塊鏈隱私安全性提供了更多的可能。本文將結合使用零知識證明的區塊鏈系統-“Zcash" -對其加密技術以及零知識證明進行深入的探討。要點總結:· 零知識證明是. 上世紀80年代提出的一項加密學理論,而其應用在區塊鏈技術出現後才真正實現,該理論闡述了證明者如何在不提供有效資訊的情況下透過驗證者的驗證。· 目前零知識證明在區 塊鏈中的應用大致可以分為三類,分別為可信任初始化設定、通訊設定以及無需可信初始化設定,相對而言可信初始化設定的應用性較差,無需可信初始化設定擴充套件性較好,現階段零知識證明協議偏向於無需可信初始化設定方向開發。· Zcash 作為第一個使用零知識證明的區塊鏈系統,透過zk Snarks實現了證明者與驗證者之間零互動驗證,目前交易模式分為透明交易、Sprout模式以及升級後的Sapling模式。
· zk-Snarks 透過將普通驗證問題轉化為複雜多項式的方式實現證明者與驗證者之間的零知識證明驗證。· 平衡隱私安全保護與利用保護隱私 “作弊”將是未來零知識證明重要發展方向之一。1. 零知識證明介紹零知識證明(Zero-Knowledge Protocols)是上個世紀80年代由麻省理工研究人員S.Goldwasser. S.Micali 及C.Rackoff提出的一-種理論。該理論的核心是闡述證明者如何在不向驗證者提供任何有效證據的條件下證明某個論斷是正確的。《HowtoExplainZero-Knowledge Protocols to Your Children》中舉了-一個經典的例子,文中以《阿里巴巴與四十大盜》的故事為例,阿里巴巴想在不告訴強盜開啟寶庫大i ]方法的前提下證明他是可以開啟大門的,這個時候可以採取的方式是讓強盜與門保持足夠遠的距離,他念動咒語開啟寶庫大門,這時即使強盜不知道開門的方式仍然可以證明阿里巴巴知道開門的方式。透過上述例子可以瞭解到零知識證明特徵屬性主要為三點:
· 完備性: 證明者如果能夠可以透過重重驗證,驗證者則可以判斷證明者的真實性。· 零知識性: 透過驗證的過程中,證明者不可以想驗證者透露具體有用的相關資訊。· 合理性: 這個驗證方法是獨一-無二不可偽造的,除此之外沒有其他方式可以透過驗證。滿足這三點則可以實現零知識證明的驗證方式。2. 零知識證明協議分類對比雖然零知識證明並非新概念,但是實際上- -直未出現契合的應用場景。直到區塊鏈的出現,零知識證明才真正顯示出其發展潛力。
自比特幣問世以來,區塊鏈技術-直處於蓬勃發展階段。作為去中心化的賬本,區塊鏈的安全性始終都是人們最為關注的。儘管地址匿名化對使用者隱私起到了-些保護作用,然而由於鏈上資料透明化,攻擊者依舊可以透過對資料的分析、對網路的拓撲盜取使用者的隱私。零知識證明與區塊鏈相結合使得使用者隱私安全性得到大幅度地提升。

目前密碼學的專家們已經透過零知識證明開發出很多種協議,包括最早被使用於Zcash 中的zk- Snarks(Groth26)以及後來開發的Plonk、Sonic. Starks. DARKs、Bulletproof. SuperSonic等。部分特點對比如下圖所示:

從表格中可知,目前的零知識證明協議根據可分為三類:

· 可信設定協議:最早的Snarks協議使用的是可信設定,例如Groth26協議。Groth26 可以以很小的證明高效的完成驗證。而其缺點是使用的公用參考字串透過一次性可信設定建立,這也意味著參考字串無法升級,一旦程式出現問題,哪怕只是很小的問題也需要重新部署整個電路。另外新的應用也無法直接使用原本的可信設定,需要建立新的可信設定。同時可信設定會生成- -些“有毒廢料”(toxicwaste), 如果“有毒廢料”沒有被及時處理的話有可能對協議的安全性產生影響。

· 通用設定協議: Sonic 是最早的通用設定協議,在傳統Snarks協議之上加以改進,只需初始時進行一次可信設定即可。這也就意味著參考字串可以升級無需重新部署整個電路,新的應用也可以重複使用這個可信設定。然而,在驗證成本同樣不低的情況下,驗證時間與驗證體積都要超過Groth26。

· 無需可信設定協議: 無需可信設定協議在Sonic的基礎上進一步改善。公用參考字串被公開同時不會產生“有毒廢料”,提高安全性的同時,降低了使用的複雜度。然而取消可信初始化設定會導致證明的資料量增大,Starks 的驗證體積更是可以超過100kb。 雖然SuperSonic與Bulletproof 比Starks好很多,但是在驗證時間和驗證體積上仍要超出SnarkSo

針對不同的應用場景,各類零知識證明協議都有其優點,下文將以zk-Snarks為例詳細介紹零知識證明在區塊鏈系統中的實現原理。

3. 零知識證明於區塊鏈中的應 用場景Zcash

3.1 Zcash使用的交易模型

Zcash是首個使用零知識證明的區塊鏈系統。作為以保護隱私為重點的區塊鏈系統, Zcash的交易方式與比特幣的交易方式是不同的,比特幣系統當中使用的是UTXO(UnspentTransaction Output)的方式進行記賬。

舉例來說A擁有10個比特幣,此時A想轉3個比特幣給B,那麼轉賬的方式並不是以“10-3”、“x+3” 的方式進行交易。假設A手中的只擁有一個價值10比特幣的UTXO,那麼首先這個UTXO將被銷毀並生成一-個價値等於7位元而的UTXO與一個價値等於3的UTXO並將價値等於7的UTXO岌放給A,價値等於3的UTXO友放給B,這祥交易就完成了。

雖然UTXO模型很穩定的記錄了比特幣的每一筆交易記錄,然而所有的交易資料卻也直接公佈到了鏈上,也就是說所有人都可以看到這些交易資料,這在隱私安全性上來說是存在著隱患的。

為了防止使用者交易資料被“攻擊者”利用,同時保證交易的真實可信性, Zcash在原本的UTXO模型上進行了改進,使用Note作為其交易結構。如下表所示:

與UTXO不同,Zcash使用的Note並沒有直接將交易後作廢的原UTXO銷燬,而是建立了一個作廢列表對原來的作廢後的Note進行儲存記錄。

Zcash中透過兩個表對交易進行記錄,票據表(Commitment) 負責儲存有效的、可使用的票據(Note),與之相對作廢表(Nullifier) 表中則負責記錄已經失效的票據。Note 當中包含如下四個元素:

· 使用者的公鑰 pk:由使用者私鑰sk生成,負責充當收款人地址
· Value :記錄Note的價值
· 隨機數rho:當Note被交易之後作廢時,充當該Note在作廢列表中的唯一編號(nf)。 .
· 隨機數r:對r進行Hash後可以生成rho。

當交易者想要將自己手中的資產交易出去的時候,可以透過釋出作廢Note的“編號”並將其放入Nulifier表中的方式進行交易。

以下圖為例,A想要給B轉7個ZEC:

a)首先A找到了- -張自己的有效Note3,並使用自己的私鑰a _sk (A的Spending key)對這張加密(Hash) 的Note進行解密並發現這個Note中有10個ZEC。

b)接下來以與 UTXO模型相同的方式把這張Note3分為一張value為7 ZEC的Note4和一張value為3 ZEC的Note5。

c)新的Note4與Note5中包含了生成的新隨機數r4與r5、透過r4與r5生成rho4和rho5以及在Note4當中置入的B的公鑰b_ .pk (B 的Paying key)和Note5中置入的A的公鑰a_ .pk (A 的Paying Key)。

d)此時Note3不會被銷燬。A需要將Note3的rho3 (Hash(r3)、 經過簽名加密Note4與Note5廣播到全網,由礦工進行驗證。

e) 礦工收到訊息後在Nullifier表中進行查詢,當沒有發現Nullifier表中並不存在A廣播的rho3並驗證了A對Note3的使用權益後將rho3 (Hash(r3)) 放入Nulifier表中,Note4與Note5放入Commitment表中完成交易。

f) B收到 Note4後可使用b_ sk (B 的Spending key)對Note4進行解密並獲取其使用權。

上文中簡單的描述了Zcash中的交易過程,其中有幾個問題需要注意。

首先,當使用Zcash進行匿名交易時,就意味著Note中的資訊全部都是加密過的,也就是說公鑰pk資訊、value、r以及rho都是隱秘的,除了交易方之外無法被他人看到。在上述交易過程中,當交易進行到步驟(d) 時,A需要將Note4與Note5分別使用簽名加密才可以廣播到全網,如此一來A的a_ pk (A的Payingkey)和B的b_ _pk (B的Payingkey)則會公開,這不符合.上述描述中a_ pk (A 的Payingkey)與b_ pk (B的Paying key)的資訊也是隱藏的特點。

其次,如果Note中的資訊全部匿名化了那麼驗證者則無法透過常規的方式驗證交易的真實性。下文將就透過Zcash的交易模式對這兩個問題進行說明。

3.2 Zcash 的交易模式

目前Zcash的交易方式分為三種:透明交易、Sprout 模式交易、Sapling 模式交易。

3.2.1透明交易

在Zcash的透明交易模式中,交易時無需對交易資訊匿名化,使用者可以直接使用透明的地址以及私鑰完成交易的驗證。

3.2.2 Sprout 模式

3.2.2.1 Sprout 內部交易結構

Sprout (萌芽期)則是Zcash早期使用的匿名化交易方式。下圖為Sprout內部交易結構:

仍以上文為例,A與B進行交易,此時為了對交易新增簽名同時不暴露公鑰,Sprout 中透過產生隨機交易金鑰對“JoinSplitPublicKey/ JoinSplitPrivateKey" 的方式對交易內部資料進行簽名(JoinSplitSig)。 由於金鑰對是一次性 隨機生成的,所以生成的金鑰對只能保證資料的完整性而不能保證資料安全性,如果攻擊者重新生成一對金鑰對的話那麼就有可能對交易進行重新簽名篡改交易資料,為了防止這種情況發生Sprout 設計了hsig 機制。hsig 是透過JoinSplitPublicKey與JoinSplit內部資料結合算出的Hash值,生成的hsig再與傳送方a_ sk(A的Spending Key)進行加密儲存在JoinSplit 當中以確保其他人無法篡改隨機生成的簽名,從而保證了交易內容的安全性。

3.2.2.2 Sprout “線上”資訊傳遞方式

除此以外Sprout還需要保證接收者能夠在不暴露資訊的情況下驗證傳送者傳送資訊的正確性。如下圖所示:

圖中交易地址中b_ pk (B 的Payingkey)是B透過私鑰b_ sk (B 的SpendingKey)生成的公鑰,b_ pkenc (B 的Encrypted Paying Key)則是B透過b_ _skenc(B 的Encrypted SpendingKey)生成的公鑰。Incoming Viewing Key中的b_ _skenc (B 的Encrypted Spending Key)則是透過b_ _sk (B 的Spending Key)生成的私鑰。

當A要將隱秘資訊傳遞給B時,首先需要獲取B的公鑰b_ pk (B的Payingkey)與b_ pkenc(B的Encrypted PayingKey),隨後A將b_ _pk (B的Payingkey)置入到隱秘資訊中(也就是.上文中的Note)並透過Hash加密後放入到Note Commitment中等待驗證。接下來, .A隨機生成金鑰對“esk/epk" ,其中esk與交易地址中的b_ pkenc (B 的Encrypted PayingKey)結合生成shared secrets,再透過shared secrets生成對稱金鑰Kenc。

接下來Note Plaintext 會透過Kenc 進行加密生成Cenc 並與之前生成的epk同時存放在JoinSplit中。此時B想要得到加密資訊的內容就需要使用b_ _skenc(B 的Encrypted SpendingKey)與epk進行結合生成shared secrets,並透過shared secrets獲得Kenc解密Cenco這個過程中由於只有B擁有b_ skenc (B 的Encrypted Spending Key),所以其他人無法透過epk獲取金鑰Kenc從而保障了資訊傳遞的安全性。最後B可以透過將自己b_ _pk (B的Paying .key)代入隱秘資訊中的方式求得Note並對其進行Hash運算與Commitment中傳送者上傳的Hash值進行對比確認資訊的真實性。

3.2.3 Sapling 模式

3.2.3.1 Sapling 內部交易結構

Sapling (茁壯期)則為Sprout 的升級版。交易速度提高的同時,內部結構變得更為複雜。Sapling內部交易結構如”下圖所示:

Sapling不採用Sprout 中的JoinSplit 結構進行交易,轉而使用SpendDescription 與OutputDescription分別表示消費與入賬。其中SpendingDescription 中包含了作廢列表(Nulifier) , OutputsDescription 中包含Note Commitment以及B驗證時需要的Cenco同樣,為了保障交易的完整性與不可篡改性。A同樣需要對交易進行簽名。圖中valuecommitment是value同態隱藏得出的值,rcv則是生成value commitment的隨機數,透過對SpendDescription中所有rCV的和與OutputDescription中所有rcv的和進行求差值的方式得到簽名私鑰bsk;透過SpendDescription中所有rcv的和與OutputDescription 中所有rcv的和求差再與ValueBalance做差的方式得到簽名公鑰bvk。此時將交易中的資訊進行加密再與bsk結合生成BindingSig以保證交易資訊中資料的真實性與不可篡改性。

Sapling中不止對交易進行簽名,同時還會對SpendDescriptions中的資訊進行簽名。如下圖所示:

圖中我們可以看到A透過a_ sk (A 的Spending Key)生成了a_ ask (A的AuthorizationSpending Key),a_ ask (A 的Authorization Spending Key)與隨機數a結 合生成金鑰rsk,rsk生成rk並將其置入SpendDescriptions中,隨後rsk透過與交易資訊中資料的Hash值進行結合生成SpendAuthSig如此-來變增強 了SpendDescriptions 的安全性。

3.2.3.2 Sapling “線上”資訊傳遞方式

與Sprout不同,A傳送資訊給B時沒有采用固定b_ pk (B的PayingKey)與b_ pkenc (B 的Encrypted Paying Key)而是採用了更具有流動性方式提高訊息傳遞的匿名性。同時Sapling對於金鑰的許可權做了進一步分化。

· Incoming Viewing Key

B通辻Incoming Viewing Key可以査看Note Plaintext中的A侍送せ來的資訊,如下圏所示:

首先,B會透過b_ sk (B 的Spending Key)生成兩個加密私鑰b_ ask (B 的AuthorizationSpendingKey)和b_ nsk (B的Nullifier SpendingKey),接下來b. _ask (B的AuthorizationSpendingKey)和b_ nsk (B的Nulifier SpendingKey)會分別生成b_ ak (B的AuthorizationKey)與b_ nk (B的NulifierKey)並結合會生成b_ ivk (B的IncomingViewingKey), b_ ivk(B的Incoming Viewing Key)透過與隨機數d的結合生成pkd (Diversified Paying Key)作為B的接收地址。現在A將pkd (Diversified Paying Key)置入到隱私資訊當中,並透過Hash加密將Hash值放入Note Commitment當中以待B的驗證。A繼續生成隨機金鑰對“esk/epk" , pkd (Divrsified Paying Key)與esk的結合會生成sharedsecrets,透過sharedsecrets可以生成對稱金鑰Kenc隨即對Note Plaintext進行加密形成Cenc,接下來A將epk與Cenc同時放入OutputsDescription中即完成了他的工作。B接收到OutputsDescription中資訊後可以使用b_ ivk(B的IncomingViewingKey)與epk進行結合得到shared secrets,並與A相同得到對稱金鑰Kenc, Kenc 透過對Cenc的解密得到Note Plaintext的內容。有了隨機數d, B可以透過b_ ivk (B的IncomingViewing Key)求得pkd (Diversified Paying Key),並將其置入Note Plaintext中便可與Note Commitment中的Hash值對比驗證A的交易資訊是否真實。

· FullViewing Key

與IncomingViewingKey不同,FullViewing Key B不僅可以檢視Note Plaintext中的資訊,也可以使用b_ _fvk (B的FullViewingKey)驗證OutputsDescription中的全部資訊。如下圖所示:

Full Viewing Key中包含b_ ovk (B的Outgoing Viewing Key)、b. _ak、b_ nk 三個金鑰,上文中提到,b_ ak (B 的AuthorizationKey)與b_ _nk (B 的NullifierKey)結合會生成b_ _ivk(B的Incoming Viewing Key),也就是說Full Viewing Key具備直接解鎖OutputsDescription的能力。不僅如此,b_ ovk (B的Outgoing Viewing Key)透過與epk結合可以直接生成對稱金鑰b_ _ovk (B 的Outgoing Viewing Key), A便可以使用b_ ovk (B的Outgoing Viewing Key)對pkd (Diversified Paying Key)與esk進行加密生成Cout,接下來B可以使用b_ _ovk (B的Outgoing Viewing Key)對Cout 進行解密從而直接得到pkd(Diversified PayingKey)與esk。至此,B已經得到所有金鑰並可檢視OutputsDescription中的所有資訊。

3..3 zk- Snarks驗證機制

透過複雜的交易機制Zcash成功的隱藏了使用者之間所有的有用資訊,保障了使用者隱私的安全性,然而這也是對驗證者驗證交易真實性提出了挑戰,此時便凸顯出了零知識證明的重要性。零知識證明可以使驗證者無需獲得證明者有效資訊的情況下並可證明交易資訊的真實性與否,也就是說即使證明者可以在無需提供金鑰解鎖的情況下證明自己對於某筆資產的使用權。

Zcash中使用的零知識證明為zk_ Snarks (zero knowledge Succinct Non-interactiveArgument of Knowledge),中文為“零知識簡潔非互動式證明”。Zk_ Snarks可以在證明者與驗證者無互動的情況下高效的完成某些驗證。

3.3.1 驗證過程

如上文中提到,證明者若想驗證對某一_筆 資產的使用權時需要提供一份Proof給驗證者。根據Christian Lundkvist對Proof描述,Proof 的生成過程如下:

首先證明者需要提供一個隱秘引數w並透過電門C轉換成多項式:

circuitC(x, w)

接下來系統中Generator將會使用產生的多項式與隨機引數入生成對應金鑰對pk,vk 作為驗證時使用的金鑰對:

證明需要透過Prover進行計算生成Proof r並交與驗證者:

Prover(x pub inp, w sec inp):
π=P(pk,x,w)

最後Verifier拿到Proof π以後會對多項式進行驗證:

Verifier:
V(Vk,x, π)=(3 ws.t. C(x, w)

若驗證成功則證明證明者確實擁有這筆資產的支配權,驗證者則會確認交易,反之則失敗。在這個驗證過程中隱秘引數w只有證明者自己知道,驗證者無法得到所謂的有用資訊。λ引數的保密性同樣至關重要,如果證明者得到入引數,無論他是否知道隱秘引數w都可以生成假的proof並透過驗證者的驗證,也就是上文中提到的“有毒廢料”。

3.3.2 驗證邏輯

透過.上文的操作可以得知zk-Snarks中大概的驗證過程。下文將對其具體的驗證邏輯進行簡單的介紹。

zk- Snarks的驗證邏輯是清晰的,它的目的是“驗證”而並非“求解”。 基於此, zk-Snarks 並沒有直接使用求解簡單數學方程來驗證一個問題的正確性,因為證明者求出解也就相當於暴露了自己的有用資訊。zk-Snarks採取的方式是將普通計算方程P (Polynomial) 問題透過QAP(Quadratic Arithmetic Programs,二次算術程式)的方式轉化為NP (Non-deterministicPolynomial,非確定性多項式)問題。簡單來說電門C的作用是將-一個驗 證等式轉換為多項式的一個過程:

V神用例: w**3+w+5=f= 35

這個方程很容易便可得到答案w等於3。問題是現在證明者不想把w等於3這個答案(也就是秘密引數)告訴驗證者。所以這個等式最終透過QAP轉換成了向量積表示形式:

w. a(n) *w. b(n)-w. c(n)= 0

如此一來w便成功被隱藏了,但是想要用來進行驗證仍然不夠所以繼續轉化:

w. a(n) *w. b(n)-w.c(n)=x* Z(n)

其中Z(n)表現形式為:

Z(n)= (n-1)* (n-2)* (-3)*..*-n)

n的取值範圍為1,2.3...no

至此多項式轉化的步驟就算完成了。N的問題透過電門C成功轉化為了NP問題。為了方便下文的表示我們將多項式設為:

接下來證明者便需要透過驗證者給出的n來計算P(n)與H(n),並將計算值交與驗證者驗證P(n)= H(n) * Z(n)的正確性。如果正確,驗證者有很大的機率可以確認證明者確實知道隱秘引數W,反之則判定證明者提供的Proof是假的。

目前為止驗證的邏輯可以理解為驗證者需要透過驗證多項式左右關係來確定證明者是否真的對一筆資產擁有著使用權,但是這種驗證方式若想安全的實現,有些問題仍需要解決,否則這種程度的驗證帶來安全隱患是非常大的。

首先n值的選取是多樣性的,在n值不確定的情況下,證明者還是有機率透過製造假的P' (n)使多項式左右成立進而完成驗證。對於這個問題zk Snarks採取的方式是對選取n的方式增加限制,驗證者選取的n是透過隨機抽樣取得的,如此一來即使證明者撞到了P' (n')= P(n)= H(n) * Z(n)這種情況,n° 恰好也等於n的機率還是很小的.

透過n值隨機抽樣使得證明者無法直接偽造P^(n')= H(n) * Z(n),然而證明者在得到n的情況下,仍可以透過偽造出H' (n)使得P' (n)=H^ (n) * Z(n)的方式透過驗證者的驗證,因為驗證者的任務只是驗證P(n)/H(n) ?= Z(n)來確定結果對錯。為了防止這種情況的發生zk-Snarks對n值進行了同態隱藏(Homomorphic Hiding) 3。 同態隱藏的目的是為了讓n轉換成E(n)的同時仍然滿足P(E(n)) = H(E(n)) * Z(E(n))多項式的驗證,只能得到n值同態值的證明者自然無法透過真實的n值構造假的H (n)透過驗證。

至此問題仍未解決完,儘管對n值進行了同態隱藏,證明者還是有可能在不知道w的情況下製造偽證使得P(E(n)) = H(E()) * Z(E())。由於P(E(n)) =w . a(E(n)) * w. b(E(n)) - w . (n),證明者可以透過偽造P(n))=w' .a' (E(n)) *w'. b' (E(n)) - w^.c ())的方式完美偽造P())來透過驗證者的驗證。此時zk Snarks採取了KCA (Knowledge of Coefficient Testand Assumption)機制來阻止證明者偽造a()、b()、 c()等向量積。以a(E())為例:

a(E(n))→a(E()), λa(E(m))

原來的a(E(n))轉換成了a(E(n))與入a(E())的向量對, 並且λ無法透過入a(E(n))/ a(E(n))的除法計算出值。這樣便限制了證明者偽造a' (E())的可能,因為自己偽造的ai (E())無法確定λa (E(n)的值。

除此之外證明者在向驗證者提交Proof時,Proof 中還需要計算sum(入a(E(n)), (Ab(n)), λ())的值以確保證明者不會使用ya(E()), y入a(E(n)) (倍化)的方式偽造向量積對。

向量積對解決了證明者偽造a(E())的可能,但是同樣引入了新的問題。

如上述公式所示,新的驗證方式於單純的加法同態運算之外又引入了加減法,此時zk-Snarks必須引入乘法同態運演算法則才能解決驗證問題。針對此問題zkSnarks採用了雙線性對映(bilinear map) 4的方式使多項式的驗證變為可能。

最終簡化版驗證多項式如下文公式所示:

w. (E()),入a()) * w . (n)), bNb()) -W . ()), A入c(E(n)) = H(E(n)) * Z(E(n))現在回到.上文描述的zk-Snarks的驗證過程來看驗證邏輯便清晰了很多,其過程如下:

a) circuit C(x, w)的作用是將w**3 +w+5=35 (例子)轉換為w. a(n) *w. b(n)-w.c(n) = H(n) * Z(n)的一個多項式。引數x為H(n)。

b) Generator(Ccircuit, λ is ? ): (pk,vk)= G(\, C)則是將C circuit中的a()、(E(n))、())透過入轉換為a(E())、入a(n)), b(E())、入b(E(n)), c(E(n))、 入c(E())。 pk、vk則為對應公共引數。

c) Prover(x pub inp, W secinp): π =P(pk, x, w則是透過pk、W、X生成了包含P(E())、H()的Proof π。

d) Verifier: V(vk,x, π)= (3 w s.t. C(x, w)則是驗證者最終接收到π,再利用雜湊值x、公共引數vk驗證多項式的真偽。

綜.上所述,zk-Snarks的目的是透過多次轉換將能隱藏的資訊全部隱藏起來並保證證明者在無法篡改被隱藏的驗證內容的情況下驗證最終的結果。

4. 零知識證明對未來區塊鏈隱私性發展的作用

隱私始終是區塊鏈研當中的熱話題,其中如混幣機制、二次加密等很多技術已經被廣泛使用。然而這些技術始終繞不開需要透過金鑰進行加解密的方式對證明者進行驗證,零知識證明與區塊鏈的結合猶如- -扇新的大門,為區塊鏈隱私保護提供了新的發展方向。證明者無需向驗證者提供有用的資訊便可驗證真實性使得攻擊者很難透過對具體交易資料以及資金流向進行分析從而找到使用者真實的身份,這使得未來區塊鏈安全性發展愈發有前景。

與此同時,零知識證明的愈發成熟也就代表著鏈.上個人隱私保護與匿名性愈發強大。這為使用者帶來可靠安全性的同時也會給一些想利用區塊鏈“作弊”的人提供機會。零知識證明為區塊鏈隱私性提供安全保障的同時,如何平衡隱私性保護與“違規”也將是未來區塊鏈發展道路上需要解決的重要問題之一。

5. 總結

零知識證明與區塊鏈技術的結合為使用者隱私保護機制的發展開啟了一扇新的大門。長久以來零知識證明難以實現落地應用,而區塊鏈技術的出現使零知識證明的優點得到了充分發揮。Zcash作為第一個結合零知識證明的區塊鏈系統實現了證明者與驗證者之間的零互動驗證,驗證者無需證明者提供任何有用資訊便可實現對其的驗證,提高了交易使用者之間的隱私安全性。Zcash將交易方式分為透明交易與隱私交易兩種,隱私交易經過發展從早期的Sprout模式到升級後的Sapling模式不斷進行最佳化,效能上得到了顯著提高,使用者體驗感亦得到了改善。由於Zcash的隱私交易模式是透過對使用者金鑰進行不斷加密實現的,驗證者無法得到證明者的地址以及驗證金鑰,因此零知識證明協議是Zcash區塊鏈中核心的技術模組。Zcash 中使用zk-Snarks作為其零知識證明協議,zk Snarks則是透過將普通驗證問題轉化為複雜多項式的方式完成證明者與驗證者之間的零互動驗證。

未來零知識證明的研發更傾向於無需可信初始化設定方向,這可以使得使用零知識證明的區塊鏈系統在提高隱私保護機制的同時擁有更好的擴充套件性。然而,零知識證明為保護區塊鏈隱私提供了可行性的同時亦有可能為一些想利用區塊鏈“作弊”的人提供了機會,如何平衡隱私保護與安全監控將是零知識證明未來發展道路上的重點之一。

免責聲明:

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

推荐阅读

;