零知識證明範式:什麼是zkVM

作者:Lita Foundation,翻譯:金財經xiaozou

“在未來5年內,我們將像談論區塊鏈協議的應用一樣談論零知識協議的應用。過去幾年的突破所釋放的潛力將席捲加密主流。”

— Espresso Systems CSO Jill,2021年5月

自2021年以來,零知識證明(ZK)格局已經演變成一個由跨多個領域的原語、網路和應用程式組成的多樣化生態系統。然而,儘管ZK正在逐漸發展,ZK驅動的rollup(如Starknet和zkSync Era)的推出標誌著該領域的最新進展,但對於ZK用戶和整個加密領域來說,ZK的絕大部分仍然是一個謎。

但時代在變。我們認為,零知識加密是一種強大的、普適工具,可用於擴充以及保護軟體安全。簡單地說,ZK是加密大規模採用的橋樑。再次引用Jill的話,無論是web2還是web3,任何涉及到零知識證明(ZKP)的東西都將創造出巨大的價值(包括基礎價值和投機價值)。加密領域最優秀的人才正在努力更新迭代,讓ZK經濟可行、生產就緒。即便如此,在我們設想的模式成為現實之前,產業需要做的事還有很多。

將ZK採用與比特幣採用進行比較,比特幣從邊緣愛好者論壇的互聯網貨幣演變為貝萊德(BlackRock)批准的“數位黃金”的一個原因是,開發者和社區創作內容的激增,培養了人們的興趣。就目前而言,ZK存在於氣泡中的氣泡中。訊息是分散極化的,文章裡要么充斥著晦澀難懂的術語,要么過於外行,除了重複使用的例子之外,沒有傳達任何有意義的信息。似乎所有人(專家和外行人)都知道什麼是零知識證明,但沒有人能描述它實際上是如何運作的。

作為貢獻於零知識範式的團隊之一,我們希望揭開我們工作的神秘面紗,幫助更廣泛的受眾建立理解和分析ZK系統和應用程式的規範基礎,以推動相關各方之間的教育宣傳和討論,使相關訊息得以傳播擴散。

本中,我們將介紹零知識證明與零知識虛擬機的基礎知識,對zkVM的運作過程進行高階的總結,最後對zkVM的評估標準進行分析。

1、零知識證明基礎知識

什麼是零知識證明(ZKP)?

簡而言之,ZKP使一方(prover證明者)能夠向另一方(verifier驗證者)證明他們知道某事物,但無需透露該事物的具體內容或任何其他資訊。更具體地說,ZKP證明了對一段數據或對計算結果的認知,而不透露該數據或輸入內容。創建零知識證明的過程涉及一系列數學模型,將計算結果轉換為證明程式碼成功執行的在其他情況下無意義的信息,這些信息將於稍後被驗證。

在某些情況下,驗證經過多輪代數轉換和密碼學建構的證明所需的工作量比運行計算所需的工作量要少。正是這種安全性和可擴展性的獨特組合使零知識加密成為如此強大的工具。

zkSNARK:零知識簡潔非互動式知識論證

· 依賴初始(受信或不受信)設定程序來建立用於驗證的參數

· 要求證明者和驗證者之間至少有一次交互

· 證明較小,易於驗證

· 像zkSync、Scroll和Linea這樣的rollup使用基於SNARK的證明

zkSTARK:零知識可擴展透明知識論證‍

· 無需受信設置

· 透過使用可公開驗證的隨機性來創建無需信任的可驗證系統,即產生可證明的隨機參數來進行證明和驗證,從而提供高透明度。

· 高度可擴展,因為它們可以快速(並非總是)生成和驗證證明,即使底層見證(數據)很大。

· 證明者和驗證者之間不需要交互

· 代價是STARK會產生更大的證明,這比SNARK更難驗證。

· 證明比一些zkSNARK證明更難驗證,但相對於其他證明更容易驗證。

· Starknet和zkVM(如Lita、Risc Zero和Succinct Labs)都使用STARK。

(注意:Succinct bridge使用SNARK,但SP1是基於STARK的協定)

值得注意的是,所有的STARK都是SNARK,但並非所有的SNARK都是STARK。

2.什麼是zkVM?

虛擬機器(VM)是運行程式的程式。在上下文中,zkVM是一種虛擬計算機,它被實作為產生零知識證明的系統、通用電路或工具,用於為任何程式或計算產生zkVM。

zkVM不要求學習複雜的數學和密碼學來設計和編碼ZK,讓任何開發人員都可以執行用他們喜歡的語言編寫的程式並產生ZKP(零知識證明),從而更容易與零知識整合和互動。從廣義上講,大多數zkVM都意味著包括附加到執行程式的虛擬機器的編譯器工具鍊和證明系統,而不僅僅是虛擬機器本身。下面,我們總結了zkVM的主要元件及其功能:

每個元件的設計和實作都由zkVM的證明(SNARKs或STARKs)和指令集架構(ISA)的選擇來控制。傳統上,ISA指定了CPU的能力(資料類型、暫存器、記憶體等)以及CPU在執行程式時執行的操作順序。在上下文中,ISA確定可由VM解釋和執行的機器碼。選擇ISA可以在zkVM的可訪問性和可用性,以及證明生成過程的速度和效率方面產生根本性的差異,並支援任何zkVM的建置。

以下是一些zkVM及其元件的範例,僅供參考。

kBm5YgAaZ4AelksR5oYim44ZIdgF5t2ancnq2Ms6.png

現在,我們將重點放在每個組件之間的高層交互,以便在後面的文章中提供一個框架,用於理解代數和加密過程以及zkVM的設計權衡。

3.抽象的zkVM流程

下圖是一個抽象的、一般化的zkVM流程圖,當程式在zkVM元件之間移動時,進行格式(輸入/輸出)的分割和分類。

JHF2pV9jyhlk4EBJzidohWO9Blj12f9EnYcktbus.png

zkVM的流程一般如下:

(1)編譯階段

編譯器首先將使用傳統語言(C、C++、Rust、Solidity)編寫的程式編譯成機器碼。機器碼的格式由所選的ISA決定。

(2)VM階段

VM執行機器碼並產生執行跟踪,這是底層程式的系列步驟。它的格式由演算法的選擇和多項式約束集來決定。常見的演算法方案包括Groth16中的R1CS、halo2中的PLONKish演算法以及plonky2和plonky3中​​的AIR。

(3)驗證階段

證明者接收追蹤並將其表示為一組受一組約束限制的多項式,本質上是透過數學映射事實將計算轉換為代數。

證明者使用多項式承諾方案(PCS)提交這些多項式。承諾方案是一個協議,它允許證明者創建一些資料X的指紋,這被稱為對X的承諾,然後使用對X的承諾來證明關於X的事實而同時不洩露X的內容。 PCS就是指紋,計算限制的「預處理」簡明版本。這允許證明者使用驗證者在接下來的步驟中提出的隨機值來證明有關計算的事實,現在用多項式方程式來表示。

證明者運行一個多項式交互Oracle證明(PIOP)來證明所提交的多項式代表了滿足給定約束條件的執行軌跡。 PIOP是一個互動式證明協議,其中證明者向多項式發送承諾,驗證者用隨機字段值響應,證明者提供對多項式的評估,類似於使用隨機值“求解”多項式方程式以概率方式來說服驗證者。

Fiat-Shamir啟發式的應用;證明者以非互動模式運行PIOP,在這種模式下,驗證者的行為僅限於發送匿名隨機挑戰點。在密碼學中,Fiat-Shamir啟發式將互動式知識證明轉換為用於驗證的數位簽章。這一步加密了證明並使其成為零知識證明。

證明者必須說服驗證者,關於它發送給驗證者的多項式承諾,聲稱的多項式評估是正確的。為了做到這一點,證明者產生一個「evaluation」或「opening」證明,由多項式承諾方案(指紋)提供。

(4)驗證者階段

驗證者透過遵循證明系統的驗證協議來檢查證明,要么使用約束,要么使用承諾。驗證者根據證明的有效性接受或拒絕結果。

總之,zkVM證明可以證明,對於給定的程式、給定的結果和給定的初始條件,存在一些輸入,使程式從給定的初始條件執行產生給定的結果。我們可以將該語句與流程結合起來,得到關於zkVM的以下描述。

zkVM證明將證明,對於給定的VM程式和給定的輸出,存在一些輸入,導致給定的程式在VM上執行時產生給定的輸出。

4、評估zkVM

我們評估zkVM的標準是什麼?換句話說,我們應該在什麼情況下說一個zkVM比另一個更好?實際上,答案取決於用例。

Lita的市場研究表明,對於大多數商業用例,在速度、效率和簡潔性之間,最重要的屬性要么是速度,要么是核心時間效率,這取決於應用程式。一些應用對價格敏感,希望將證明過程優化為低能耗和低成本的,對於這些應用而言,核心時間效率可能是最重要的最佳化指標。其他應用程序,特別是金融或交易相關的應用程序,對延遲非常敏感,需要優化速度。

大多數公開的效能比較只關注速度,速度當然很重要,但卻不是效能的全面衡量。還有一些重要的屬性可以衡量zkVM的可靠性,其中大多數都達不到生產標準,即使是市場領先的老牌企業。

我們建議依照以下標準對zkVM進行評估,並將其分為兩小類:

VqT2n1vLhtbQmVn6y16mp6fOac7KQ​​fQ6Hzu2qjwH.png

基線:用於度量zkVM的可靠性

· 正確性

· 安全性

· 信任假設

性能:用於衡量zkVM的能力

· 效率

· 速度

· 簡潔性

(1)基線:正確性、安全性和信任假設

在評估關鍵任務應用程式的zkVM時,應該將正確性和安全性作為基準。需要有足夠的理由對正確性有信心,並且需要有足夠強的聲明安全性。此外,對於應用程式來說,信任假設需要足夠弱。

如果沒有這些屬性,zkVM對應用程式來說可能比毫無用處更糟糕,因為它可能無法按照指定的方式執行,並使用戶暴露於駭客攻擊和漏洞攻擊之下。

正確性

· VM必須如預期執行計算

· 證明系統必須滿足其聲稱的安全屬性

正確性包含三大屬性:

· 穩健性:證明系統是真實的,因此它所證明的一切都是真的。驗證者拒絕接受虛假陳述的證據,只接受輸入產生實際計算結果的計算結果。

· 完備性:證明系統是完備的,能夠證明所有的真實陳述。如果證明者聲稱它可以證明計算的結果,它必須能夠產生驗證者可接受的證明。

· 零知識證明:與知道結果本身相比,擁有一個證明並不能揭示更多關於計算輸入的資訊。

你可能擁有完整性而沒有穩健性,如果證明製度證明了包括虛假陳述在內的一切,顯然它是完備的,但並不健全。而你也可能擁有健全性但沒有完整性,如果證明系統證明​​了一個程序的存在,但不能證明計算,顯然它是健全的(畢竟,它從來沒有證明過任何虛假陳述),但不是完整的。

安全性

· 與可靠性、完整性和零知識證明的公差有關

在實踐中,所有三個正確性屬性都具有非零公差。這意味著所有的證明都是對正確性的統計機率,而不是絕對的確定性。公差是指一個屬性失效的最大可容忍機率。零公差當然是理想的,但是在實踐中,zkVM並沒有在所有這些屬性上實現零公差。完美的穩健性和完備性似乎與簡潔性並不相容,並且沒有已知的方法可以實現完美的零知識證明。衡量安全性的常用方法是以安全性bit為單位,其中1 / (2^n)的公差稱為n bit安全性。 bit越高,安全性越好。

如果一個zkVM是完全正確的,這並不一定意味著它是可靠的。正確性僅意味著zkVM滿足其聲稱的公差範圍內的安全屬性。這並不意味著所聲稱的公差低到足以進入市場。此外,如果zkVM夠安全,也不代表它是正確的,安全性指的是聲稱的公差,而不是實際實現的公差。只有當zkVM既完全正確又足夠安全時,才能說zkVM在聲稱的公差範圍內是可靠的。

信任假設

· 假設證明者和驗證者的誠實性,以得出zkVM可靠運作的結論。

當zkVM具有信任假設時,通常採用可信任設定過程的形式。在使用該證明系統產生第一個證明之前,ZK證明系統的設定過程將運行一次,以產生一些稱為「設定資料」的資訊。在可信任設定過程中,一個或多個個體產生一些隨機性,這些隨機性被合併到設定資料中,並且需要假設這些個體中至少有一個刪除了他們合併到設定資料中的隨機性。

實務上有兩種常見的信任假設模型。

「誠實的大多數」信任假設表明,人數為N的一組人中,超過一半的人在與系統的某些特定交互中表現是誠實的,這是區塊鏈常用的信任假設。

「1 / N」信任假設表明,在人數為N的一組人中,這些人中至少有一個人在與系統的某些特定交互中表現為誠實的,這是基於MPC的工具和應用程序通常使用的信任假設。

一般認為,在其他條件相同的情況下,沒有信任假設的zkVM比需要信任假設的zkVM更安全。

(2)zkVM三難困境:zkVM中速度、效率與簡潔性的平衡

9o0f7GPLNhZhjTlfyOmOcoXZvgbWjH5qf7L2Nk04.png

速度、效率和簡潔性都是可擴展的屬性。所有這些因素都會增加zkVM的最終用戶成本。如何在評估中對它們進行權衡取決於應用程式。通常,最快的解決方案並不是最有效或最簡潔的,最簡潔的解決方案並不是最快或最有效的,以此類推。在解釋它們之間的關係之前,讓我們先定義一下各個屬性。

速度

· 證明者產生證明的速度有多快

· 以掛鐘時間計算,即計算從開始到結束所經過的時間

應該根據具體的測試程序、輸入和系統來定義和衡量速度,以確保可以對速度進行定量評估。這個指標對於延遲敏感類別的應用程式來說是至關重要的,在這些應用程式中,證明的及時可用性是必不可少的,但是它也帶來了更高的開銷和更大的證明。

效率

· 證明者消耗的資源,越少越好。

· 近似於使用者時間,即程式碼所花費的電腦時間。

證明者消耗兩種資源:核心時間和空間。因此,效率可以細分為核心時間效率和空間效率。

核心時間效率:prover跨所有核心運行的平均時間乘以運行prover的核心數。

對單核心prover來說,核心時間消耗和速度是一回事。對於在多核心系統上以多核心模式運作的多核心功能prover來說,核心時間消耗和速度不是一回事。如果一個程式在5秒內就充分利用了5個核心或線程,那麼這將是25秒的使用者時間和5秒的掛鐘時間。

空間效率:指已使用的儲存容量,如RAM。

將使用者時間作為運行計算所消耗的能量的代理是非常有趣的。在幾乎所有核心​​都被充分利用的情況下,CPU的能量消耗應該保持相對恆定。在這種情況下,一個受CPU限制的、主要是用戶模式的程式碼執行所花費的用戶時間應該大致與程式碼執行所消耗的瓦時(即能量)成線性比例。

從任何具有足夠規模的證明操作的角度來看,節約能源消耗或計算資源的使用應該是一個有趣的問題,因為證明的能源費用(或雲端運算費用)是相當大的操作成本。由於這些原因,用戶時間是一個有趣的衡量標準。較低的證明成本允許服務提供者將較低的證明價格傳遞給成本敏感型客戶。

這兩種效率都與證明過程的能量消耗和證明過程所使用的資金量有關,而資金量又與證明的財務成本有關。為了使衡量效率的定義可操作,定義必須與一個或多個測試程序、每個程序的一個或多個測試輸入以及一個或多個測試系統相關。

簡潔性

· 產生的證明的大小和驗證它們的複雜性

簡潔性是三個不同指標的組合,依證明驗證的複雜度進一步細分為:

· 證明大小:證明的物理大小,通常以千位元組為單位。

· 證明驗證時間:驗證證明所需的時間。

· 證明驗證空間:證明驗證時的記憶體使用量。

驗證通常是單核心操作,因此在此情境中,速度和核心時間效率通常是一回事。與速度和效率一樣,簡潔性的定義需要指定測試程序、測試輸入和測試系統。

定義了每個效能屬性後,我們將示範最佳化一個屬性而非其他屬性所產生的影響。

· 速度:快速的證明產生導致證明更大,但證明驗證速度較慢。產生證明消耗的資源越多,效率越低。

· 簡潔性:Prover需要更多的時間來壓縮證明。但證明驗證速度很快。證明越簡潔,計算開銷越高。

· 效率:最大限度地減少資源使用,將減緩證明產生的速度,降低證明的簡潔性。

一般來說,針對一方面進行最佳化意味著另一方面無法最佳化,因此需要進行多維分析,以便在逐個案例的基礎上選擇最佳解決方案。

在評估中對這些屬性進行權衡的一個好方法可能是為每個屬性定義可接受的程度,然後確定哪些屬性是最重要的。應該對最重要的屬性進行最佳化,同時在所有其他屬性上保持足夠好的水平。

以下我們總結了各屬性及其關鍵考量:

kjmX8XxHqVk3kvOqLOxplqZeAY1PcgYQBzmucm6h.png

Total
0
Shares
Related Posts