搜尋
首頁網路3.0零知識證明的先進形式化驗證:如何驗證一條 ZK 指令

為了深入理解形式化驗證技術是如何應用於 zkVM(零知識虛擬機器)之上的,本文將聚焦於單一指令的驗證。關於 ZKP(零知識證明)先進形式化驗證的整體情況,請查閱我們同期發布的「零知識證明區塊鏈的先進形式化驗證」文章。

什麼是 ZK 指令的驗證?

zkVM(零知識虛擬機)能夠創建簡短的證明對象,以作為證據來證明特定程式可以在某些輸入上運行、並成功終止。在 Web3.0 領域,zkVM 的應用使得吞吐量變高,這是因為 L1 節點只需要驗證智能合約從輸入態到輸出態轉變過程的簡短證明,而實際的合約程式碼執行則可以在鏈下完成。

zkVM 證明器首先會執行程式以產生每一步的執行記錄,然後將執行記錄的資料轉換為一組數字表格(該過程稱為「算術化」)。這些數之間必須滿足一組約束(即電路),其中包括了具體表單元格之間的聯繫方程式、固定的常數、表間的資料庫查找約束,以及每對相鄰表行間所需要滿足的多項式方程式(亦即「門」)。鏈上驗證可以由此確認的確存在某張能滿足所有限制的表,同時又保證不會看到表中的具體數字。

每個 VM 指令的執行都面臨許多這樣的約束,這裡我們將 VM 指令的這組約束簡稱為它的「ZK 指令」。下面是用 Rust 語言編寫的一個 zkWasm 記憶體載入指令約束的範例。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

ZK 指令的形式化驗證是透過對這些程式碼進行形式化推理來完成的,我們首先將其翻譯成形式化語言。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

即使只有單一限制包含錯誤,攻擊者都因此而有可能提交惡意的 ZK 證明。惡意證明所對應的資料表格並不對應智能合約的合法運作。與以太坊等非 ZK 鏈不同,後者有許多節點運行不同的 EVM(以太坊虛擬機)實現,從而不太可能在同時同地出現相同的錯誤,一個 zkVM 鏈則只有單一的 VM 實現。單就這個角度而言,ZK 鏈比傳統的 Web3.0 系統更為脆弱。

更糟的是,和非ZK 鏈不一樣,由於zkVM 交易的計算細節並沒有被提交並儲存在鏈上,在攻擊發生後,不僅是要發現攻擊的具體細節非常困難,甚至要辨識攻擊本身也會變得極具挑戰性。

zkVM 系統需要極為嚴格的檢視,不幸的是,zkVM 電路的正確性很難保證。

ZK 指令的驗證為何很難?

VM(虛擬機器)是 Web3.0 系統架構中最複雜的部分之一。智慧合約的強大功能是支撐 Web3.0 能力的核心,其力量源自於底層的 VM,它們既靈活又複雜:為了完成通用運算和儲存任務,這些 VM 必須能夠支援眾多的指令和狀態。例如,EVM 的 geth 實作需要超過 7500 行 Go 語言程式碼。類似的,約束這些指令執行的 ZK 電路也同樣龐大且複雜。像在 zkWasm 專案中,ZK 電路的實作需要超過 6000 行 Rust 程式碼。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

zkWasm 電路架構

與專為特定應用(如私人支付)設計的ZK 系統中使用的專用ZK 電路相比,zkVM 電路的規模要大得多:其約束規則的數量可能比前者多出一到兩個數量級,而其算術化表格則可能包括數百列、含有數以百萬計的數位單元格。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

ZK 指令的驗證代表什麼?

我們在這裡想要去驗證 zkWasm 中的 XOR 指令的正確性。從技術上講,zkWasm 的執行表對應一個合法的 Wasm VM 執行序列。所以宏觀來看,我們想要驗證的是:每次執行這條指令總是會產生一個新的合法的zkVM 狀態:表中的每一行都對應VM 的一個合法狀態,而緊接著的一行則總是要透過執行對應的VM 指令來產生。下圖為 XOR 指令正確性的形式化定理。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

這裡「state_rel i st」表示狀態「st」是步驟「i」中智能合約的合法 zkVM 狀態。正如你可能猜測的那樣,要證明「state_rel (i 1) …」不是輕而易舉的。

如何驗證 ZK 指令?

儘管XOR 指令的計算語意很簡單,就是計算兩個整數的位元異或(bitwise xor)並傳回整數結果,但它所涉及的面向卻比較多:首先,它需要從棧記憶體中取出兩個整數,進行異或計算,然後將這個計算得出的新整數存回同一個堆疊。此外,此指令的執行步驟應融入整個智慧合約的執行流程中,且其執行順序及時機必須正確。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

因此,XOR 指令的執行效果應該是從資料堆疊中彈出兩個數,壓入它們的XOR 結果,同時增加程式計數器,以指向智慧合約的下一指令。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

不難看出,這裡的正確性屬性定義總體上與我們在驗證傳統字節碼VM(例如以太坊L1 節點中的EVM 解釋器)的時候所面對的情況非常相似。它依賴機器狀態(這裡指棧記憶體和執行流)的高階抽象定義,以及關於每個指令預期行為的定義(這裡指算術邏輯)。

然而,如我們下面所將要看到的,由於 ZKP 和 zkVM 的特殊性,其正確性的驗證過程經常與常規 VM 的驗證很不一樣。光是驗證我們這裡的單一指令,就要依賴zkWASM 中很多表的正確性:其中有一張用於限制數值大小的範圍表,一張用於二進位位計算中間結果的位表(bit table),一張每行都儲存恆定大小的VM 狀態的執行表(類似物理CPU 中的暫存器和鎖存器中的資料),以及代表動態可變大小的VM 狀態(記憶體、資料堆疊和呼叫堆疊)的記憶體表和跳轉表。

第一步:堆疊記憶體

與傳統VM 類似,我們需要確保指令的兩個整數參數可以從堆疊中讀取,並且其異或結果值被正確地寫回堆疊。堆疊的形式化表述看起來也相當熟悉(還有全域記憶體和堆疊內存,但 XOR 指令不使用它們)。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

zkVM 使用一種複雜的方案來表示動態數據,這是因為 ZK 證明器並不能原生支援像堆疊或陣列這樣的資料結構。相反的,對於壓入堆疊的每個數值,記憶體表用單獨的一行來記錄,其中的某些列則用於指示該表項的生效時間。當然,這些表的資料可以被攻擊者所控制,因此也必須加以一些約束,以確保表項真實對應於合約執行中的實際壓棧指令。這是透過精心計算程式執行過程中的壓棧次數來實現的。驗證每一條指令時,我們需要確保這個計數始終正確。此外,我們還有一系列引理,將單一指令產生的約束與實作堆疊操作的表查找和時間範圍檢查相關聯。從最頂層看,記憶體操作的計數約束定義如下。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

第二步:算術運算

與傳統 VM 類似,我們希望確保位元異或的運算正確無誤。這看起來很容易,畢竟我們的實體電腦 CPU 都能夠一次完成這個操作。

但對於 zkVM 來說,這實際上並不簡單。 ZK 證明器原生支援的唯二算術指令是加法和乘法。為了進行二進位位元運算,VM 使用了一個相當複雜的方案,其中一張表存放固定的位元組級運算結果,另一張表則充當「草稿本」,用以在多個表行上展示如何將64 位數分解為8 個字節,然後再重新組合出結果。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

zkWasm 位元表規範的片段

在傳統的程式語言中非常簡單的異或運算,在這裡則需要很多引理來驗證這些輔助表的正確性。對於我們的指令,我們有:

零知识证明的先进形式化验证:如何验证一条 ZK 指令

第三步:執行流程

與傳統 VM 類似,我們需要確保程式計數器的數值正確更新。對於像 XOR 這樣的順序指令,每次執行步驟後,程式計數器就需要加一。

由於 zkWasm 被設計用來運行 Wasm 程式碼,因此也要確保在整個執行過程中,Wasm 記憶體的不變性質始終保持不變。

傳統的程式語言對布林值、8 位元整數、64 位元整數等資料型別有原生支持,但在ZK 電路中,變數始終是在大素數(≈ 2254)模下的整數範圍內變化。由於 VM 通常以 64 位數運行,電路開發者需要使用一套約束系統來確保它們具有正確的數值範圍,而形式化驗證工程師則需要在整個驗證過程中追蹤關於這些範圍的不變性質。執行流程和執行表的推理會涉及到所有的其他輔助表,因此我們需要檢查所有表格資料的範圍是否正確。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

類似於記憶體運算元管理的情形,zkVM 需要一組類似的引理來驗證控制流。具體而言,每個呼叫和返回指令都需要使用呼叫棧。呼叫棧使用與資料棧類似的表方案來實作。對於 XOR 指令,我們並不需要修改呼叫堆疊;但在驗證整個指令時,仍然需要追蹤並驗證控制流程操作計數是否正確。

零知识证明的先进形式化验证:如何验证一条 ZK 指令驗證這條指令

讓我們將所有步驟整合起來,驗證 zkWasm XOR 指令的端對端正確性定理。以下驗證是在互動式證明環境中完成的,其中每一個形式化構造和邏輯推理步驟都經過了最嚴格的機器檢查。

零知识证明的先进形式化验证:如何验证一条 ZK 指令

如上所見,形式化驗證 zkVM 電路是可行的。但這是一項艱鉅的任務,需要理解和追蹤許多複雜的不變性質。這反映了被驗證軟體本身的複雜性:驗證中所涉及的每一條引理都需要得到電路開發者的正確處理。鑑於其中的風險很高,讓它們由形式化驗證系統進行機器檢驗,而不是僅僅依靠小心謹慎的人工審查,是非常有價值的。

以上是零知識證明的先進形式化驗證:如何驗證一條 ZK 指令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:ChainCatcher。如有侵權,請聯絡admin@php.cn刪除
從雪花廣場到$ 0.1?北極Pablo的預售變成了市場的話題 - 同時Pepe Coin和Ski面具狗的進度從雪花廣場到$ 0.1?北極Pablo的預售變成了市場的話題 - 同時Pepe Coin和Ski面具狗的進度May 02, 2025 am 11:20 AM

北極帕勃羅硬幣(APC)是今天的核心,這要歸功於其開創性的預售結構和令人垂涎的回歸潛力。

CELESTIA:模塊化區塊鏈徹底改變了加密世界CELESTIA:模塊化區塊鏈徹底改變了加密世界May 02, 2025 am 11:18 AM

在復雜的加密貨幣世界中

Stellar(XLM)已經擺脫了下降趨勢,現在正在進入向上合併的階段Stellar(XLM)已經擺脫了下降趨勢,現在正在進入向上合併的階段May 02, 2025 am 11:16 AM

經過數月的向下壓力,XLM終於擺脫了其宏觀下降趨勢,現在進入了向上鞏固的階段。

比特幣[BTC]短期持有人一直在獲利比特幣[BTC]短期持有人一直在獲利May 02, 2025 am 11:14 AM

在過去的一周中,比特幣[BTC]取得了巨大的收益。最近的收益意味著大多數短期持有人(STH)都在盈利的利潤率之內

DN Miner推出創新的雲採礦服務,使用比特幣(BTC)推出Dogecoin(Doge)採礦機,用戶每天最多可賺取$ 8,0000DN Miner推出創新的雲採礦服務,使用比特幣(BTC)推出Dogecoin(Doge)採礦機,用戶每天最多可賺取$ 8,0000May 02, 2025 am 11:12 AM

DN Miner擁有強大的技術支持和專業團隊,以確保採礦過程的效率和穩定性。

人的失去硬盤持有加密貨幣的命運值得國王的贖金人的失去硬盤持有加密貨幣的命運值得國王的贖金May 02, 2025 am 11:08 AM

倫敦人多年來尋求一個耗資8億美元的含比特幣的硬盤驅動器隱藏在威爾士垃圾填埋場某個地方的,現在已獲得了跨平台紀錄片系列的許可。

在潛在的突破之前,狗幣(Doge)鯨魚積累了100m硬幣在潛在的突破之前,狗幣(Doge)鯨魚積累了100m硬幣May 02, 2025 am 11:06 AM

Dogecoin目前的交易範圍很高,鞏固了高於0.16美元的支持水平,並努力超越0.19美元 - 0.20美元的電阻區。這個合併階段是隨著更廣泛的加密市場顯示出強度並更新的跡象而到來的

標題:WorldCoin(WLD)將其生物特徵識別驗證系統和加密貨幣擴展到美國標題:WorldCoin(WLD)將其生物特徵識別驗證系統和加密貨幣擴展到美國May 02, 2025 am 11:04 AM

備受爭議的加密項目WorldCoin(WLD)在美國啟動了其生物識別身份驗證系統和WLD加密貨幣,擴展到六個主要城市。

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。