原文標題:《萬向區塊鏈蜂巢學院 | 姚翔:遞歸零知識證明,如何打造簡潔的區塊鏈?》
演講:姚翔,上海區塊鏈前沿技術研討會發起人
萬向區塊鏈蜂巢學院第 56 期,邀請了 Mina 亞洲技術大使兼上海前沿技術研討會發起人姚翔,從 Mina 區塊鏈出發分享了遞歸零知識證明和 Snapps 的價值和應用前景,
蜂巢學院的朋友們,大家晚上好!我是姚翔,今天我會圍繞 Mina 這一新的區塊鏈與大家分享 「遞歸零知識證明,如何打造簡潔的區塊鏈?」本次分享中會涉及一些技術術語,但大家不需要太多技術背景也能聽得明白,下面就開始我今天的分享。
現在的區塊鏈成百上千,大家耳熟能詳的就有很多。無論是以太坊還是以太坊的殺手們,很多都已經構建了自己龐大的生態系統。為什么這時候 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 其實就是零知識簡潔、無交互知識認證,大家也可以認為就是一個零知識證明,在它的幫助下可以實現一些特性:
- 低門檻的可驗證性;
- 分散的可擴展性;
- 一種新的應用形式 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 也受到了創世成員和合作伙伴的支持,同時相關性能的指標都是非常好,我們也對未來有信心、也有期待。
我今天的分享就到這里,感謝大家的時間,