為什麼說 zkRollup 的可行性起源於零知識證明的計算代理思想?
作者:Fox Tech CTO 林彥熹,Fox Tech 首席科學家 孟鉉濟
前言
Prover和Verifier之間的計算代理思想是零知識證明的核心內容之一,是調節證明者和驗證者工作量於複雜度之間取舍(trade-off)的工具。不同的零知識證明算法本質的不同在於不同程度的計算代理;高度的代理雖然會使驗證的計算容易,但是卻可能使得證明的複雜度高,從而導致證明耗時長,或是生成的證明大小較大;反之,低程度的代理會使得驗證者的開銷較大。
圖1: 零知識證明的計算代理程度影響
計算代理是什麼
隨著以太坊上應用和用戶的擴展,以太主網上的擁堵程度不斷提升,使用zkRollup進行Layer2的擴容成為一個很有吸引力的方案,FOX就是專注於使用FOAKS算法進行zkRollup的項目。而zkRollup的可行性,本質上在於使用的零知識證明算法的原理可行性。簡單來說,零知識證明算法實現的功能是使得證明者向驗證者證明某件事,但又不透露任何關於這件事的信息。zkRollup的構造就是利用了這個性質,使得Layer2的節點可以執行原本在Layer1進行的計算,同時向Layer1節點提供計算正確性的證明。
從更廣義的角度來說,上述的過程我們可以理解為,由於驗證者(Layer1節點)計算能力有限,所以將這部分的計算代理給了證明者(Layer2節點)來執行,證明者完成了這個任務,需要返回結果給驗證者。從這個角度來說,我們可以說,零知識證明算法使得保障正確性的"計算代理"得以實現。從宏觀上這種計算代理的例子可以表現為zkRollup這種形式的應用,具體到零知識算法當中,這種計算代理的思想也有各種應用。
本文主要介紹FOAKS使用的在Orion當中提到的Code-Switching所做的令證明者幫助驗證者執行的驗證計算過程,以及FOAKS如何應用這種技巧進行遞歸。從而減少了證明的大小以及驗證者的開銷。
為什麼需要計算代理
從系統的實用性角度來說,很多情況下計算節點的算力是有限的,或者說計算資源是很寶貴的。例如在Layer1鏈上的所有計算(包括轉帳以及合約調用)都需要經過所有節點的共識,並且用戶需要為此支付高昂的手續費。所以,在這種情況下,將本來由共識節點來處理的計算"代理出去"交給鏈下節點來完成,就是一種自然的想法,避免消耗鏈上資源。而這也正是FOX所專注的鏈下計算服務。
從密碼學理論角度來講,在GMR模型當中限定了證明者擁有無限計算能力,驗證者擁有多項式計算能力。如果驗證者也有無限能力,則零知識證明的基本性質無法滿足。所以自然地,將計算向證明者一方傾斜,讓證明者承擔更多的計算就是很多零知識證明算法設計都會考慮的問題。
當然,為了實現這一點,我們需要特別的技巧。
Code Switching
這一節介紹Orion當中使用的Code Switching技巧。Orion和FOAKS都使用了Brakedown作為多項式承諾方案,而Code Switching是在Orion當中命名的有證明者代替驗證者執行驗證計算的過程。
在《一文了解FOAKS當中的多項式承諾協議Brakedown》一文當中我們曾經介紹過,驗證者的驗證計算為以下的過程:
idxI,C0[idx]==\<0,C1[:,idx]>and EC(y0)==C0
idxI,C1[idx]==\<r0,C1[:,idx]>and EC(y1)==C1
現在如果令證明者承擔這部分計算,則證明者除了執行這些計算,還要附上證明值來證明自己的計算是正確的。
做法是將上述等式同樣寫成R1CS電路:
Statement:
EC(y0)=C0, EC(y1)=C1
idxI,C0[idx]=\<0,C1[:,idx]>and EC(y0)=C0
idxI,C1[idx]=\<r0,C1[:,idx]>and EC(y1)=C1
y=\<r1, y1>
idxI, EC(C1[:,idx]) is consistent with ROOTidx, and ROOTidx's Merkle tree proof is valid.
之後使用Virgo算法進行驗證。
FOAKS當中的計算代理
在FOAKS當中同樣使用類似的技巧完成計算代理,值得一提的是,FOAKS由于使用了Fiat-Shamir heuristic技巧實現了非交互式證明。想要了解更多,讀者可以參考《如何將交互式證明改造為非交互式?Fiat-Shamir Heuristic!》。所以FOAKS的挑戰生成和Orion所使用的Code Switching方法不同,電路當中也需要加入新的等式:
0=H(C1,R, r0,r1)
I=H(C1,R, r0,r1,c1,y1,c0,y0)
這樣之後FOAKS當中的證明者同樣生成了代理驗證者進行驗證的計算證明。而對於驗證證明的過程,FOAKS利用算法自身進行迭代,這也是FOAKS實現遞歸的關鍵內容。具體內容見《如何設計出一種精妙絕倫的證明遞歸方案》。
通過一定次數的迭代可以使得證明的大小被壓縮,從而極大降低驗證者的計算負擔以及通信複雜度。這就是FOAKS這個零知識證明方案對FOX這條zkRollup的重大意義。
結語
zkRollup中使用的零知識證明算法的計算代理程度需要被精心設計,必須恰到好處才能使其整體達到最佳效率。而FOAKS算法通過自身迭代的遞歸實現了可以調節的計算代理,是為專門為zkRollup所設計的零知識證明算法。
參考文獻
1.Orion: Xie, Tiancheng, Yupeng Zhang, and Dawn Song. "Orion: Zero knowledge proof with linear prover time." Advances in Cryptology--CRYPTO 2022: 42nd Annual International Cryptology Conference, CRYPTO 2022, Santa Barbara, CA, USA, August 15--18, 2022, Proceedings, Part IV . Cham: Springer Nature Switzerland, 2022.