宋英齊,馮榮權(quán)
(1. 中國科學(xué)技術(shù)大學(xué) 數(shù)學(xué)科學(xué)學(xué)院,安徽 合肥 230026;2. 北京大學(xué) 數(shù)學(xué)科學(xué)學(xué)院,北京 100871)
零知識證明(Zero-Knowledge Proof,ZKP)是現(xiàn)代密碼學(xué)中一個極其重要的工具,它使得證明方在不泄露額外信息的前提下實現(xiàn)對某一事實的證明。零知識證明自1985年誕生以來,從交互式模型走向非交互式模型,為密碼學(xué)和理論計算機科學(xué)帶來了豐富的成果。由于其與現(xiàn)實情境十分貼合,具有豐富的應(yīng)用場景,零知識證明迅速地進入了工程化實施階段,并且不斷在效率和安全性上得到改進。在30多年的發(fā)展過程中,零知識證明已經(jīng)具備了比較成熟的體系,并且能夠與大量密碼學(xué)工具配合使用。基于零知識證明本身的背景設(shè)定,它在以區(qū)塊鏈(Blockchain)為代表的去中心化網(wǎng)絡(luò)中的應(yīng)用取得了豐富的成果。區(qū)塊鏈?zhǔn)且粋€集合了密碼學(xué)、分布式計算和博弈論等多學(xué)科交叉技術(shù)的領(lǐng)域,早期區(qū)塊鏈所使用的密碼學(xué)工具在真正意義上實現(xiàn)了區(qū)塊鏈的本質(zhì)特征,即去中心化。但是區(qū)塊鏈距離設(shè)想中的能夠得到廣泛應(yīng)用的去中心化信任機器(Decentralized Trust Machine)的目標(biāo)還很遠,需要有各項技術(shù)上的突破;其中隱私問題、效率問題和存儲問題等尤為突出。在比特幣、以太坊等傳統(tǒng)的工作量證明(Proof of Work,PoW)共識機制的公鏈上暴露出一系列問題后,十幾年來,科學(xué)家普遍借助零知識證明對區(qū)塊鏈進行了一系列改進,在一定程度上成功解決了這些問題。如果能將零知識證明以及其它隱私計算技術(shù)發(fā)揮得當(dāng),那么理論上講區(qū)塊鏈可以突破各種問題的限制,合理地創(chuàng)建或消除信息不對稱,從而搭載各種人們想要實現(xiàn)的功能,構(gòu)建一個完善的去中心化生態(tài)。對于已有的零知識證明在區(qū)塊鏈中的應(yīng)用研究是必要的,因為這些具體應(yīng)用以及相應(yīng)問題的解決能夠為后續(xù)技術(shù)突破提供借鑒,也能夠為具體應(yīng)用場景的設(shè)計提供現(xiàn)成的方案。當(dāng)前,公鏈尚未在國內(nèi)得到足夠的認可,國際已有的公鏈也并沒有在很大程度上影響到傳統(tǒng)的中心化行業(yè),究其原因是信任機制尚未成熟,與實體經(jīng)濟和大數(shù)據(jù)的結(jié)合還不夠強,因此,區(qū)塊鏈需要不斷結(jié)合新的技術(shù)以尋求突破。
零知識證明這一概念最早見于1985年的文獻[1],其目標(biāo)是在一個雙方收發(fā)信息的情景下,信息發(fā)送方為證明某個斷言的真實性,以某種不暴露額外知識的方式與接收方進行信息交互。該文提出的收發(fā)雙方利用交互式系統(tǒng)進行重復(fù)檢驗,以達成證明的方式實現(xiàn)了這一目標(biāo)。由于此處交互性的存在,這樣的零知識證明也稱作交互式零知識證明。這種證明的模式一方面構(gòu)建了一類證明系統(tǒng),它能夠讓某項斷言通過交互信息達成證明或證否,保護了信息接收方實現(xiàn)判斷的基本權(quán)利,也能滿足信息發(fā)送方實現(xiàn)證明過程的基本需求;另一方面,其不暴露信息本身內(nèi)容的特點防止了信息發(fā)送方提供的消息被對方利用,保護了信息發(fā)送方隱私。
交互式零知識證明是證明者P向驗證者V試圖證明某一斷言x屬于語言L的過程:P具有足夠的計算能力,使得當(dāng)x∈L為真時,P能夠?qū)崿F(xiàn)關(guān)于x∈L這一判斷的證明;隨后P與具有概率多項式時間計算能力的驗證者V進行信息交互(自然也是多項式次數(shù)的),讓V在交互結(jié)束后判斷P是否通過了證明。此處涉及到零知識證明定義中的3個重要性質(zhì):
(1)完備性:如果x∈L為真,那么V判斷P通過證明的概率可忽略地(1)設(shè)f:N→R+是一個函數(shù),滿足?p∈R[x],?Np∈N,使得f(n)·|p(n)|<1對一切n>Np成立,則稱f是一個可忽略函數(shù)。交互式零知識證明的完備性定義中可以將“通過證明的概率可忽略地接近1”加強為“通過證明的概率為1”,即具有完全完備性。對于完備性定義的加強并沒有改變交互式零知識證明系統(tǒng)可識別語言類的范圍,事實上Furer等[2]于1989年證明了對于任何一個可由交互式零知識證明系統(tǒng)識別的語言L,存在一個具有完全完備性的交互式零知識證明系統(tǒng)(Arthur-Merlin證明系統(tǒng))也識別L。接近1(完備性);
(2)穩(wěn)健性:如果xL為真,那么V判斷P通過證明的概率是可忽略的,不論P具有多強大的計算能力;

交互式零知識證明的實現(xiàn)原理描述如下:假設(shè)x∈L,則P具有能夠證明x∈L的知識,此時V發(fā)出一個隨機挑戰(zhàn),只有當(dāng)P能夠證明x∈L時,才能夠給出應(yīng)對該挑戰(zhàn)的交互信息;換句話說,只有具有給出通過隨機挑戰(zhàn)的交互信息的計算能力才能夠歸約到P具有關(guān)于斷言x∈L的證明能力。如果x?L,則P通常只能通過隨機猜測給出回應(yīng),于是P能通過證明的概率隨著挑戰(zhàn)次數(shù)指數(shù)級的減小而減小。而根據(jù)隨機挑戰(zhàn)的正確回應(yīng),V僅僅能夠獲得“P具有證明x∈L這一能力”的判斷,但無法從P的證明本身獲得任何額外知識。
一個重要的事實是,當(dāng)L∈PSPACE時,總存在關(guān)于L的交互式零知識證明系統(tǒng)[3-4],換句話說,對于任何一個多項式空間范圍內(nèi)可識別的語言L,都可以用零知識的方式證明其中的任何一個斷言x確實屬于該語言。實際應(yīng)用中,我們通常考慮L是一個NP類語言,因此,x∈L等價于存在一個簡短證據(jù)w,使得w可以轉(zhuǎn)化為識別語言L的一個多項式時間非確定性圖靈機N,在輸入x時的停機于N接受格局的計算序列(2)NP類語言可以如下定義:設(shè)L是一個語言,若存在一個多項式時間界限的非確定性圖靈機N,使得N識別L,則L∈NP。設(shè)L∈NP且N是如上定義中的一個圖靈機,當(dāng)x∈L作為N的輸入時,在N的計算樹中一定存在某個計算序列的路徑停機于N的一個接受格局,且該路徑的長度是關(guān)于|x|的多項式規(guī)模的。該路徑的實質(zhì)對應(yīng)著x∈L存在一個多項式長度的判據(jù),即為NP等價定義中的x∈L的簡短證據(jù)。。換句話說,此時P擁有證明x∈L的知識等價于P可以計算出一個對應(yīng)x的簡短證據(jù)w。NP類語言的零知識證明可以借助一個密碼學(xué)承諾(Cryptographic Commitment)來實現(xiàn),證明者P將秘密信息w通過密碼學(xué)承諾綁定下來,以保證后續(xù)的挑戰(zhàn)始終以w作為額外知識參與計算,同時也通過承諾隱藏了w的信息。
交互式零知識證明的原理十分依賴交互性和驗證者隨機性。交互性體現(xiàn)在交互式零知識證明的基本邏輯是驗證者發(fā)出挑戰(zhàn)-證明者應(yīng)對挑戰(zhàn),這一流程的不斷重復(fù)才能推動證明的實現(xiàn),僅依靠單次挑戰(zhàn)應(yīng)對很難排除證明者的偶然判斷對結(jié)果帶來的影響。而驗證者隨機性在于驗證者借助自身生成的隨機性對證明者發(fā)起挑戰(zhàn),這種隨機性不能被具有更強計算能力和擁有更多額外知識的證明者提前知道,否則他可能有機會提前準(zhǔn)備好相應(yīng)的應(yīng)對措施,從而提高自己通過驗證的概率。
交互性和驗證者隨機性這2個特點卻并非適用于所有的應(yīng)用場景。在一個具有一定用戶規(guī)模的網(wǎng)絡(luò)中,他們之間的證明需求可能是非常頻繁的,區(qū)塊鏈、集體之間的身份認證等就存在這樣的情形。更有甚者,證明雙方的關(guān)系可能會對調(diào),并且每個人可能會和多人產(chǎn)生證明需求關(guān)系,如果再要考慮證明雙方在空間和時間上的參與差異性,那么會給交互式的證明帶來很多麻煩。此外,對一個知識的證明可能需要經(jīng)過不同的驗證者的檢驗,要求證明者始終配合驗證需求隨時進行交互也是完全不現(xiàn)實的。總而言之,交互會使得效率降低,同時也帶來了雙方配合的不便利。同樣地,在一個人群龐大的系統(tǒng)里,保持驗證者在高頻的證明過程中自主生成的隨機性,會帶來效率的嚴(yán)重降低,因此,借助某種公共而不可預(yù)知的隨機性也是必要的。以下有2種實現(xiàn)非交互式零知識證明的常用方法:
(1)1988年,Blum等[5]基于公共參考串模型,依賴Blum整數(shù)的二次剩余計算困難性假設(shè),給出了NP類語言的有界非交互式零知識證明系統(tǒng);這一系統(tǒng)又在1991年被Blum等[6]改進。通過非交互的形式,證明者能夠單向地產(chǎn)生消息供驗證者使用;此外,隨機性來源于先于證明生成的一個均勻分布的公共的隨機字符參考串。因為公共參考串的隨機性是不可被雙方所預(yù)知的,且不會受到雙方的操作影響,所以公共參考串一般認為是由某個可信第三方生成的,或是通過一個安全多方計算來生成。當(dāng)考慮零知識性時應(yīng)當(dāng)注意,由于沒有了交互,模擬機難以像交互式中的那樣不斷重新設(shè)置有利于通過證明的挑戰(zhàn)以“瞞過”驗證者。但在公共參考串模型下,模擬機可以自行生成滿足同一分布的公共參考串,甚至可以在沒有簡短證據(jù)w的情況下在參考串中嵌入陷門信息。模擬機始終保有的超出驗證者的“額外能力”,使得NP類語言在公共參考串模型下具有非交互式的零知識證明系統(tǒng)。
(2)1986年,F(xiàn)iat等[7]提出了一種將公共隨機性的交互式身份證明變換為非交互式的簽名方案的方式,稱作Fiat-Shamir變換。一般地,這個變換能夠?qū)⒁粋€交互式零知識證明系統(tǒng)轉(zhuǎn)化為一個非交互式的零知識證明系統(tǒng)。這種變換的思想在于,用一個隨機諭示機替代交互式證明中驗證者的隨機挑戰(zhàn),這樣就免除了交互的步驟。由于在實際中不存在真正的理想隨機源,因此,在應(yīng)用中通常用哈希函數(shù)作為偽隨機源。具體而言,證明者自身進行一個交互式證明的模擬,不斷將歷史交互信息的哈希像作為下一次隨機挑戰(zhàn)的值。由于認為哈希函數(shù)是一個不可預(yù)知的隨機源,因此,它能模擬驗證者在交互式證明中發(fā)出的隨機挑戰(zhàn)。值得一提的是,F(xiàn)iat-Shamir變換僅僅在隨機諭示機模型下是安全的,對于實際采用的哈希函數(shù),這種方式是不具備可證明安全性的,更有甚者,后來Goldwasser等[8]發(fā)現(xiàn)了在Fiat-Shamir變換下并不安全的3輪公共隨機性的交互式身份證明,這意味著Fiat-Shamir變換本身可能具有使用上的風(fēng)險。這些原因都表明Fiat-Shamir變換實質(zhì)上是一個啟發(fā)式的方法,但盡管如此,由于Fiat-Shamir變換的易操作性和不需要第三方的特點,它仍然在零知識證明的工程化中受到廣泛應(yīng)用。
零知識證明的工程化要求我們考慮非交互式零知識證明在實用層面上的具體實現(xiàn),其中最大的變化是應(yīng)用場景的復(fù)雜化。
一方面,穩(wěn)健性和零知識性具有一種微妙的平衡關(guān)系。在非交互式零知識證明的定義中,穩(wěn)健性是統(tǒng)計意義上的,而零知識性是計算意義上的,這種設(shè)置更強調(diào)于限制強大計算力的證明者在多項式時間內(nèi)用假證明欺騙驗證者。但是在實際情況下,如果傾向于利用零知識證明隱藏簡短證據(jù)時,就必須考慮到非誠實的驗證者利用強大的算力竊取證明中知識的情況。然而統(tǒng)計意義上的穩(wěn)健性和零知識性不能同時滿足,事實上Fortnow[9]證明了在滿足統(tǒng)計意義上的穩(wěn)健性的前提下,不存在滿足NP問題的統(tǒng)計零知識交互式證明系統(tǒng),這同時意味著統(tǒng)計零知識證明語言類是計算零知識證明語言類的真子集。基于這樣的原因,不再認為P具有無限的計算能力,而是在合理的計算能力下給定了一些額外的秘密知識(如NP類語言中的簡短證據(jù))。事實上,如果證明者擁有過于強大的計算能力,那么許多密碼學(xué)體制(如公鑰加密等)本身就已經(jīng)不安全了,因此,這樣的條件弱化是可以理解的。如果將一個零知識證明系統(tǒng)中的穩(wěn)健性弱化為計算意義上的級別,而將零知識性提升到統(tǒng)計意義上的級別,則此時的證明系統(tǒng)就稱作是一個零知識論證(zero-knowledge Argument)。面對計算意義上的穩(wěn)健性,對于一般的證明者仍然無法生成假證明,而對于擁有較高計算能力的證明者,調(diào)整系統(tǒng)的安全參數(shù)能夠在一定程度上遏制他們的惡意行為。零知識論證保證了非誠實的驗證者無法從證明者的證明中獲得額外知識。此外,希望證明者的確是在擁有知識的前提下才能給出證明,而非通過其它的方法繞開知識本身,僅僅證明一個斷言屬于某個語言,即證明者提供一個正確的證明的難度不會低于證明者擁有知識本身的難度。在NP類語言L中,這就是說希望證明者P能夠給出x∈L的證明等價于P擁有秘密的簡短證據(jù)w。這樣的證明系統(tǒng)稱作是一個知識論證(Argument of Knowledge),保證了非誠實的(實際上并不具備知識的)證明者無法在x∈L時能給出讓驗證者通過的證明。當(dāng)考慮雙方都可能存在的非誠實性,就需要一個零知識的知識論證(zero-knowledge Argument of Knowledge)(3)本文后續(xù)的敘述中,通常用零知識證明代表技術(shù)本身,而不作為具體的與零知識論證、知識論證等相區(qū)分的概念。。
當(dāng)非交互式零知識證明被廣泛應(yīng)用在大型網(wǎng)絡(luò)中時,驗證計算的速度成為了決定系統(tǒng)運行速度的關(guān)鍵考量,同時大量生成的單向證明會被當(dāng)作歷史數(shù)據(jù)存儲下來,以供多方驗證和存證。當(dāng)證明已經(jīng)產(chǎn)生并存儲在數(shù)據(jù)庫中,零知識性的重要性就更加凸顯出來,這是因為計算機的計算能力是在不斷提升中的,但是證明本身一旦保存就不會有變化,這進一步印證了采取零知識論證而非零知識證明的必要性。此外,大量存儲的需求也限制了生成證明的大小。對零知識證明而言,由于要求至少統(tǒng)計意義上的穩(wěn)健性,這導(dǎo)致證明長度至少會大于簡短證據(jù)的長度,然而零知識論證放寬了穩(wěn)健性的要求,所以給證明大小的壓縮提供了更多的空間。證明長度在不斷變小的同時,也使得驗證效率不斷提升,可以看到某些簡短證明在零知識論證中被驗證的速度快于簡短證據(jù)在標(biāo)準(zhǔn)的NP類語言證明中的速度(4)具體地說,如果將Vp和V分別視作零知識論證系統(tǒng)的驗證算法和NP語言識別中檢驗簡短證據(jù)的驗證算法(對應(yīng)同一個NP類語言L),設(shè)π和w分別是某個x∈L對應(yīng)的零知識論證和簡短證據(jù),則可能Vp(x,π)=1的計算速度要快于V(x,w)=1的計算速度。也就是說,如果將零知識論證系統(tǒng)作為斷言x屬于某個NP類語言的概率性意義上的識別器,其接受該斷言的速度(即在零知識論證系統(tǒng)中被證明的速度)可能會快于同一語言依賴簡短證據(jù)實現(xiàn)斷言識別的嚴(yán)格意義上的證明。。事實上,Groth[10]在2010年就設(shè)計出了常數(shù)大小的零知識論證方案,又在2016年給出了證明長度最優(yōu)、效率最高的零知識的知識論證[11],這更加表明了零知識論證在工程應(yīng)用中具有重要意義。
2012年,Bitansky等[12]第一次提出了稱作零知識的簡潔非交互式知識論證(zero-knowledge Succinct Non-Interactive Arguments of Knowledge,zk-SNARK)的概念。在零知識的非交互式知識論證的基礎(chǔ)上,zk-SNARK具有簡潔性,即對NP類語言而言,與該系統(tǒng)的輸入x(及其簡短證據(jù)w)相比,其生成證明的長度足夠小,甚至是常數(shù)規(guī)模的大小,這表明zk-SNARK是一類高效的零知識協(xié)議。zk-SNARK在早期主要還是延續(xù)了依賴可信設(shè)置(5)可信設(shè)置通常是一個安全多方計算的程序,由系統(tǒng)各個參與成員或少數(shù)代表成員共同參與計算。可信設(shè)置是為了確定系統(tǒng)中進行非交互式零知識證明的基本算法、公共參數(shù)、公共參考串等公共數(shù)據(jù),這些信息將為各成員執(zhí)行計算而服務(wù)。參與可信設(shè)置的各個成員都將各自持有一部分秘密信息,全體的秘密信息將在安全多方計算中生成這些公共數(shù)據(jù),然后在公共數(shù)據(jù)產(chǎn)生之后遺忘這些秘密值。可信設(shè)置通常只需生成一次,即可長期、反復(fù)地用于證明生成等計算過程。可信設(shè)置中公共數(shù)據(jù)的安全性和隨機性是整個系統(tǒng)安全的保障,因此,傳統(tǒng)的可信設(shè)置可能是秘密進行的,且成員選擇和計算過程不透明,這反而會造成可信設(shè)置的信任問題。另外,作為安全多方計算的可信設(shè)置可能遭受秘密泄露、合謀攻擊等風(fēng)險,這進一步加大了系統(tǒng)成員不認可可信設(shè)置的可能性。(trusted setup)生成公共參考串的模型。2013年由Parno等[13]提出的基于二次算術(shù)電路證明的Pinocchio協(xié)議,是第一個達到工程化可實現(xiàn)的zk-SNARK方案。此后一段時間的zk-SNARK在運算性能上不斷突破,特別是2016年的Groth16協(xié)議[11]給出證明長度只包含3個群元素且驗證時只要進行3個配對計算的zk-SNARK,此時證明大小已經(jīng)接近理論最優(yōu),是目前zk-SNARK協(xié)議性能的標(biāo)桿。然而這些方案非常依賴可信設(shè)置的步驟,難以在非信任的條件下進行,同時單次可信設(shè)置所生成的參考串只能適用于特定電路的證明,不利于證明需求的擴展。Groth等[14]定義了通用可更新(universal and updatable)公共參考串模型,該模型能允許成員在不認可傳統(tǒng)可信設(shè)置的情況下,將公共參考串進行可驗證的更新,從而解決了可信設(shè)置的信任問題;進一步地,生成的公共參考串也能夠適用于一般的電路,不需要針對不同電路進行重新設(shè)計。目前應(yīng)用前景較好的通用可更新zk-SNARK模型是改進了Sonic協(xié)議[15]的Plonk協(xié)議(6)Gabizon A,Williamson Z,Ciobotaru O.PLONK:Permutations over Lagrange-bases for oecumenical noninteractive arguments of knowledge.IACR Cryptology ePrint Archive,2019:No.953.,在其基礎(chǔ)上的實現(xiàn)方案Halo2[16]將會成為Zcash項目的下一代解決方案。這說明解決可信設(shè)置問題的還有將公共參考串生成透明化的設(shè)計,如2018年誕生的無需可信設(shè)置、準(zhǔn)線性時間的后量子安全的zk-STARK方案[17]。而Bünz等[18]基于離散對數(shù)假設(shè)和Fiat-Shamir變換提出了Bulletproofs,它通過提供在一段時間內(nèi)秘密承諾值的簡短證明,降低了分布式系統(tǒng)中的證明成本,并且Bulletproofs的良好性質(zhì)還使得其經(jīng)常用于范圍證明(但由于Bulletproofs與其它zk-SNARK算法的證明時間相較而言不夠短,這導(dǎo)致其在很多情況下不被歸于zk-SNARK之類)。Bowe等(7)Bowe S,Grigg J,Hopwood D.Recursive proof composition without a trusted setup.IACR Cryptology ePrint Archive,2019:No.1021.利用遞歸思想設(shè)計了Halo協(xié)議,該協(xié)議通過把計算量較大的驗證過程進行分?jǐn)偅缓蠼柚鷝k-SNARK的高效性以遞歸方式完成證明,其升級版本Halo2也包含了大量的遞歸零知識證明思想。
zk-SNARK作為目前具有實用價值的零知識證明工具,在具體的工程應(yīng)用中也有不同的側(cè)重,這取決于不同zk-SNARK方案的特點以及實際應(yīng)用場景,例如,實現(xiàn)零知識的方式是基于何種公共參考串模型,還是使用了其它方法;生成證明和驗證證明的時間復(fù)雜度,證明大小等方面是否具有效率優(yōu)勢;是否具有通用性或可更新性;是否具有抗量子性;密碼學(xué)假設(shè)是怎樣的,等等。尤其是零知識證明在區(qū)塊鏈這一應(yīng)用場景下,不同的區(qū)塊鏈根據(jù)設(shè)計和需求對零知識證明方案也具有不同的考量,具體可參照文獻[19],這里不再贅述。本文將側(cè)重于綜述零知識證明是如何具體應(yīng)用到區(qū)塊鏈中的,它們究竟以何種方式解決了區(qū)塊鏈的技術(shù)困境,并提升了區(qū)塊鏈的相關(guān)性能。
區(qū)塊鏈最早是從2008年中本聰發(fā)表的比特幣(Bitcoin)白皮書[20]中抽象出來的數(shù)據(jù)結(jié)構(gòu)。區(qū)塊鏈本身是一個分布式(distributed)的數(shù)據(jù)庫,它的核心屬性是去中心化(decentralization),數(shù)據(jù)在分布式網(wǎng)絡(luò)的各個節(jié)點上存儲或處理。當(dāng)數(shù)據(jù)發(fā)生更新時,網(wǎng)絡(luò)的某些特殊節(jié)點會以某種方式收集更新數(shù)據(jù)并打包成區(qū)塊,通過網(wǎng)絡(luò)將這些區(qū)塊廣播出去,這樣各個節(jié)點之間可以同步數(shù)據(jù)更新。
傳統(tǒng)的中心化系統(tǒng)往往存在結(jié)構(gòu)低效、無隱私、不透明、數(shù)據(jù)可用性差、信息魯棒性差,以及運營成本高等內(nèi)在缺點,這歸根到底是普通節(jié)點與中心化機構(gòu)之間存在數(shù)據(jù)交互和數(shù)據(jù)使用的信任問題。區(qū)塊鏈正是為了解決這種信任問題而誕生的:①區(qū)塊鏈的分布式網(wǎng)絡(luò)中并不存在永久意義上的中心化節(jié)點,各個節(jié)點具有完全平等的身份,將需要集中處理的數(shù)據(jù)分散到整個網(wǎng)絡(luò)的參與者中,每個節(jié)點都能夠成為數(shù)據(jù)處理和更新的一環(huán);②用戶的身份信息以公鑰的形式存在于鏈上,數(shù)據(jù)處理以公開的方式打包成區(qū)塊,并通過哈希函數(shù)將這些區(qū)塊連接在一起,既能在一定程度上隱藏用戶,又做到了透明性。哈希函數(shù)將數(shù)據(jù)綁定,避免了歷史數(shù)據(jù)的篡改,同時這個網(wǎng)絡(luò)通過廣播的形式實現(xiàn)各個節(jié)點的同步,數(shù)據(jù)不會因為局部節(jié)點的丟失而被抹除。此外,哈希函數(shù)和簽名則保證了信息對接的穩(wěn)定性和基本的信息安全,只要不是基于系統(tǒng)的密碼學(xué)上漏洞的攻擊(如用戶自身密鑰泄露等),那么損失僅會在局部出現(xiàn),而不會波及到整個網(wǎng)絡(luò),由此,系統(tǒng)的安全性只需要通過鞏固其相應(yīng)的密碼學(xué)協(xié)議和各個密碼學(xué)工具即可得到保證。區(qū)塊鏈基于分布式系統(tǒng)的信息傳遞和博弈論,以低分化的群體實現(xiàn)共識,并通過一定的激勵機制保證用戶以積極的、誠實的姿態(tài)參與進來,這使得整個網(wǎng)絡(luò)中的節(jié)點都能參與到共識當(dāng)中,提高了信息處理的自主性。區(qū)塊鏈?zhǔn)切湃螜C器(Trust Machine)的模型,它能夠在不借助任何第三方力量的基礎(chǔ)上,實現(xiàn)多方之間安全、透明的信息處理和交互,在諸多現(xiàn)實社會中的場景都有很大的應(yīng)用價值。
區(qū)塊鏈在早期的發(fā)展中已經(jīng)形成了依照成員許可模式的劃分。比特幣、以太坊等以去中心化為核心特征的區(qū)塊鏈系統(tǒng)不需要進行任何形式的成員審核,任何人通過在本地生成一對公私鑰,就可以成為系統(tǒng)中的用戶,這種系統(tǒng)稱為無許可系統(tǒng)(Permissionless System),無許可的區(qū)塊鏈系統(tǒng)也稱作公鏈(Public Chain)。與之相對的,如果成員需要關(guān)聯(lián)自身的一些信息,通過審核的方式才能加入的區(qū)塊鏈系統(tǒng)稱作許可系統(tǒng)(Permissioned System),通常分為私有鏈(Private Chain)、聯(lián)盟鏈(Consortium Chain)和混合鏈(Hybrid Chain)。許可系統(tǒng)通常會保有一部分子系統(tǒng)充當(dāng)?shù)谌降穆毮埽糜趨f(xié)助實現(xiàn)成員審核、執(zhí)行協(xié)議與監(jiān)管等目的。許可系統(tǒng)通常不具備完整的去中心化性質(zhì),它的一些性能的完成一般需要借助第三方的力量。
公鏈通常最能夠體現(xiàn)區(qū)塊鏈作為新興技術(shù)的革命性意義,因為公鏈最大程度地將數(shù)據(jù)處理的權(quán)利轉(zhuǎn)移到了一個集體當(dāng)中,并且集體中的成員具有相同的權(quán)利。公鏈最早帶來了去中心化的共識機制,并在此基礎(chǔ)上將區(qū)塊鏈網(wǎng)絡(luò)與傳統(tǒng)的中心化網(wǎng)絡(luò)區(qū)別開來。盡管區(qū)塊鏈已經(jīng)具備了解決諸多中心化系統(tǒng)弊病的能力,但是區(qū)塊鏈本身也產(chǎn)生了一些新的問題,如果將早期的公鏈和中心化機構(gòu)作對比,其仍在共識機制、可擴展性、安全性和隱私性等諸多方面存在明顯的短板。
(1)共識機制
作為一個去中心化的數(shù)據(jù)結(jié)構(gòu),區(qū)塊鏈的數(shù)據(jù)處理權(quán)分布在整個網(wǎng)絡(luò)的各個節(jié)點中。為了保證高效處理,必須通過某種方法選出少量的節(jié)點獲得臨時的數(shù)據(jù)集中處理權(quán),而其它節(jié)點則負責(zé)監(jiān)督和驗證這一過程的正確性,這種節(jié)點成員之間的數(shù)據(jù)處理權(quán)競爭方式稱作區(qū)塊鏈的共識機制(Consensus Mechanism)。比特幣、以太坊1.0等早期區(qū)塊鏈的共識機制是工作量證明PoW,系統(tǒng)借助隨機性給出的困難問題只能通過暴力求解,讓成員以自身算力作為競爭籌碼以獲得數(shù)據(jù)處理權(quán)和獎勵。共識機制是一個區(qū)塊鏈的核心屬性,它決定了區(qū)塊以怎樣的方式延長下去,因此,還會對區(qū)塊鏈的其它方面產(chǎn)生影響。工作量證明PoW的一個顯著弊端在于,算力消耗巨大但能量轉(zhuǎn)化率低,進而導(dǎo)致交易吞吐量低下、環(huán)境破壞,以及挖礦壟斷等問題。
(2)可擴展性及其它性能指標(biāo)
區(qū)塊鏈的可擴展性是一項相當(dāng)重要的指標(biāo),在網(wǎng)絡(luò)規(guī)模擴大、數(shù)據(jù)量和歷史不斷累積、應(yīng)用挑戰(zhàn)不斷增強的情況下,它是衡量區(qū)塊鏈保持良好運行能力的指標(biāo)。具有可擴展性的區(qū)塊鏈通常具有更靈活的設(shè)計,能夠基于新成員、新功能和新模塊有更強大的容納性,同時自身要保證一定的性能要求。廣義來說,可擴展性與衡量區(qū)塊鏈的許多性能指標(biāo)有關(guān):①網(wǎng)絡(luò)傳輸協(xié)議:是否支持高用戶量進行穩(wěn)定的網(wǎng)絡(luò)傳輸,其中要考慮網(wǎng)絡(luò)運行成本和維護成本;②吞吐量:衡量區(qū)塊鏈進行信息處理的效率(在基于加密貨幣的區(qū)塊鏈中,吞吐量相當(dāng)于區(qū)塊鏈單位時間處理交易的數(shù)量),考慮到區(qū)塊鏈未來會成為Web3.0互聯(lián)網(wǎng)時代(8)2003年以前的互聯(lián)網(wǎng)模式稱為Web1.0,特點是網(wǎng)頁提供信息內(nèi)容,人們對其上的內(nèi)容是可讀但不可交互的。過去十幾年引領(lǐng)網(wǎng)絡(luò)交互、自由創(chuàng)造、電子商務(wù)、娛樂信息、產(chǎn)業(yè)互聯(lián)的Web2.0時代則是在Web1.0可讀的基礎(chǔ)上,使得信息靈活可用。各個Web2.0時代的龍頭企業(yè)通過網(wǎng)絡(luò)效應(yīng)提供了豐富的網(wǎng)絡(luò)服務(wù),將基礎(chǔ)設(shè)施與網(wǎng)絡(luò)創(chuàng)建互聯(lián),人們可以在網(wǎng)絡(luò)上享受服務(wù),創(chuàng)造更多的信息。而Web3.0則是近兩年才火熱起來的新概念,它能夠基于區(qū)塊鏈創(chuàng)建連通全球的去中心化生態(tài),最顯著的特點是數(shù)字資產(chǎn)和數(shù)據(jù)的可擁有性。在Web2.0中,信息由互聯(lián)網(wǎng)中心巨頭統(tǒng)一調(diào)配和管理,用戶沒有數(shù)據(jù)的可支配權(quán),而Web3.0互聯(lián)網(wǎng)中的個人權(quán)限進一步提高,在數(shù)據(jù)互聯(lián)的基礎(chǔ)上,以各種新興技術(shù)創(chuàng)建更完善的互聯(lián)網(wǎng)體系。的底層架構(gòu),區(qū)塊鏈的吞吐量必須要提升到比肩于Web2.0時代電商和銀行等大型交易機構(gòu)的水平,甚至更高的吞吐量;③計算能力:包括智能合約(Smart Contract)支持、協(xié)議復(fù)雜度、通信復(fù)雜度、出塊時間、驗證時間和計算成本等多方面在內(nèi)的考量,計算能力既與信息處理效率相關(guān),又與區(qū)塊鏈功能的實現(xiàn)密切相關(guān);④存儲能力:區(qū)塊鏈本身是一個大的數(shù)據(jù)庫,隨著區(qū)塊的產(chǎn)生歷史信息會不斷積累,同時由于節(jié)點需要依據(jù)歷史信息進行驗證,不能將這些歷史信息直接抹除,因此,區(qū)塊鏈必須應(yīng)對去中心化存儲的問題;⑤最終性(finality):數(shù)據(jù)處理信息從被廣播到實現(xiàn)共識并真正執(zhí)行(不可逆轉(zhuǎn))的效率往往更能反映出區(qū)塊鏈處理信息的能力,特別地,最終性也衡量了區(qū)塊鏈分叉產(chǎn)生的難易程度,這側(cè)面反映了共識算法的有效性。早期區(qū)塊鏈的可擴展性問題一直使得它作為新興的互聯(lián)網(wǎng)技術(shù)卻只能以較慢的速度融入實體經(jīng)濟,更難以期待它能在很短的時間內(nèi)撼動傳統(tǒng)的中心化基礎(chǔ)網(wǎng)絡(luò)設(shè)施。
(3)安全性、隱私與監(jiān)管
作為新興的互聯(lián)網(wǎng)技術(shù),區(qū)塊鏈的安全性自然是一個必不可少的重要標(biāo)準(zhǔn)。由于去中心化使得信任從第三方轉(zhuǎn)移到了密碼學(xué)和算法協(xié)議中,這對區(qū)塊鏈的安全性提出了越來越高的要求。區(qū)塊鏈的共識協(xié)議、網(wǎng)絡(luò)傳輸協(xié)議和隨機性模型等通常都有一定的安全性假設(shè),并且要考慮諸多潛在的攻擊模型及其應(yīng)對措施。一個安全的區(qū)塊鏈協(xié)議需要考慮來自于密碼學(xué)、分布式系統(tǒng)和博弈論等多個層面的挑戰(zhàn),并且需要隨著技術(shù)的進步不斷提升安全性。此外,早期公鏈的過于透明使得用戶在鏈上數(shù)據(jù)的隱私性難以保證,由于完全沒有提供區(qū)塊鏈層上的隱私機制,用戶很可能因為隱私泄露遭受外部攻擊、甚至蒙受財產(chǎn)損失。隱私的缺乏使得公鏈的各個成員之間處于一種非信任狀態(tài),多方互信局面的缺乏進一步阻止了區(qū)塊鏈搭載新的功能,造成了區(qū)塊鏈長期在實體經(jīng)濟領(lǐng)域難以得到應(yīng)用的尷尬局面。除了內(nèi)外可能遭受的風(fēng)險之外,早期區(qū)塊鏈對于這些可能存在的風(fēng)險同樣缺乏合理的監(jiān)管措施。對于成熟的互聯(lián)網(wǎng)體系而言,監(jiān)管系統(tǒng)一定是必不可少的,它能夠協(xié)助區(qū)塊鏈更好地實現(xiàn)正常運作,敦促用戶的良好行為和防控風(fēng)險,監(jiān)管系統(tǒng)還有助于系統(tǒng)維護和發(fā)起議案,是未來去中心化生態(tài)的必要建設(shè)。需要強調(diào)的是,去中心化監(jiān)管一定是指區(qū)塊鏈內(nèi)部以線上的方式進行的監(jiān)管,而非借助任何第三方機構(gòu)力量參與的區(qū)塊鏈外部的監(jiān)管。
事實上,區(qū)塊鏈的各種特征和技術(shù)指標(biāo)也都是相互關(guān)聯(lián)的,其具體性能會受到應(yīng)用場景和協(xié)議特點的影響。比如許可鏈具有比公鏈更強的計算力、技術(shù)支持與監(jiān)管,而公鏈?zhǔn)侨ブ行幕模哂懈蟮臐摿臀磥硎袌觯还沧R機制往往決定了區(qū)塊鏈生態(tài)的上限,PoW的區(qū)塊鏈在性能上的綜合表現(xiàn)明顯劣于后來采用股權(quán)證明(Proof of Stake,PoS)的區(qū)塊鏈;吞吐量高的區(qū)塊鏈不一定意味著更快實現(xiàn)最終性,可擴展性強的區(qū)塊鏈通常也會具有更強的性能表現(xiàn)和更完善的區(qū)塊鏈生態(tài),等等。需要認識到的是,大多數(shù)區(qū)塊鏈還在隨著技術(shù)的突破不斷取得新的進展,當(dāng)前的性能表現(xiàn)也并非是停滯不前的(表1)。

表1 部分區(qū)塊鏈項目的特征和技術(shù)指標(biāo)對比Table 1 Comparison of features and technical indicators of some blockchain projects
表1比較了部分區(qū)塊鏈項目的各項特征和技術(shù)指標(biāo)。區(qū)塊鏈經(jīng)過十幾年的發(fā)展,從最早期的去中心化電子賬本的區(qū)塊鏈1.0時代,進入到搭載了智能合約的區(qū)塊鏈2.0時代。隨著區(qū)塊鏈和實體經(jīng)濟的進一步結(jié)合,應(yīng)用場景進一步擴大,生態(tài)建設(shè)進一步完善,還將迎來區(qū)塊鏈3.0時代,與此同時,區(qū)塊鏈的性能和安全性也面臨著更多的挑戰(zhàn)。
傳統(tǒng)區(qū)塊鏈(尤其是公鏈)在實際執(zhí)行中存在一系列問題:①針對共識機制等區(qū)塊鏈構(gòu)件的惡意節(jié)點的內(nèi)部攻擊和外部攻擊:由于區(qū)塊鏈代表著新興互聯(lián)網(wǎng)技術(shù)的廣袤市場,加密貨幣存在著巨大的經(jīng)濟潛力,因此,攻擊者會想盡各種方法從系統(tǒng)漏洞中獲利;②區(qū)塊鏈自身的性能無法滿足實際需求,尤其是早期區(qū)塊鏈的可擴展性無法適應(yīng)龐大的用戶市場,又缺乏隱私保護機制,無法與實體經(jīng)濟和各種應(yīng)用場景緊密結(jié)合;③區(qū)塊鏈能夠搭載的功能仍有待完善,在很多方面還不能達到作為新的互聯(lián)網(wǎng)生態(tài)體系的底層構(gòu)建要求。
一系列問題催生著區(qū)塊鏈技術(shù)的推進,尤其是隱私計算在其中發(fā)揮了巨大的作用。隱私計算(Privacy-Preserving Computation)是實現(xiàn)在交互網(wǎng)絡(luò)中以保護各方隱私和系統(tǒng)安全為目標(biāo)的計算綜合技術(shù)體,它集合了密碼學(xué)與計算理論領(lǐng)域的若干方面:安全多方計算(Secure Multi-party Computation)、零知識證明、同態(tài)加密(Holomorphic Encryption)和可信執(zhí)行環(huán)境(Trusted Execution Environment),等等。區(qū)塊鏈作為一個多方交互的去中心化網(wǎng)絡(luò),其能夠真正融入社會體系的關(guān)鍵就在于安全的可計算性,因而區(qū)塊鏈自然與隱私計算應(yīng)用具有極高的匹配度。
本節(jié)將綜述幾個公鏈項目如何通過引進零知識證明,使其在各項特征和技術(shù)指標(biāo)上取得突破的。
2.2.1 Zcash——隱私貨幣
幾乎所有的公鏈都有這樣的一個特點,即任何用戶只需在本地生成一對公私鑰即可成為公鏈的一員,當(dāng)用戶利用自己的公私鑰進行交易時,公鑰和簽名就會作為公開信息放在區(qū)塊中以供各個節(jié)點驗證交易的合法性。在這樣的過程中,用戶的社會身份與區(qū)塊鏈中的數(shù)字身份產(chǎn)生了分離,在區(qū)塊鏈中用戶僅以公鑰標(biāo)記,因此,一方面社會身份得到了一定的隱藏;另一方面,其它節(jié)點驗證的需求使得交易細節(jié)必須在區(qū)塊鏈上公開,也正因此區(qū)塊鏈?zhǔn)峭该鞯摹5匪莸奖举|(zhì)上講,這樣的公鏈并沒有深挖區(qū)塊鏈要采用公鑰隱藏身份和透明化數(shù)據(jù)的根本原因:①隱藏身份的目的歸根到底是要將用戶的社會身份和私人信息同數(shù)字身份完全隔離,但是即使是在區(qū)塊鏈上顯示的是公鑰信息,隨著用戶使用這一數(shù)字身份在區(qū)塊鏈中的交互歷史不斷累積,攻擊者結(jié)合外界信息依靠統(tǒng)計學(xué)的方法想要通過數(shù)字身份關(guān)聯(lián)到社會身份并非不可能;②之所以要求區(qū)塊鏈的透明性,本質(zhì)上是為了各個節(jié)點能夠參與到合法性的驗證當(dāng)中,但是透明性導(dǎo)致了交易金額被披露,數(shù)字身份也公之于眾。當(dāng)然數(shù)字私人信息的完全公開并不是實現(xiàn)節(jié)點驗證的唯一方法。
2014年Zerocash(Zcash)白皮書發(fā)布[21],它的目標(biāo)就是在保護數(shù)字身份和數(shù)字私人信息的基礎(chǔ)上,維持區(qū)塊鏈的可驗證性。換句話說,Zcash實現(xiàn)了一個可匿名交易的區(qū)塊鏈,這個匿名甚至是數(shù)字身份上的意義。Zcash實現(xiàn)匿名交易的大體思路是將用戶要消費UTXO(9)即Unspent Transaction Output的縮寫,是比特幣等以余額模型記賬的區(qū)塊鏈中重要的數(shù)據(jù)結(jié)構(gòu)。整個比特幣系統(tǒng)的交易鏈實際上維護了一個潛在的稱作UTXO的數(shù)據(jù)結(jié)構(gòu),這個數(shù)據(jù)結(jié)構(gòu)相當(dāng)于是一個列表,記錄了對應(yīng)各個賬戶上的余額信息,具體指示了系統(tǒng)中當(dāng)前所有未花費比特幣的所屬權(quán),但是UTXO并不是顯式地記錄在區(qū)塊鏈上的,而是由全節(jié)點通過追蹤所有鏈上的交易信息不斷更新得到的。中的貨幣轉(zhuǎn)化為關(guān)于這部分貨幣的承諾,用唯一的唯一的序列號標(biāo)記轉(zhuǎn)移的貨幣,再用零知識證明保證交易的合法性。
為了實現(xiàn)匿名交易,首先用戶需要將自己在鏈上的持有貨幣隱藏起來,具體而言就是自己的公私鑰和貨幣金額,只有用戶自己知道鏈上的哪些貨幣是屬于自己的。當(dāng)匿名貨幣被交易時,這些隱藏的信息仍應(yīng)該被保留,但同時要公開一些關(guān)于交易的信息使得網(wǎng)絡(luò)上的節(jié)點可以驗證這些信息,因而這些信息和交易中的匿名貨幣具有綁定關(guān)系(這是防止貨幣借助匿名性被雙花)。公開的信息還需要滿足零知識性,也就是任何人無法通過公開信息反推出隱藏幣的信息。值得注意的是,匿名性使得交易雙方的計算在一定程度上產(chǎn)生了分離,因為鏈上的信息并不直接反映交易雙方的身份,所以公開信息還要使得收款方能夠且唯一能夠知道鏈上進行了一筆轉(zhuǎn)到自己的交易。需要強調(diào)的是,匿名交易并不代表用戶的公鑰地址是不為系統(tǒng)中其它成員所知的,否則交易也就失去了目標(biāo)。事實上,只要能夠在交易中隱藏交易雙方的身份,即使交易實際發(fā)生了,其它節(jié)點也無從得知是哪些用戶實際參與了交易,這樣匿名性的效果就達到了。因此,在匿名交易系統(tǒng)中,用戶將匿名貨幣放在區(qū)塊鏈上,當(dāng)匿名貨幣的歸屬發(fā)生變化時,則交易雙方交易的實質(zhì)是創(chuàng)造新的匿名貨幣作為接收者的歸屬,而公開信息則指示之前具有歸屬的匿名貨幣已經(jīng)被轉(zhuǎn)移了。
Zcash一開始是建立在比特幣系統(tǒng)之上的,于是Zcash需要將一定數(shù)量的比特幣(非匿名貨幣)轉(zhuǎn)化為匿名貨幣,發(fā)起這樣的交易過程稱為鑄幣(Mint Process),而在Zcash系統(tǒng)中發(fā)起匿名貨幣的直接交易過程稱為注入(Pour Process),對于這樣2個交易過程,收款方接受匿名貨幣的過程稱為接收(Receive Process)。
Mint相當(dāng)于匿名貨幣系統(tǒng)中的鑄幣交易,用戶選取一些秘密的種子后,分別計算匿名幣的承諾m、匿名幣c,并產(chǎn)生一個廣播在鏈上的交易txmint。當(dāng)系統(tǒng)中產(chǎn)生一個被Mint的匿名幣c時,c中的承諾m會加入到鏈上一個承諾列表中。實際情況下,這些不直接具備數(shù)據(jù)可用性的承諾值一般會以Hash Merkle Tree(10)以哈希函數(shù)值組織起來的一個樹狀結(jié)構(gòu),對于已將某個整體數(shù)據(jù)劃分后的若干子數(shù)據(jù)、或一個現(xiàn)成的數(shù)據(jù)列表,將各個數(shù)據(jù)作為葉子節(jié)點逐層取Hash值作為父節(jié)點構(gòu)成的二叉樹即為Hash Merkle Tree。Hash Merkle Tree的頂點稱為根Hash值,當(dāng)整個數(shù)據(jù)中有任何一處變動,由哈希函數(shù)的(偽)單向性可知根Hash值一定會產(chǎn)生相應(yīng)的變化,因此可用于判斷數(shù)據(jù)篡改。此外,通過訪問相鄰的Hash值,可以檢測到Hash Merkle Tree的局部變化。綜上幾個特點,Hash Merkle Tree可以起到數(shù)據(jù)壓縮、檢測數(shù)據(jù)改動、為路徑證明提供依據(jù)的作用。的形式顯示出來。
Pour將在匿名系統(tǒng)中歸屬于支付方的匿名貨幣轉(zhuǎn)化成為歸屬于接收方的匿名貨幣,相當(dāng)于匿名貨幣系統(tǒng)中轉(zhuǎn)賬交易被廣播的過程。具體而言,假設(shè)支付方已經(jīng)擁有了放在自己地址下的匿名幣c,當(dāng)他要將等值的匿名貨幣轉(zhuǎn)移到接收方的地址時,并非直接將匿名幣c的信息發(fā)送給對方,而是要在鏈上創(chuàng)建一個新的等值匿名貨幣c′,并計算對應(yīng)于原匿名幣c的一個序列號,以證明之前歸屬于自己的貨幣已經(jīng)被轉(zhuǎn)移。同時支付方要提供如下一些計算正確性的零知識證明:
?c和c′是計算合規(guī)的匿名幣;
? 原匿名幣的公私鑰關(guān)系是匹配的;
? 匿名貨幣轉(zhuǎn)移的序列號是計算正確的;
? 原匿名幣的承諾是系統(tǒng)中Hash Merkle Tree的一個葉子頂點;
? 交易前后c和c′的金額是對等的。
以上5條斷言對于支付方而言是一個具有簡短證據(jù)的NP問題,這些簡短證據(jù)就是在正確執(zhí)行計算時產(chǎn)生的所有中間過程,于是他可以給出該NP問題的一個zk-SNARK證明πpour。支付方把Merkle Tree的根Hash、序列號、新匿名幣承諾、πpour和Pour過程的所有隨機種子用接收方的公鑰加密后的密文打包到一起,作為Pour交易txpour廣播到網(wǎng)絡(luò)中。
Mint交易和Pour交易被廣播后,區(qū)塊鏈上的節(jié)點將驗證相應(yīng)的交易合法性,特別是在Pour交易中,節(jié)點除了驗證零知識證明πpour之外,還要檢查根Hash值(是否出現(xiàn)在歷史記錄)與序列號(是否尚未出現(xiàn))。
Receive從區(qū)塊鏈上歸屬于自己的匿名交易中還原出新的匿名貨幣,相當(dāng)于匿名貨幣系統(tǒng)中轉(zhuǎn)賬交易的執(zhí)行。由于只有Pour交易的接收方才能打開Pour交易計算時的隨機種子,因此,只有接收方才能還原新的匿名幣。
從全局來梳理,可以看到零知識證明是如何創(chuàng)造Zcash上的隱私環(huán)境的:①Mint交易將非匿名幣進行承諾,使其轉(zhuǎn)化為某個地址所持有的匿名幣;②Pour交易通過公開一個與舊匿名幣承諾相關(guān)的序列號,使得舊匿名幣變?yōu)橐鸦ㄙM狀態(tài),同時產(chǎn)生一個新匿名幣,轉(zhuǎn)化為接收方地址所持有的匿名幣。當(dāng)一筆交易出現(xiàn)在鏈上,接收方得到一個匿名幣及其承諾,同時得到了未來消費這個匿名幣需要宣稱計算的隱含序列號,序列號和匿名幣的承諾都是由種子ρ生成的,因此,2者處于一種綁定關(guān)系。一旦這個匿名幣再被消費,則鏈上的信息可以指示原有匿名幣已經(jīng)發(fā)生了轉(zhuǎn)移。而以交易發(fā)起方的視角來看,生成新匿名幣的過程就使得他知曉對應(yīng)新匿名幣的承諾,然而發(fā)起方只能看到鏈上存在這樣的一個新匿名幣的承諾,卻不能追蹤該匿名幣將來是否再次發(fā)生交易轉(zhuǎn)移,因為交易發(fā)起方不具備接收方的私鑰,無法識別新匿名幣產(chǎn)生的序列號。對于鏈上其它用戶,只能看到鏈上的Mint交易和Pour交易,但是不能察覺到有關(guān)交易雙方地址和貨幣量的任何信息;而參與驗證的節(jié)點并沒有獲得任何額外信息,只能查詢到鏈上產(chǎn)生了新的承諾或新的序列號,但是無法從證明中獲得交易細節(jié)。此外,序列號與被轉(zhuǎn)移的匿名幣在鏈上的承諾綁定,保證了同一個匿名幣不能發(fā)起2次交易,避免了雙花問題。
Zcash運用零知識證明技術(shù),使得交易在完全匿名而可驗證的情況下進行,交易雙方和交易的貨幣本身具備了隱私性,不必擔(dān)心任何交易之外的第三方能夠通過交易獲得額外信息。
2.2.2 ZK Rollup——區(qū)塊鏈Layer 2擴容
早期公鏈的可擴展性很差,盡管比特幣和以太坊1.0引領(lǐng)的區(qū)塊鏈交易市場開辟了一個新的時代,但作為交易處理的去中心化網(wǎng)絡(luò),比起技術(shù)已經(jīng)相當(dāng)成熟的中心化交易平臺還是相去甚遠。比特幣10分鐘才能產(chǎn)生一個區(qū)塊,且吞吐量僅有至多每秒7筆;以太坊盡管僅需十幾秒就可以產(chǎn)生新區(qū)塊,但是搭載了智能合約的以太坊每個區(qū)塊僅能包含不過幾百筆的交易量,這造成它每秒能夠處理的交易量也僅有數(shù)十筆。相較于Visa、PayPal等中心化平臺每秒數(shù)千筆、淘寶等電商每秒上萬筆甚至數(shù)十萬筆的吞吐量,這些公鏈遠遠無法承載一個能夠廣泛應(yīng)用的交易市場。如果僅僅依靠增加區(qū)塊容量的方法,則會造成礦工和節(jié)點打包區(qū)塊和驗證的工作量加大,這樣的結(jié)果使得對算力的依賴越來越大,而算力分布的不均勻會使得區(qū)塊鏈上各個節(jié)點的角色分化明顯,最后將會偏離去中心化的本質(zhì)。以太坊創(chuàng)始人Vitalik曾提出一個關(guān)于區(qū)塊鏈屬性重要的觀點——三重困境(Trilemma),即常規(guī)方法無法同時實現(xiàn)區(qū)塊鏈的可擴展性、去中心化和安全性。特別地,就已有的網(wǎng)絡(luò)模型來看:
? 傳統(tǒng)公鏈能夠同時滿足去中心化和安全性,但是可擴展性很差;
? 中心化交易平臺(電商、銀行、部分許可鏈)具有很高的吞吐量和安全性,但是沒有去中心化的屬性;
? 傳統(tǒng)多鏈的生態(tài)系統(tǒng)(由若干不同區(qū)塊鏈通過跨鏈協(xié)議構(gòu)成的生態(tài))是去中心化的,且能夠很好地支持可擴展性,但只要其中一個鏈?zhǔn)艿焦簦瑒t整個生態(tài)將被打破。
因此,在不改變公鏈去中心化和安全性實質(zhì)的基礎(chǔ)上,提升公鏈的可擴展性的方案成為了區(qū)塊鏈研究的一個重要課題,這樣的方案稱作區(qū)塊鏈的擴容(scaling)方案。
造成比特幣、以太坊1.0等早期公鏈數(shù)據(jù)處理過慢的原因主要有2點:①過度依賴算力的PoW共識機制使得鏈上節(jié)點產(chǎn)生了一定程度的分化,為了讓包含若干條交易記錄的區(qū)塊產(chǎn)生,礦工反而需要為了達成Hash目標(biāo)消耗更多的時間和算力(尤其是比特幣)。②當(dāng)區(qū)塊打包到鏈上時,所有的礦工和節(jié)點(尤其是全節(jié)點)都需要對區(qū)塊的內(nèi)容進行驗證,并且隨著交易數(shù)據(jù)量的大量積累和新節(jié)點的加入,這些新節(jié)點(尤其是全節(jié)點)需要追蹤整個系統(tǒng)龐大的交易記錄量,考慮到各種具體因素,這一驗證環(huán)節(jié)也將造成區(qū)塊達成最終性的效率變得很低。
基于以太坊1.0,有眾多的區(qū)塊鏈擴容方案被提出[22-25],這些方案主要分為2種:①鏈上的擴容,稱作Layer 1擴容方案,主要采用分片(sharding)技術(shù),能夠在一定程度上提升整個鏈的處理速度;②鏈下的擴容,稱作Layer 2擴容方案,相對于直接改造區(qū)塊鏈本身協(xié)議的Layer 1擴容,Layer 2擴容由于是在鏈下進行,不必直接受制于區(qū)塊鏈本身的限制,也正因此有一系列不同的方案被提出,如狀態(tài)通道、側(cè)鏈、子鏈等。但這些方案或造成貨幣流通問題,或存在安全性問題,可驗證性或數(shù)據(jù)可用性差。
Rollup方案則同時兼顧了數(shù)據(jù)可用性和計算效率,通過主鏈上的一個Rollup智能合約,實現(xiàn)狀態(tài)記錄、信息轉(zhuǎn)移和存取款操作。此外,Rollup能夠?qū)ayer 2中的交易數(shù)據(jù)壓縮到主鏈中,保證鏈上的節(jié)點能夠通過這些壓縮數(shù)據(jù)實現(xiàn)驗證和狀態(tài)更新。當(dāng)交易產(chǎn)生時,Layer 2的礦工會在鏈下打包計算壓縮數(shù)據(jù)和新的狀態(tài),并將其提交到Rollup合約中,合約驗證這些數(shù)據(jù)后再放到主鏈上,進而能夠?qū)崿F(xiàn)主鏈的狀態(tài)更新。當(dāng)Rollup合約或鏈上節(jié)點指出了Layer 2中的問題,那么提交該數(shù)據(jù)的礦工將會受到扣除貨幣的懲罰。Rollup方案中被廣泛使用的是Optimistic Rollup(如Loopering[26])和ZK Rollup(如zkSync[27]),2者分別能夠?qū)⒁蕴坏耐掏铝可舷尢嵘?00筆/s和2 000筆/s,這已經(jīng)是足以和Visa、PayPal這樣的支付渠道相提并論的結(jié)果了。
在Optimistic Rollup方案中,盡管Layer 2會給主鏈提供能夠讓其它節(jié)點交易的狀態(tài)更新信息和部分可驗證的交易信息,保證了數(shù)據(jù)的可用性,但是它存在一個挑戰(zhàn)期,在此期間鏈上節(jié)點利用鏈上可用數(shù)據(jù)驗證交易合法性,如果存在非法交易,則可以生成一個欺詐證明。不過一旦挑戰(zhàn)期結(jié)束,交易就會被最終確定并無法修改。而Optimistic的安全性是基于節(jié)點行為的,如果主鏈上的節(jié)點沒有做足夠的驗證計算(如果真如Optimistic其名,大家樂觀地相信可用性數(shù)據(jù)即可保證交易準(zhǔn)確無誤),那么至少得保證系統(tǒng)中的每個賬戶要時刻注意與自己相關(guān)的交易細節(jié),但這一點基于理性行為的并不是一個現(xiàn)實的考慮。利用Optimistic Rollup的這一機制漏洞,攻擊者可能從潛在的非法交易中獲得收益。
在ZK Rollup方案中,Layer 2的礦工在提交壓縮的交易數(shù)據(jù)的同時,還會附上一個合法性證明(零知識證明)。注意到,Layer 2擴容方案的邏輯是保持交易數(shù)據(jù)更新的內(nèi)容不變,同時將交易數(shù)據(jù)的驗證和打包的工作轉(zhuǎn)移到鏈下進行。因此,這個合法性證明是為了證明“礦工確實對被打包的交易進行了交易數(shù)據(jù)合法性的驗證計算,驗證計算的結(jié)果是這些交易都是合法的,同時計算的狀態(tài)更新也是正確的”這一論斷。零知識證明的安全性保證了礦工只能在進行正規(guī)計算的前提下提交合法證明,并且只能提交正確的狀態(tài)更新計算。此外,礦工不再需要將交易數(shù)據(jù)中的可驗證性部分壓縮提交到Rollup智能合約中,只需要提交新狀態(tài)和合法證明即可。由于沒有挑戰(zhàn)期的限制,鏈上用戶可以隨時提取Layer 2中的資金,并且不需要像在Optimistic中一樣時刻跟進主鏈上的驗證工作,因為Rollup智能合約會將所有的合法證明放在鏈上,杜絕了可能存在的礦工作弊行為。Layer 2上的礦工通常由具備較強算力的節(jié)點擔(dān)任,也正因為如此,它們能夠?qū)⑾惹皬?fù)雜耗時的鏈上打包驗證工作轉(zhuǎn)移到鏈下進行,完成正確計算和打包的礦工也會受到相應(yīng)的獎勵。
具體而言,設(shè)想A要將自己鏈上v個ETH(以太坊主鏈的加密貨幣單位)余額中的v0個ETH存入Layer 2,并將其中的u個ETH轉(zhuǎn)移給B,那么ZK Rollup的執(zhí)行會涉及到以下4個步驟:
(1)A將v0個ETH轉(zhuǎn)移到Rollup合約賬戶,Rollup合約相應(yīng)記錄這一轉(zhuǎn)移交易并提交給礦工,此時這v0個ETH已經(jīng)放在了Layer 2上。相反,如果有某個用戶要從Layer 2中取出一定的貨幣,則同樣由Rollup合約記錄這一轉(zhuǎn)移請求并提交給礦工,最終由Rollup合約賬戶轉(zhuǎn)移相同的貨幣給該用戶。
(2)A在Layer 2上提交一個向B轉(zhuǎn)移u個ETH的交易,礦工接收到該交易,被其連同其它交易(轉(zhuǎn)賬、存入、轉(zhuǎn)出)打包起來計算狀態(tài)更新和證明;
(3)礦工將所有數(shù)據(jù)(交易更新的狀態(tài)和合法證明)通過Rollup合約廣播到Layer 1上的驗證節(jié)點;
(4)驗證節(jié)點通過Rollup合約驗證礦工提供的信息,并隨后更新鏈上的狀態(tài)。
由于zk-SNARK的高效簡潔,證明長度不會隨著Layer 2上打包的交易數(shù)量而增加,這使得Layer 1上的礦工在檢查證明時不會花費額外時間,且單次證明的效率本來就相較于直接檢查更高,這就大大加快了Layer 2處理交易的速度。
需要提到的是,ZK Rollup的零知識證明方案也會依照具體使用方案而定。例如,Loopring采用的是非通用可更新的(針對應(yīng)用專門化的)SNARK方案(Groth16),zkSync1.0采用的是通用可更新的(或通用應(yīng)用的)SNORK方案(Sonic,Plonk),未來將在zkSync2.0采用無需可信設(shè)置的STARK方案(zk-STARK)。這些零知識工程化方案的性能決定了ZK Rollup生成的合法證明的性質(zhì)。
ZK Rollup借助zk-SNARK的高效性,極大地縮短了Layer 1上的驗證時間,使區(qū)塊鏈的吞吐量得到增加,鏈上存儲負擔(dān)變小,驗證速度加快,區(qū)塊鏈的可擴展性大幅提升。
2.2.3 Filecoin——去中心化存儲
隨著中心化網(wǎng)絡(luò)向去中心化網(wǎng)絡(luò)的過渡,中心化可信計算被去中心化可驗證計算所替代,數(shù)據(jù)存儲模式也由中心化存儲服務(wù)器過渡到去中心化存儲模式。早期公鏈無法處理海量數(shù)據(jù),只能處理存儲壓力相對較小的交易信息,如比特幣這樣的電子賬本。而越來越復(fù)雜的架構(gòu)所帶來的存儲成本也隨之增加,如果區(qū)塊鏈不能提供優(yōu)化的去中心化存儲方案,將來就不可能應(yīng)對更為復(fù)雜的數(shù)據(jù)類型。此外,鏈上留存大量的歷史數(shù)據(jù)都需要用于去中心化節(jié)點的驗證計算,但很難要求每個驗證節(jié)點將不斷擴張的歷史數(shù)據(jù)全數(shù)存儲下來,最終也只有存儲能力很強的少數(shù)節(jié)點(如原有的中心化存儲服務(wù)器)能夠勝任,這將威脅到去中心化的本質(zhì)。2014年,星際文件系統(tǒng)(InterPlanetary File System,IPFS)誕生,它是一個全球范圍的分布式互聯(lián)網(wǎng)底層協(xié)議,通過點對點的文件和應(yīng)用的分配、傳輸和共享,極大地提升了互聯(lián)網(wǎng)數(shù)據(jù)傳輸?shù)男?11)Benet J.IPFS-content addressed,versioned,P2P file system.arXiv preprint,2014:arXiv:1407.3561[cs.NI].。IPFS將替代已在互聯(lián)網(wǎng)時代產(chǎn)生了巨大影響的HTTP協(xié)議,它解決了HTTP中心化服務(wù)器帶來的效率低、使用成本高和帶寬浪費嚴(yán)重等若干問題。隨著IPFS協(xié)議的推動,區(qū)塊鏈存儲能力的提升需求也愈發(fā)地迫切。
Filecoin項目是作為IPFS的激勵層出現(xiàn)的[28-29],負責(zé)貨幣激勵、數(shù)據(jù)存儲和檢索服務(wù)、調(diào)整存儲市場和資源分配。與傳統(tǒng)的電子賬本式區(qū)塊鏈不同,在Filecoin中除了驗證節(jié)點以外,還有用于提供存儲服務(wù)的節(jié)點和負責(zé)信息檢索的礦工節(jié)點。存儲節(jié)點與用戶在鏈上簽訂存儲合同,在一定時間內(nèi)存儲用戶指定的數(shù)據(jù),存儲合同作為數(shù)據(jù)被納入到區(qū)塊中,而檢索節(jié)點則負責(zé)從整個存儲系統(tǒng)的數(shù)據(jù)集中檢索用戶所需的信息,以更好地促進信息傳輸和降低延遲。這2類節(jié)點通過在存儲市場和檢索市場提供的相應(yīng)服務(wù)而獲得代幣獎勵。
一個網(wǎng)絡(luò)存儲服務(wù)協(xié)議將要求存儲節(jié)點按照用戶訂單中所指定的存儲時限,在一定的存儲空間中固定地存儲一定的文件。中心化的存儲方案(云存儲)中,用戶基于中心化服務(wù)器的信任完成整個存儲和取回的流程,但在去中心化網(wǎng)絡(luò)中,由于存儲空間與記賬權(quán)和存儲收益直接掛鉤,惡意節(jié)點可能利用去中心化的特點進行一系列攻擊(甚至是在要求存儲節(jié)點提供存儲證明時,也存在潛在的攻擊):
? 女巫攻擊:惡意節(jié)點創(chuàng)建多個身份,用戶提供文件的若干副本,被惡意節(jié)點誘導(dǎo)到多個身份宣稱的獨立存儲空間中,但實際上惡意節(jié)點只存儲了其中一份,在用戶取回時將同一份文件復(fù)制多份再發(fā)回用戶。惡意節(jié)點利用女巫攻擊獲得更多的報酬(因為實際存儲空間遠小于訂單存儲空間)。女巫攻擊的實質(zhì)是利用文件與存儲空間缺乏實質(zhì)對應(yīng)性,導(dǎo)致文件與實際存儲空間的不對等。
? 外包攻擊:惡意節(jié)點承諾比實際存儲容納量更多的數(shù)據(jù),通過中心化的數(shù)據(jù)庫協(xié)助存儲自身無法容納的多余數(shù)據(jù)(因為中心化的存儲處理更快,數(shù)據(jù)更集中,服務(wù)更便宜),這相當(dāng)于將這部分的數(shù)據(jù)外包出去,而節(jié)點獲得與自己實際存儲量不符合的收益。外包攻擊的實質(zhì)是沒有將宣稱的存儲文件存放在應(yīng)有的存儲空間中,文件在該過程中可能產(chǎn)生時空上的流動。
? 生成攻擊:惡意節(jié)點并未實際存儲數(shù)據(jù),當(dāng)其被要求提供存儲數(shù)據(jù)的證明時,惡意節(jié)點以某種方式快速計算生成證明,從而在未被挑戰(zhàn)期間數(shù)據(jù)仍可以不存儲于相應(yīng)的空間中。生成攻擊的實質(zhì)是文件時空流動的成本和時間過低,使得存儲證明被要求時文件能夠快速被轉(zhuǎn)移到應(yīng)當(dāng)存儲的地方。
Filecoin為了應(yīng)對這樣的攻擊,要求存儲節(jié)點必須提供相應(yīng)的存儲證明才能讓用戶相信存儲服務(wù)是正確進行的。這包括2個方面:①存儲節(jié)點確實接收到了用戶指定的完整文件,且與對應(yīng)的存儲空間是匹配的;②存儲節(jié)點在服務(wù)運行期間的任何時刻都將同一文件完整地留存在自己封存的存儲空間中。為了證明以上2點,存儲節(jié)點要提供2個非交互式的零知識證明——復(fù)制證明(Proof of Replication,PoRep)和時空證明(Proof of Spacetime,PoSt),這2個證明使得被存儲文件與特定分配的空間和確定的一段時間綁定在一起。由于復(fù)制證明的存在,任何被存儲的文件副本必須分別存儲在不同的空間中,因此,女巫攻擊是不可行的。另外,由于時空證明的存在,節(jié)點無法在規(guī)定時間之內(nèi)將數(shù)據(jù)的一部分挪出存儲區(qū),也不能在給定的空間中存儲與給定數(shù)據(jù)不同的其它數(shù)據(jù),因此,外包攻擊和生成攻擊也是不可行的。
本文首先引入一個可驗證延遲函數(shù)(Verifiable Delay Function,VDF)的概念,這個概念是由Boneh等[30]提出的。VDF除了具有計算可驗證性之外,最顯著的特點是它不是一個快速算法,即當(dāng)安全參數(shù)為k時,VDF的計算過程至少是k的次指數(shù)時間級別的,這意味著即使VDF的算法是公開的,其輸出也具有明顯的時延性質(zhì)。
復(fù)制證明的第一步要求存儲節(jié)點對數(shù)據(jù)進行封存操作。為了保證數(shù)據(jù)的每個副本被儲存在獨立的存儲空間,每個副本在存儲到某個特定空間時,需要保證都要通過一個特定的變換打亂副本,這樣的操作稱為封存,如果需要存儲同一個文件的若干副本,則這些副本在封存之后也是不同的,因此,沒法直接復(fù)制。Filecoin設(shè)計了一個VDF作為封存算法,它通過存儲節(jié)點的私鑰將數(shù)據(jù)D在一定的時延后封存為R。一方面,存儲節(jié)點要計算D的Hash值和封存數(shù)據(jù)R(視作長數(shù)組)的Hash Merkle Root這2個公開信息以供驗證;而由于存儲節(jié)點具有私鑰和D作為秘密的簡短證據(jù),于是該節(jié)點可以計算一個零知識證明πSEAL,來證明自己封存階段的正確性;另一方面,封存的數(shù)據(jù)R只有固定存放在存儲空間時才能被讀取,因而存儲階段還要在隨機挑戰(zhàn)下找到R中被隨機挑戰(zhàn)的葉子節(jié)點在Hash Merkle Tree中的一條路徑,這進一步要求該節(jié)點提供另一個零知識證明πPOS,這就證明了存儲節(jié)點確實固定封存了相應(yīng)的文件。(πSEAL,πPOS)構(gòu)成了一個完整的復(fù)制證明。
時空證明是在訂單執(zhí)行期間(設(shè)時間為T)的各個時間節(jié)點中不斷產(chǎn)生的,相當(dāng)于不斷地根據(jù)挑戰(zhàn)者的隨機挑戰(zhàn)鏈提供一套復(fù)制證明,存儲節(jié)點必須保證每個副本的封存信息在T時間內(nèi)始終被存儲在先前指定的特定空間中,且全過程封存信息都是完整的。如果存儲節(jié)點沒有在被挑戰(zhàn)的時間點保存完整的封存數(shù)據(jù),則為了通過證明,他必須將完整數(shù)據(jù)D重新封存回原有的空間以支持復(fù)制證明的計算,但鑒于封存操作的延時性,惡意節(jié)點無法以很快的速度生成這樣的證明,這就保證了封存信息在指定存儲時間和空間中的完整性。時空證明意味著到任意的被挑戰(zhàn)時間t∈[0,T]為止,存儲節(jié)點一直將封存數(shù)據(jù)存儲在對應(yīng)的空間中。
Filecoin通過可驗證延遲函數(shù)實現(xiàn)了復(fù)制證明和時空證明,解決了中心化存儲向去中心化存儲過渡的一系列潛在安全問題,提供了一個去中心化存儲方案。有了去中心化存儲,區(qū)塊鏈的存儲能力能夠得到大幅提升,也具備了應(yīng)對未來去中心化需要面臨的海量數(shù)據(jù)處理挑戰(zhàn)的能力。可驗證延遲函數(shù)本身也為未來公鏈融合更多技術(shù)提供了重要的工具。
2.2.4 Mina——遞歸證明
傳統(tǒng)公鏈中驗證時間長、驗證成本巨大、鏈上存儲的信息積累嚴(yán)重的問題一直拖累著區(qū)塊鏈的可擴展性。先前提到的2個公鏈中,ZK Rollup嘗試將驗證轉(zhuǎn)移到鏈下進行,將驗證時間和成本轉(zhuǎn)移到Layer 2上具有較強計算能力的礦工;Filecoin則是通過去中心化的存儲方案,使得原先鏈上存儲的積累驗證信息轉(zhuǎn)移到存儲節(jié)點的空間中,但是2者都沒有解決驗證信息占用空間與實際效用之比過大的問題。為了確保區(qū)塊鏈的安全性,此前的公鏈必須在鏈上存有足夠多的驗證信息,以供每個節(jié)點進行重復(fù)驗證,而這些驗證信息所占用的空間過于龐大,反而給區(qū)塊鏈的可擴展性帶來麻煩;又由于驗證工作過于消耗時間和計算資源,新加入的節(jié)點沒有足夠的動力去運營全節(jié)點,網(wǎng)絡(luò)中全節(jié)點的比例下降將進一步影響到去中心化和安全性。
2017年誕生的Mina給出了一個全新的去中心化支付系統(tǒng)的設(shè)計,實現(xiàn)了第一個超輕量級的區(qū)塊鏈[31]。所謂Mina的超輕量級,其含義是任何Mina上的節(jié)點僅通過一個大小為22 KB的零知識證明,就可以驗證從創(chuàng)始區(qū)塊以來整條區(qū)塊鏈上的所有區(qū)塊的合法性,使得鏈上驗證所需的時間和資源成本壓縮到了極致。Mina的網(wǎng)絡(luò)中包含3類節(jié)點,分別是區(qū)塊生產(chǎn)者、證明生產(chǎn)者和存檔節(jié)點,區(qū)塊生產(chǎn)者是在鏈上產(chǎn)生區(qū)塊的礦工節(jié)點,證明生產(chǎn)者則利用zk-SNARK對區(qū)塊進行壓縮并生成證明,而存檔節(jié)點要負責(zé)鏈下存儲所有歷史上的詳細區(qū)塊數(shù)據(jù),是Mina的持久性可檢索數(shù)據(jù)源。Mina大致的運行流程如下:
(1)由Ouroboros Samasika共識協(xié)議[32](Mina采用的PoS共識協(xié)議)確定的區(qū)塊生產(chǎn)者負責(zé)打包交易并生成共識區(qū)塊;
(2)證明生產(chǎn)者依照區(qū)塊信息更新鏈上的狀態(tài),同時產(chǎn)生更新的零知識證明snark ;
(3)第i個區(qū)塊鏈快照Si=(σi,snarki),由區(qū)塊Bi生成后的系統(tǒng)狀態(tài)σi和對應(yīng)的狀態(tài)轉(zhuǎn)移零知識證明snarki構(gòu)成,任何節(jié)點可以驗證新生成的區(qū)塊Bi+1是否與Si匹配(檢查區(qū)塊交易生效前的系統(tǒng)狀態(tài)是否滿足Si所指示的狀態(tài)匹配)。如果2者匹配,則節(jié)點可以依照σi和Bi+1更新系統(tǒng)狀態(tài)為σi+1,而σi+1和對應(yīng)區(qū)塊Bi+1的零知識證明snarki+1組成新的區(qū)塊鏈快照Si+1。
從創(chuàng)世區(qū)塊B0開始,區(qū)塊鏈的初始狀態(tài)σ0和一個缺省的snark0產(chǎn)生,每當(dāng)有新的區(qū)塊Bi+1生成時,系統(tǒng)狀態(tài)將從σi更新為σi+1,同時整個合法更新過程的信息連同上一個證明都被壓縮到一個簡潔的零知識證明snarki+1中,繼而新的區(qū)塊鏈快照產(chǎn)生,它包括2個方面的信息:①σi+1是Bi+1產(chǎn)生后整個系統(tǒng)的新狀態(tài)信息;②snarki+1則表示從創(chuàng)世區(qū)塊B0以來的所有區(qū)塊鏈狀態(tài)更新都是合法的。區(qū)塊鏈快照是這一過程中的一個個切片信息,如果把區(qū)塊鏈延長比作是一個攝影師對著一幅畫從近到遠的拍攝過程,那么拍攝過程中每個瞬間的照片都指示了當(dāng)前區(qū)塊鏈的系統(tǒng)狀態(tài),而零知識證明則保證了攝影師拉遠過程的連續(xù)性:攝影師始終對著同一幅圖拍照,不同狀態(tài)是依照同一幅圖從近到遠的順序拍照得到的;照片的尺寸永遠是固定的,先前拍攝的照片在之后的照片中占據(jù)了一部分圖像,但是將這部分圖像放大后就可以得到先前的照片。
Mina之所以能夠做到讓snarki蘊含先前所有狀態(tài)更新合法性的事實,是借助了被稱為遞增可計算證明(Incrementally Computable SNARKs)這一由Valiant[33]提出的遞歸零知識證明技術(shù)。遞歸零知識證明可以實現(xiàn)對遞歸過程中所有證明的有效性證明。在區(qū)塊鏈中實施遞歸零知識證明不僅能夠保證當(dāng)前的共識區(qū)塊的合法性,同時也能保證此前所有歷史已共識區(qū)塊的合法性。形式化地說:
(1)假設(shè)σi和σi+1是2個先后狀態(tài),則σi+1作為σi的一個可能的后繼狀態(tài),可以由狀態(tài)轉(zhuǎn)換過程τi作為簡短證據(jù),于是存在一個zk-SNARK πi可以證明:存在某個狀態(tài)轉(zhuǎn)換過程τi使得σi+1是σi在τi作用下的后繼狀態(tài);
(2)假設(shè)σi和σi+1是2個先后狀態(tài),則如(1)所述,可以由πi作為簡短證據(jù),于是存在一個zk-SNARK π′i可以證明:存在某個zk-SNARK πi使得πi是“σi+1是σi的后繼狀態(tài)”的證明;
(3)假設(shè)σi和σi+2是2個相差階段為2的狀態(tài),將π′i和π′i+1作為簡短證據(jù),于是存在一個zk-SNARK π(i)可以證明:存在2個先后的狀態(tài)轉(zhuǎn)換過程τi和τi+1,使得σi+2是σi在2個階段后的狀態(tài)。
從(1)~(3)的過程使得零知識證明完成了一次遞歸,從而一次狀態(tài)轉(zhuǎn)化的正確性證明被延長了2次。隨著區(qū)塊的不斷延長,遞增可計算證明可以通過先前區(qū)塊的證明遞歸生成,于是最終只需驗證一個zk-SNARK,即可證明之前所有區(qū)塊狀態(tài)轉(zhuǎn)化的正確性,不再需要每個節(jié)點進行重復(fù)而復(fù)雜的驗證工作。
在區(qū)塊鏈中,將區(qū)塊視作系統(tǒng)狀態(tài)的轉(zhuǎn)換過程,于是遞增可計算證明可以通過先前區(qū)塊的證明遞歸生成,同時由于zk-SNARK可以給出非常簡短的證明,留存在鏈上的存儲數(shù)據(jù)可以非常地小。遞歸零知識證明的優(yōu)勢可以推廣到更多的應(yīng)用場景中。Mina搭載了通用可支持的SNARK智能合約——Snapps,這使得Mina可以整合許多互聯(lián)網(wǎng)中的數(shù)據(jù)庫,并只需要執(zhí)行一次初始化的業(yè)務(wù)邏輯,就可以使得互聯(lián)網(wǎng)服務(wù)在Mina上進行,且不再需要每個節(jié)點進行重復(fù)而復(fù)雜的驗證工作。傳統(tǒng)的中心化機構(gòu)的公信力使得人們不必經(jīng)過無意義的重復(fù)驗證就能夠相信數(shù)據(jù)更新的正確性,現(xiàn)在Mina將這種信任放在了去中心化網(wǎng)絡(luò)中,并且相對于中心化而言,依賴零知識證明的安全性也更加可靠。
Mina通過遞歸零知識證明技術(shù),將區(qū)塊鏈的驗證效率和存儲效率提升到了一個新的高度,真正意義上將傳統(tǒng)基于公信力的信任轉(zhuǎn)化為基于對算法和密碼學(xué)的信任。Mina在提升了區(qū)塊鏈可擴展性的同時,也為區(qū)塊鏈和實體經(jīng)濟、網(wǎng)絡(luò)服務(wù)等落地化的應(yīng)用場景提供了更多的結(jié)合空間。
2.2.5 Aztec——Layer 2的隱私實現(xiàn)
zk-SNARK雖然已經(jīng)在Zcash上實現(xiàn)了隱私性,但是在本來已經(jīng)低效的PoW公鏈中加上隱私屬性,會使其運行效率進一步下降。此外,盡管以太坊在Layer 2擴容的加持下能夠具備較為理想的擴展性,但是其隱私性問題一直沒有得到解決。尤其是當(dāng)智能合約進入公鏈后,公鏈的功能性得到了極大的拓展,這對公鏈的可擴展性帶來了更大的挑戰(zhàn)。
2018年,創(chuàng)造Plonk協(xié)議的研究團隊Aztec提出了Aztec Protocol[34],旨在在以太坊上建立一個Layer 2上的高速隱私網(wǎng)絡(luò)。其大致想法是,對于以太坊上發(fā)起的轉(zhuǎn)賬交易和合約交易,構(gòu)造關(guān)于交易數(shù)額、交易雙方信息、運行代碼和被交易資產(chǎn)等信息的隱私保護機制,在之前ZK Rollup的基礎(chǔ)上建立隱私層,搭建Plonk證明的ZK-ZK Rollup,從而縮減主網(wǎng)上隱私交易的gas費(12)在以太坊網(wǎng)絡(luò)中,合約執(zhí)行需要依賴算力的推動,合約代碼的具體執(zhí)行將以算力的方式換算為計算產(chǎn)生的gas費,支付時以ETH進行換算。通過對網(wǎng)絡(luò)上每一筆計算的執(zhí)行收費,以太坊能夠保證系統(tǒng)免于遭受循環(huán)攻擊的風(fēng)險,同時也能避免過大的代碼或循環(huán)代碼造成不必要的算力損耗。每筆合約交易中將指定一個最大的gas費以指示運行該合約代碼所需要支付的算力費用,一旦實際計算產(chǎn)生的gas費超過最大gas費則計算終止,如果計算結(jié)束后產(chǎn)生的gas費沒有超過最大值,則會在扣除小費后返還剩余的ETH。,提升吞吐量并保證隱私性。之前的ZK Rollup雖然冠以zero-knowledge的詞頭,但是本質(zhì)上ZK Rollup并不提供隱私保護,而是借助zk-SNARK的證明簡潔性使得Layer 1上各個節(jié)點的驗證效率提高,因此,真正添加了零知識性,使得Layer 2具有隱私性的Rollup合約被稱作ZK-ZK Rollup。
在Aztec的隱私層架構(gòu)中,相對于以太坊的基于賬戶的記賬模型,Aztec采取了更利于構(gòu)建隱私性的UTXO模型。UTXO模型的本質(zhì)是貨幣的歸屬權(quán)的轉(zhuǎn)移,當(dāng)構(gòu)建隱私層時,只需考慮被加密的貨幣在交易中發(fā)生的單向歸屬權(quán)轉(zhuǎn)移的過程,因而只需將貨幣原持有者的匿名信息替換為新持有者的匿名信息。然而在基于賬戶的記賬模型下,隨著交易的發(fā)生,雙方的賬戶余額都有直接的改變,在驗證相應(yīng)的隱私交易時,需要牽涉到雙方的計算過程。Aztec Protocol將Layer 2上產(chǎn)生的交易通過Aztec承諾函數(shù)進行加密,稱為Aztec Note。一個Aztec Note由一組橢圓曲線承諾值、瀏覽密鑰、支出密鑰和加密交易信息構(gòu)成,瀏覽密鑰的持有者能夠解密Note并瀏覽其中的內(nèi)容,并且要負責(zé)創(chuàng)建交易的Join-Split零知識證明,而支出密鑰的持有者能夠批準(zhǔn)交易的進行,即提供一個由支出密鑰簽署的Join-Split證明的簽名。
Join-Split零知識證明是Aztec中隱私交易的關(guān)鍵。交易發(fā)起方在一筆交易中將提供自身持有的若干Note,并將其中的一部分Note的所屬權(quán)轉(zhuǎn)移給交易接收方,這部分Note中包含的金額就是交易額,而剩余的Note仍歸屬自己。于是Join-Split要求證明交易前的若干Note包含的金額與分配給雙方后的若干Note包含的金額相等。類似于Zcash的處理,Note并不是直接轉(zhuǎn)移給對方,而是使得消費過的Note變得無效,同時新產(chǎn)生若干相當(dāng)價值的Note。交易發(fā)起方需要用自己Note中的瀏覽密鑰創(chuàng)建Join-Split零知識證明,以證明自己在交易中所創(chuàng)建的所有新Note與先前的Note等值,此外,交易發(fā)起方還將證明自己擁有對先前Note的所屬權(quán)。Aztec特別維護了2個數(shù)據(jù)結(jié)構(gòu)(Hash Merkle Tree):Note樹和Nullifier樹,其中,Note樹包含了所有在系統(tǒng)歷史上創(chuàng)建過的Note,而一旦Note經(jīng)過交易被無效化,則會被Nullifier樹記錄下來。當(dāng)交易發(fā)起方需要證明自己擁有先前的Note時,需要提供另一個零知識證明來說明幾個條件:①這個Note存在于Note樹中;②在交易前該Note并不記錄在Nullifier樹中;③在獲得該Note的交易中,Note的現(xiàn)持有者具有支出密鑰,因而這個Note在當(dāng)時的交易中將轉(zhuǎn)移給現(xiàn)持有者。
為了ZK-ZK Rollup的高效執(zhí)行,Aztec還將多個zk-SNARK的邏輯編譯成若干電路。除了計算隱私Note和執(zhí)行交易的Join-Split證明電路和隱藏用戶身份的Account電路之外,還有負責(zé)處理隱私用戶從Layer 2中提取貨幣的Escape-Hatch電路,以及繼承了ZK Rollup的Rollup電路,它能夠?qū)⑺蠮oin-Split證明聚合為單個證明放在鏈上。而Root Rollup電路能夠?qū)ollup電路進行進一步的聚合,這極大地提高了Layer 1上的驗證效率。此外,Aztec Protocol后續(xù)還將用于零知識證明的Plonk改進為TurboPlonk[35]。TurboPlonk增加了一些自定義門(如邏輯門、范圍檢查和Pedersen Hash等),解決了Plonk因只有算術(shù)電路門帶來的效率低下問題。此外,高效的范圍檢查使得遞歸證明在以太坊上的實現(xiàn)更簡單。特別地,TurboPlonk更是引入了最新的橢圓曲線多標(biāo)度乘法算法,極大地提升了零知識證明的效率。
Aztec從零知識證明算法起家,不斷改善高效的零知識證明算法,最終實現(xiàn)了Layer 2上的高效隱私網(wǎng)絡(luò)。Aztec Protocol不僅大幅縮減了區(qū)塊鏈的驗證成本,同時還解決了Layer 2上困難的隱私問題,是兼具了隱私保護和可擴展性的方案。它將零知識證明在區(qū)塊鏈中發(fā)揮的作用又提升到了一個新的高度,為擴大區(qū)塊鏈網(wǎng)絡(luò)業(yè)務(wù),創(chuàng)造更完善的區(qū)塊鏈生態(tài)提供了技術(shù)支持。
本文從多個方面探討了零知識證明技術(shù)在改善區(qū)塊鏈的隱私性、可擴展性、存儲能力和驗證能力等方面上發(fā)揮的巨大效用:①Zcash借助零知識證明首次實現(xiàn)了隱私交易;②ZK Rollup利用zk-SNARK的簡潔性極大地提升了區(qū)塊鏈的可擴展性;③Filecoin通過2個關(guān)鍵的零知識證明實現(xiàn)了去中心化存儲,同時解決了區(qū)塊鏈驗證數(shù)據(jù)累積的問題;④Mina將整個區(qū)塊鏈的驗證極小化地濃縮在了簡短的零知識證明中,為區(qū)塊鏈的可驗證性帶來了前所未有的效率;⑤Aztec Protocol將各類零知識證明作為實現(xiàn)兼具隱私性和可擴展性的網(wǎng)絡(luò)層的重要工具,使得區(qū)塊鏈具有越來越多的良好性質(zhì)。
可以清楚地認識到零知識證明已經(jīng)實現(xiàn)了,或?qū)⒛軌驅(qū)崿F(xiàn)越來越多的功能,包括但不局限于秘密計算、隱藏種子、遞歸證明、創(chuàng)造黑箱、秘密投票、身份識別、范圍證明、延遲證明和秘密共享,等等。零知識證明本質(zhì)上起到了制造隱私和信息差的作用,同時能夠保持證明信息的簡短,這將使得區(qū)塊鏈能夠在需要抹除不平等信息差的時候提供透明性和不可篡改性,在需要保護隱私的時候利用零知識證明建立起足夠的信息差,在需要提供可驗證性時能保持足夠的高效性。零知識證明在30多年的發(fā)展中已經(jīng)形成了一個較成熟的體系,在區(qū)塊鏈系統(tǒng)設(shè)計中,將系統(tǒng)需要改善的問題或需要實現(xiàn)的特性轉(zhuǎn)化為某個特定的可證明問題,再由證明問題轉(zhuǎn)向工程化算法實現(xiàn)的途徑,最后將零知識證明轉(zhuǎn)化為區(qū)塊鏈可實現(xiàn)的某個性質(zhì)或功能,每一步都需要綜合考慮零知識證明是否能夠做到在不犧牲去中心化、安全性和可擴展性的基礎(chǔ)上仍然能提供這些特性。特別地,區(qū)塊鏈作為一個新興的網(wǎng)絡(luò)生態(tài)底層架構(gòu),其所需的廣泛的隱私安全、互通互聯(lián)的高運算能力和全局可驗證、可監(jiān)管的基礎(chǔ)保障手段都需要隱私計算,尤其是零知識證明的參與,這也是零知識證明在未來區(qū)塊鏈發(fā)展中的趨勢和優(yōu)勢。若干已有的零知識證明在區(qū)塊鏈中應(yīng)用的案例已經(jīng)表明,只要將零知識證明發(fā)揮恰當(dāng),就能夠極大地改善區(qū)塊鏈在應(yīng)用場景中的性能,這種新興的互聯(lián)網(wǎng)技術(shù)也就能體現(xiàn)出越來越重要的價值。
致謝北京大數(shù)據(jù)研究院區(qū)塊鏈與隱私計算中心的莫曉康教授對本文寫作提供了寶貴的指導(dǎo)意見,在此表示感謝!