在Layer2擴容賽道上,ZkRollup方案以完美的數據可用性以及與Layer1同等級的安全性,備受青睞;以單個Block為處理單元,用零知識證明算法來保證此區塊引起的世界狀態變化的有效性,大幅降低了每筆交易的上鏈成本,同時也增長了系統的吞吐效率。然而,在實際的落地過程中,研究者們發現,簡單的ZkRollup方案帶來的擴容效果,并不能滿足真實的場景需求;這和很多因素有關,電路參數的限制,零知識證明算法的效率等等;研究者們做了很多努力,比如對零知識證明算法進行加速,配備超高配置機器,優化電路規模等,雖帶來了一定的性能提升,但仍難以滿足需求。
研究者們當然希望,鏈上一次處理的交易越多越好。朝著這個目標出發,研究者們首先發現了聚合證明(Aggregation proof)技術,該技術已經被ZKSwap推出的ZKSpeed擴容方案采用,在前面的文章中,已經解釋了聚合證明(Aggregation proof)的原理和思想,簡單來說就是把多個區塊的證明聚合成一個證明,使得鏈上一次就可以完成多個區塊的驗證,大大的降低了交易的平均成本,其原理如下圖所示:
該方案雖然有優勢,可實現多個區塊的證明的一次驗證,但也有其一定的局限性:
1. 一次聚合的區塊是有上限的,受限于電路參數的限制;
2. 聚合的區塊越多,電路就越大,直到其規模的上限;這種電路生成的證明時間要更長,證明密鑰和驗證密鑰也會占用更大的存儲空間;
3. 目前可支持的最大聚合粒度是20個區塊,也就是湊齊20個區塊后,才會開始聚合處理。如果生成證明的效率比較低,這會導致這些區塊被確認的時間拉長,尤其是最早生成的那些區塊;
受限于證明計算(Proof computation)和CRS生成復雜度的限制,上述的零知識證明算法是不可擴展的。因此,研究者們也在努力尋找一個可擴展的零知識證明算法,即Scalable zk-SNARKs,
Scalable zk-SNARKs 可拓展的zk-SNARKs
在論文《Scalable Zero Knowledge via Cycles of Elliptic Curves》中,Eli Ben-Sasson等給出了Scalable zk-SNARKs的定義:
1. Key generation is cheap:即,Key生成的時間和計算復雜度沒有關系(如果是Scalable zk-STARKs,可能不需要);
2. Proof generation is carried out incrementally:即,證明生成過程既包含了當前執行步驟的正確性又包含了在此之前所有計算的正確性,這種zk-SNARKs是incrementally computable;
為了方便大家理解,用一張圖來表示上述思想:
上圖表示意思是:證明著證明一個遞歸計算過程,即:初始狀態為S0,經過t次函數F迭代計算后的結果為St(像極了區塊鏈里區塊更新的過程)。
第一個計算方式,Monolithic option:證明方P把t次計算過程全部寫成電路,然后一次性證明,正如我們前面所列舉的一樣,存在相同的局限性,很高的時間復雜度和空間復雜度;
第二個計算方式,Recursive option:遞歸計算,其過程如下:
1. 首先對于初始狀態S0=>S1,證明方P對于S1 = F(S0)計算過程生成一個證明π1;
2. 對于S1=>S2的轉換,由圖中可以得知,證明方P證明了兩部分:{S2 = F(S1), V(S1, π1) = 1},前半部分保證了當前計算的有效性,后半部分保證了上一步計算過程的有效性;由于在zk-SNARKs里,證明生成的時間比原始計算要快一些,因此,對于驗證過程進行證明是合理的;
由此可以看出, Recursive option滿足Scalable zk-SNARKs了基本要求:
1. Key的生成和循環次數沒有關系,取決于單次F的復雜度,如果是general zk-SNARKs,只取決于安全參數;
2. 證明滿足incrementally computable,每個證明都包含了在此之前所有計算的有效性;
3. 證明的大小固定,和迭遞歸次數t沒有關系;
由上可知,Scalable zk-SNARKs采用了Recursive思想,即當前的Prove過程包含上一步的驗證過程電路,具體如下圖所示:
可以看到,P2證明電路里,包含了上一步P1的驗證過程電路,需要注意的是,P1對應的V在域Fq上,P2的證明過程在Fr上,如何在Fr上表示V的算術電路,是一個值得探討的過程;由于Cv可以看作是P的一個子電路,因此,q需要滿足 q = #E(Fr)或者 q 整除 #E(Fr),即q 整除rk – 1,因此:
嘗試1. 理想的情況下,如果 r = q,那么在Fr上,能完美表示Fq上的V的算術電路,但是根據上述原理,r != q恒成立;
嘗試2. 對于q != r,因為需要在Fr上去模擬Fq上的計算,會導致計算復雜度的提高log(r)倍;
嘗試3. 采用橢圓曲線循環(cycle of elliptic curves),可以完美實現Recursive過程;
具體的,選取兩個大素數,r和q,滿足r = #E(Fq)和q = #E(Fr),即,當前群的域等于另外一個群的階,反之亦然。因此,域Fq上的證明方P可以完美的在Fq上實現Fr上的驗證電路,域Fr上的證明方P也可以在Fr上實現Fq上的驗證電路;因此不會出現嘗試2里面的缺陷。
下面表格列舉常用的cycle of elliptic curves(https://eprint.iacr.org/2014/595.pdf)
寫在最后
通過采用遞歸證明組合密碼技術(Recursive Proof Composition),zk-SNARKS變成了Scalable zk-SNARKs,實現了更高效、簡潔的零知識證明算法,并能真實的落地應用。即將發布主網的Mina就采用了這種技術實現了簡潔的區塊鏈,即固定大小的鏈,保持在22KB左右;同時,其他的技術團隊包括Matter Labs、starkWare等也在計劃采用Scalable zk-SNARKs技術來實現Layer2更高的擴容。ZKSwap團隊在Layer2賽道上持續發力,在Scalable zk-SNARKs上亦有所突破,相信不久就會應用于新的版本上,