知道創宇區塊鏈安全實驗室|零知識證明系統先行者zkSync

買賣虛擬貨幣

前言

關注區塊鏈的朋友,經常會在圈子裡面看到有關零知識證明( zero knowledge proof,簡稱zkp )的資訊,而 zksync、mina 等知名專案都是使用到了零知識證明的相關技術。

而實際上,這並不是什麼新技術,早在1985年,由mit教授shafi goldwasser, silvio micali 和密碼學大師 charles 在《the knowledge complexity of interactive proof-systems》論文中提出。

正是這篇文章提出了零知識證明這個偉大概念,並逐步成為了現代密碼學理論的根基之一,而 shafi goldwasser 和 silvio micali 也於2012 年獲得了有“計算機界諾貝爾獎”之稱的圖靈獎.


什麼是零知識證明

零知識證明指的是證明者能夠在不向驗證者提供任何有用的資訊的情況下,使驗證者相信某個論斷是正確的。或許這樣的描述還不夠通俗,其實在我們日常生活中,也經常會有零知識證明的身影。

例1: 

比如我有一個車子,我要向你證明我有車子的鑰匙能開啟車門。

在這裡,我要證明的論題是:我有這個車子的鑰匙,第一種做法是,我直接當你的面用車鑰匙開啟車門,還有一種做法是,我直接拿出車裡面的東西給你看。

第一種方法你直接看到鑰匙開門的過程,這不算零知識證明,因為你看到了鑰匙。

第二種方法,驗證者並不需要知道我用鑰匙開門的過程,也能判斷出我有這個車子的鑰匙,整個過程我們認為驗證者對於鑰匙是零知識的。


例2:

a 是紅綠色盲,b 是正常人,現在有一個紅球和一個藍球,除了顏色,其他大小質地等其他因素完全一樣,因為 a 是色盲,那他看到的這兩個球是一樣的,那 b 如何才能讓 a 相信這兩個球是不一樣的顏色呢?具體要怎麼來做呢?

很簡單,b 可以把兩個球都給 a,a 分別一隻手拿一個球,並藏在自己身後,a 自己決定要不要交換兩隻手的球(我們可以認為這裡的交換是隨機的,且換球與否只有a自己知道)。

然後 a 再把兩隻手的球拿給 b 看,b 只需要判斷是否交換球即可,當然一次並不能證明,但如果我們猜 100 次呢,1000 次呢,如果 100 次,甚至 1000 次 b 都能正確猜對是否交換兩個球,那 a 就可以推斷出這兩個球的顏色是不一樣的了。

在整個過程中,a 都不知道球的正確顏色,所以我們認為 a 對於球的顏色是零知識的,但是a卻透過這樣的方式正確推斷出這兩個球的顏色不一樣。


零知識證明的性質

上面的兩個例子著重強調了零知識證明的“零知識”這個特性,但零知識證明作為一種證明手段,它也應該具備證明的基本性質:一是足夠有說服力,而是無法作假。

具體而言,一種零知識證明的方法需要具備如下三個性質:

完備性(completeness):若證明方確實掌握了某論斷的答案,則他肯定能找到方法向驗證方證明他手中掌握的資料的正確性,即真的假不了。(對應上面色盲遊戲的問題,就是證明方b會重複耐心地向驗證方a真實回答是否交換球的問題,以證明這兩個球的顏色不一樣。)

可靠性(soundness):若證明方根本不掌握某論斷的答案,則他無法說服驗證方他手中所謂答案的準確性,即假的真不了。(對應上面色盲遊戲的例子,就是如果證明方b也是色盲,那自然沒有辦法準確回答是否交換球咯。)

零知識性(zero-knowledgeness):驗證方除了知道證明的結果外,對其他資訊一無所知。

當然,現實生活中,還有很多這樣的例子,我們不一一列舉,用到零知識證明的專案很多,這裡我們一起來了解一下 zksync,zksync 是基於 zk rollup 架構的低成本擴容協議,主要透過零知識證明和資料可用性保障使用者資產安全。


zksync的整體架構工作過程


watcher 負責監控 zksync 合約交易,sender傳送 zksync 智慧合約的交易,而 mempool 負責收集交易。

整個過程會產生兩種交易:l1交易和l2交易。


block proposer 將交易打包,並更改世界狀態( plasma state )。在世界狀態更改後,透過block committer 生成證明需要的資訊。具體到存款和轉賬流程如下:

存款

1、使用者呼叫 l1 zksync 智慧合約儲存資金,該交易發生在 l1;

2、watcher 監控 l1 存款交易,當交易發生時則會放入 mempool 中,該過程一般會經過 10個區塊確認,但實際使用中,可能需要更長時間 l1 的充幣交易才會在 l2 中生效;

3、block proposer 處理 mempool 交易打包,並提交 state keeper 更新賬本,充幣交易的狀態隨之變化。


轉賬

1、當使用者想要使用 l2 低成本快速轉賬時,呼叫 zksync api 提交轉賬交易;

2、交易同樣會按照流程 mempool --> block proposer --> state keeper 進行流轉;

3、最終 state keeper 通知 block commiter 收集生成零知識證明所需資訊,呼叫 plonk 證明系統生成零知識證明後,藉助 sender 將存款和轉賬等交易資料,以及將對應的零知識證明提交到 l1 的 zksync 智慧合約驗證,等待 l1 交易確認後,watcher 會通知 l2 更新交易狀態為最終確認。


zksync 採用plonk零知識證明系統,其中包括 prover server 和 proving client,在電路設計上,非常巧妙的將交易分割成一個個小的通用處理單元( operation )。

一個 operation 對應的證明電路邏輯支援所有可能交易的 operation 邏輯。多個有關聯的 operation 電路組成交易電路。

多個交易的電路再組合成區塊電路。從而,在固定大小的區塊中也能包含不同組合的交易。zksync 開源了 plonk 演算法的驗證電路,能進行多個 plonk 證明。


相關程式碼連結如下:

https://github.com/matter-labs/recursive_aggregation_circuit


而在整個充幣和轉賬過程中,zksync 並不需要獨立生成新賬戶,zksync 的 l2 賬戶和 l1 賬戶是一一對應的,“共享”一份私鑰,準確的說,l1 的私鑰的 ecdsa 簽名的結果作為 l2 賬戶的私鑰。

這樣在使用的時候很方便,我們直接使用 l1 的地址就可以在 l2上 完成充幣,轉賬或者提幣的操作。


總結

截止目前,imtoken 和 gitcoin 已經深度整合了 zksync,後面還會有更多的專案接入,而隨著 eth 交易量的高速增長,交易的擁堵和高昂的礦工費必將促進 layer2 賽道的競爭,zksync 作為零知識證明系統應用的先行者,或許值得期待。



知道創宇區塊鏈安全實驗室官網:www.knownseclab.com

知道創宇唯一指定存證平臺:www.attest.im

聯絡我們:[email protected]




知道創宇區塊鏈安全實驗室導航


微信公眾號
@ 創宇區塊鏈安全實驗室


微博
@ 知道創宇區塊鏈實驗室
https://weibo.com/blockchainlab


知乎
@ 知道創宇區塊鏈安全實驗室
https://www.zhihu.com/org/zhi-dao-chuang-yu-qu-kuai-lian-an-quan-shi-yan-shi


twitter
@ks_blockchain_
https://twitter.com/ks_blockchain


免責聲明:

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

推荐阅读

;