姚翔:遞迴零知識證明,如何打造簡潔的區塊鏈?

買賣虛擬貨幣


現在的區塊鏈成百上千,大家耳熟能詳的就有很多。無論是以太坊還是以太坊的殺手們,很多都已經構建了自己龐大的生態系統。為什麼這時候mina要做一條新的區塊鏈?它的優勢究竟是什麼?如果說只是在枝節上有一些改進,那麼是不是值得去啟動一條區塊鏈呢?

實際上mina在技術層面和應用層面都有比較獨到的創新,它的技術願景是打造世界上最“輕”的區塊鏈,這個怎麼理解?我們可以一會兒再展開。

在應用層面,mina想要構建真實世界和密碼學世界之間的一個橋樑,而且這個橋樑是能保護隱私的。mina是如何進行隱私保護的呢?我們可以先從現在區塊鏈面臨的一些問題來說起。

我們看到目前一些公鏈中出現了以下問題:

第一,積重難返。現在的區塊鏈都很“重”,很重的意思是說要去執行一個節點非常困難。我相信聽眾朋友們很少有人會自己去執行以太坊的節點,大家都是透過一些中間機構去和以太坊網路互動,也就說沒有中間商直接去訪問區塊鏈非常的昂貴,也很困難。

第二,規模化分佈協同。參與這個網路,它的規模化、分散程度也是受限的,因為參與這個網路對資源是有很高要求的,尤其是頻寬資源。當吞吐量上升時,執行節點的門檻會提高,去中心化的程度會降低,或者反過來說網路集中化的程度會增加。

第三,隱私和可驗證性。所有的事務、交易和資料都是被公開、上鍊的,使用者的隱私並沒有得到很好的儲存,實際上我們想要的是驗證這些資料的準確性,並不需要資料本身。

那這些問題怎麼去解決呢?mina在設計上就是要解決這些問題。

第一,mina是很輕的區塊鏈,它的大小在kb級別,所以使用者去維護這樣一個全節點相對來說是比較容易的。因此,每個使用者都可以去執行一個節點,這樣在訪問mina的時候不需要第三方服務提供商。

第二,mina共識演算法非常特別,共識參與不受限制,mina共識驗證者的數量是沒有上限的。實際上現在大多數pos演算法,如果是基於這些委員會選舉的共識演算法,一般來說只能容納大概數百名的驗證者,因為網路通訊的複雜度隨著驗證者數量的上升會急速上升,節點沒有辦法承受通訊開銷。而mina選用了一個比較成熟的競爭性pos演算法ouroboros,並且做了一些改進,產生了一個叫做“ouroboros samasika”的變體,這是有助於節點的分散。

同時,它還帶來一些額外的好處,因為mina對驗證人是沒有罰沒機制的,所以在執行節點的時候不用擔心自己掉線或者是大規模掉線所導致的罰沒。

第三,在mina上部署的應用,叫“snapps”,snapps就是零知識證明驅動的應用。這些應用可以在保護使用者隱私的情況下使用離線資料,而使用者分享的不是資料,不需要把自己的隱私資料提交到區塊鏈上,而是提交關於這些資料的證明,這樣區塊鏈只需要去驗證這些資料符合一定的要求就可以了。

聽了這些會覺得mina有些獨特的地方、有些神奇的地方,它到底是怎麼工作的呢?我們從整體上來討論這個問題。

從設計上,mina的整個區塊鏈都只有22kb大小,並且永遠維持這個大小。也就是說隨著時間的增長、隨著網路交易的變多,它的大小仍然不會變化。而22kb是很小的,可能就是幾條語音訊息的大小,所以任何的裝置,包括運算能力相對較弱的手機,也可以輕鬆地去同步驗證mina網路,而且不需要花費很長的時間。

mina是如何做到這麼“輕”的呢?因為mina使用了一個技術——遞迴零知識證明,所以,我們不需要從頭開始驗證整個區塊鏈。以以太坊為例,如果一臺新機器要加入以太坊網路,就需要下載以太坊從創世的那天開始產生的所有區塊,並執行所有交易,從而才能得到最新狀態。在mina當中,這個全節點並不儲存鏈本身,儲存的是這個狀態變化的證明,所以儲存的資料也變少了。同時,由於遞迴零知識證明的引入,也不需要從頭開始對資料進行驗證。

我們可以做個簡單的比較,其實比特幣區塊鏈的大小大概是在300gb,用一臺普通個人電腦需要花大概6個小時進行同步。以太坊的大小在700-800gb,不同客戶端間略有差異,同步的時間是以天計的,取決於網路速度。

為什麼遞迴零知識證明可以實現這樣的一個功效?這實際上是一個比較深的密碼學演算法,但我們嘗試用一種比喻的方式來幫助大家去理解這個問題。

在大部分割槽塊鏈當中,全節點需要儲存所有的狀態資料,那“狀態”是什麼呢?比如說我有10塊錢,或者說我在某某一個應用上有塊地,這些就是狀態資料。而我要去操作這些資料的時候,所有的節點需要執行這些交易,它必須擁有當前的這些狀態資料,也就是說它必須儲存了所有的狀態。

當一個新區塊產生時,所有的節點都需要執行所有資料交換,更新到最新狀態。這樣一種架構導致了大量重複的計算,並且狀態資料會越來越多,因為越來越多的人在使用這個區塊鏈,所以執行會越來越耗費資源。

而使用零知識證明技術實際上是改變這樣一種執行的架構,不再讓鏈本身進行計算,而是把狀態進行壓縮、做一個快照,當新區塊產生時,要從狀態a變成狀態a’,那需要提供的是什麼呢?是一個關於這個狀態變化的零知識證明,這樣每個節點只需要去驗證證明的正確性,不需要實際執行,這樣計算量就大大降低了,狀態也不會發生膨脹。

這樣看起來每個區塊都需要提供一個證明,區塊鏈大小還是線上性增長,這時候遞迴零知識證明就起到了作用。那什麼叫“遞迴零知識證明”?簡單說,就是我們把證明的過程也封裝起來,在下一次證明的時候把上一次證明也封裝到這裡面來,所以每個證明都可以包括對所有歷史的驗證,這個聽起來會有些晦澀。

比如你想向一個朋友證明你每天都去了一個公園,這個公園有一個日期牌,你要做的是什麼呢?可以每天在那個日期牌前面拍張自拍,並且把這個照片發給他,一個星期就要發7張照片給他。但我們有一種方法可以去減少這樣的互動,怎麼做呢?第一天去拍照,從第二天開始,每一天都把前一天的照片拿在手上,再做一個自拍,在第七天之後,實際上只要把第七天的照片發給朋友,他就能很輕鬆地驗證你每天都去了那個地方,不需要再發7張照片給他,這就是遞迴證明。當然,這是一個比方,不是零知識的。

如果說要更詳細地瞭解零知識證明,我建議大家可以去讀一些更專業的文獻。同時,今年3月,mina基金會和以太坊基金會開展了一個聯合資助,去徵集能讓以太坊的虛擬機器高效驗證mina提供的遞迴零知識證明的方案,如果這個能實現, mina零知識證明的網路也可以同時為以太坊區塊鏈提供零知識的計算服務。

總結一下,zk-snarks其實就是零知識簡潔、無互動知識認證,大家也可以認為就是一個零知識證明。在它的幫助下可以實現一些特性:

1、低門檻的可驗證性;

2、分散的可擴充套件性;

3、一種新的應用形式 snapps。

當然這些工作仍然是在高速的開發當中,為了實現這樣的願景,我們有很多的工作要去做,接下來主要談一談在mina上的應用snapps。

現在大多數的區塊鏈實際上沒有辦法和網際網路的應用直接互動,這直接限制了應用的適用範圍和效用。mina可以在保護隱私的情況下,和任何網站互動,並且可以把真實世界當中已經驗證過的資料傳到鏈上,讓鏈上應用直接去使用。所以,mina的願景其實是要打造一個通往真實世界的隱秘的閘道器,這個“隱秘”的意思就說保護使用者隱私。

這個閘道器實際上就是透過snapps來實現的,snapps就是零知識證明驅動的應用,它具有一些很好的特性:

第一,可以從網際網路無縫輸入區塊鏈,只要網站支援https協議,就可以從這個網站中把資料匯入到mina的區塊鏈上,同時這個資料是可驗證的。

第二,資料本身並沒有被暴露,使用者仍然保留著對資料的控制,而僅僅去驗證和分享關於這個資料的證明。你拿到的並不是這個資料本身,而是一個你不知道是什麼的東西,但可以去驗證背後的資料具有某些屬性。

我們給一些用例:

第一,基於snapps可以隱秘地去訪問一些網際網路服務,可以為使用者資料生成相應證明,這些證明可以由網際網路的應用來驗證。同時,也可以把網際網路的資料匯入到mina上,而在這個過程中,個人資料是沒有被洩露的,不需要去信任任何人,信任的只是演算法本身。

第二,藉助這樣一種技術可以去構建無需許可的網際網路預言機,因為任何網站只要提供了真實世界的資料,不需要網站本身的許可,只是用現有的這些網際網路協議,就可以把這些資料可信地傳輸到mina區塊鏈上。

第三,有點像一個did協議。可以用mina來完成對網際網路網站的登入服務,不需要建立賬戶或者交出個人資料。

我們再給一個更加具體一點的用例,這個用例也是在今年3月份的時候,mina和teller(defi的應用)聯合釋出的一個示範性的應用。

mina提供的一些良好特性,可以幫助使用者在teller上透過零知識證明的方式驗證自己的信用分,獲得所需服務。具體來說,就是使用者去登入一個信用分查詢服務的網站,並且去查詢自己的信用分,同時在自己的本地去生成信用分的證明,並且把這個證明傳送上鍊。

而這個證明本身並沒有暴露使用者的信用分分數,社保號等隱私資訊,僅僅提供他的信用分大於700的證明。只要使用者提供了這樣一個分數的證明,teller就可以為這個使用者提供所需服務。大家可以去teller網站上檢視這個案例的demo。

而這僅僅是一個開始,一個小的嘗試,在過去的半年時間內,零知識證明得到了高速發展,如果沒有密碼學技術的迭代,我們不能想象可以在工程上去實現這樣的應用。

伴隨著這種對未來的期許,對密碼學發展的期待,我們認為在不久的將來不需要可信設定的可組合的智慧合約將會很快實現,而mina也會提供很多開發者工具,幫助形成新的應用正規化。比如隱私身份的核查、網際網路觸發的智慧合約,我們知道現在智慧合約的觸發有的是要依賴一些預言機。

再比如說,可以用mina零知識證明能力服務以太坊,讓它們去具有新的功能,而不需要把以太坊上的應用邏輯牽移到新的區塊鏈上(這是很多新的區塊鏈在嘗試的事情)。

前面都是一般性的介紹,接下來我想深入介紹關snapps,談一談他的架構。

snapps和去中心化應用有什麼區別?主要有以下幾點區別:

1、支援私密資料。即在使用使用者資料的時候不需要去分享資料本身,只需要分享資料的證明。

2、有通用的可驗證性,可以在計算上實現任意計算。

3、可擴充套件的執行。在狀態變更層面,執行過程不僅可以呼叫自己的狀態,也可以去更改其他應用的狀態。

前面提及的mina在teller上的應用,只是一個示範性的應用,還沒有投入大規模的使用。接下來,mina會網際網路世界進行更多的結合,http snapps,允許從網站把資料匯入到mina上來。而關於開發者的sdk,實際上還是在構建當中,我們期待在將來的幾個月會給開發者提供更好的開發工具,這樣可以幫助大家去更簡單地在mina上進行開發。

mina主網在今年3月已經啟動,900個活躍的節點參與了主網的啟動,mina也受到了創世成員和合作夥伴的支援,同時相關效能的指標都是非常好,我們也對未來有信心、也有期待。


免責聲明:

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

推荐阅读