其實我也不知道從哪裡收到的消息,總之有兩篇 a16z 的文章就殺入了我的瀏覽器分頁,主要就是討論 Lasso 和 Jolt 這兩個新興方案。這兩個方案是 Lookup 技術的實現,因此這篇文就來了解一下這兩個方案。
旅途的開始
如果要介紹 Lasso 和 Jolt,好像很難不去介紹 Lookup,而如果要講 Lookup,又感覺需要講為什麼需要 Lookup,而這樣就要講一下零知識證明……那麼,我們就一層層撥開吧。
首先,我想先假設你是知道零知識證明的,簡單而言:
零知識證明的目的是讓證明者說服驗證者他知道某個知識,而不需提出這個知識。由於簡潔證明系統的存在,在區塊鏈當中也被用來增進效率。
如果你看不太懂這段,一種可能是我的表達能力太差,另一種可能則是這篇文章所要求的背景知識有點太多,後者可以在去看看更多入門文章後解決,前者的話……也許你可以直接跳到後面的參考資料。
所謂「零知識證明系統可以幫助區塊鏈系統增進效率」,簡單的概念是由於零知識證明系統的簡潔性,我們可以讓驗證者的執行成本小於直接驗證的成本。舉例來說,如果驗證者要驗證 1000 個計算,那麼直覺的想法就是直接執行這 1000 個計算,而透過簡潔證明系統,也許可以降低到 100 個等等。
而除了簡潔性,零知識的特性也使區塊鏈可以獲得某種程度上的隱私。因此我們可說零知識證明是近年區塊鏈發展的重要方向。
零知識證明遇到什麼問題
我想大部分的人都已經相當熟悉「電腦世界是 0 與 1 組成」這句話。然而,密碼學並不完全是電腦世界的東西,在密碼學中,數學的概念如群、環、體等等才是組成的要素。零知識證明作為密碼學技術,自然也是由各種數學構成的。
於是問題便產生了,我們習慣的電腦世界是 0 與 1 構成的,在我們使用的程式背後,是無數的位元運算。而位元運算到了密碼學的世界,往往不是這麼容易處理。可以想像一個場景:1024 位元的 XOR 對於電腦世界可以視為一個運算,但到了密碼學的世界,我們需要把 1024 個位元去逐個視為單一個元素,因此變成 1024 個運算。倘若每個電腦世界的運算都要這樣處理,而密碼學的運算又相對昂貴,便使零知識證明的應用受到成本的限制。
註:坦白說我不是很確定這樣講對不對。
不想算的話,查表就好了吧
就像我們小時候都背過 99 乘法表,Lookup 技術的目的就是替零知識證明應用建立這種表格。證明者可以對一個大向量(Vector)提出承諾,接著證明這個大向量的所有元素(Entry)都在一個預先制定的表格中。如果這表格代表著某些(在零知識證明系統中的)昂貴運算,那就可以用一個查表運算取代這些計算的成本。
關於 Lookup 的重要性,這篇文章中 有這樣一段話:
If we can efficiently define circuits using lookup arguments only it will lead to simpler tooling and circuits.(如果我們能只用 Lookup Arguments 來定義電路,那將導致更簡單的工具與電路。)
所以 Lasso 與 Jolt 做了什麼?
由於篇幅(我的腦力)有限,具體的數學計算就不深入了。首先,Lasso 是一個新的 Lookup 技術方案。為了說明他的特性,我們需要再稍微展開 Lookup。前面提到,Lookup 的目的是讓我們可以用查表代替計算,因此這張表格就顯得格外重要。
在 Lasso 之前,通常的作法是直接將我們需要的東西塞進表格。而 Lasso 提出了「Structured Table」的概念。過去,當證明者要使用這張表格時,他需要將這張表格也納入承諾的一部分提出,然而對於 Structured Table,我們不需要提出整張表格,而只需提出使用到的一部分,這歸功於 Structured Table 的可分解性,用不精確的類比大概是:假設我用到 9 的乘法,我不需要把整張 99 乘法表都納入承諾,只需要納入 9 的那一欄即可。
而 Jolt 則是基於 Lasso,通過 Structured Table 等等特性去模擬 CPU,對於 zk(E)VM 等等虛擬機自然是相當具吸引力。
對於非密碼學研究者而言,或許不容易理解 Lasso 的貢獻。根據 a16z 的介紹文,Lasso 挑戰了一些目前 zkSNARK 的共識。我想我在這裡單純翻譯的話應該沒什麼意義,有興趣的可以自行前往看看。
最後的胡言亂語
雖然讀研究所是在研究密碼學,甚至常常說主要看的是零知識證明的東西,結果直到這時候才開始去理解 Lookup 是什麼(即便 Plookup 這名詞早就看過很多次),不經覺得自己好廢啊。在寫這篇時也感覺到好像對很多東西不是很理解,特別是各種技法 FRI MEM 什麼的,許多都是知道名字不知道內容……加油吧。