DeFi security Summit 2023 - Session 12: Vulnerabilities & Exploits - Dmitry Khovratovich
三句話摘要
零知識電路編程中的常見安全漏洞與脆弱性分析。 零知識電路的 bug 往往難以察覺且後果嚴重,編程時必須對素域運算、溢位邊界、模運算陷阱保持極度警惕。 執行模型差異:ZK-Rollup 只提交執行証明而非交易本身到鏈上,節點無法看到內部執行步驟,若電路有 bug 且攻擊者生成有效証明,外界無法追蹤真實輸入,難以察覺漏洞被利用,這與以太坊直接執行交易的完全透明性完全相反。
重點整理
重點- 1
執行模型差異:ZK-Rollup 只提交執行証明而非交易本身到鏈上,節點無法看到內部執行步驟,若電路有 bug 且攻擊者生成有效証明,外界無法追蹤真實輸入,難以察覺漏洞被利用,這與以太坊直接執行交易的完全透明性完全相反。
- 2
素域運算陷阱:ZK 編程運作在模 P 的素域(P 接近但不等於 2^256),導致溢位結果與 EVM 的模 2^256 截然不同;攻擊者可精心選擇變數利用素域特性(任何非零數都可被整除)來構造無效但有效証明。
- 3
約束編程的完整性與健全性:完整性要求每個有效執行都能生成有效証明,健全性要求有效証明必對應有效執行;二者任一失敗都會導致資金損失,但完整性 bug 可能阻止正常提現,健全性 bug 則允許無效交易通過。
- 4
高風險場景:算術接近 56 位邊界需逐一範圍檢查、除法結果可能巨大、分支實現需計算所有標誌位、邊界情況(正常代碼無法達到)會被攻擊者利用、密碼學操作易誤用。
實用技巧與重點
乾貨- 主講者:Dimitri Coverturvich(ABDK Consulting、以太坊基金會密碼學家)
- 審計公司:ABDK,與 Mikhail 進行眾多 ZK 項目審計
- 關鍵數值:ZK 運算在模 P 域,P 為素數且接近(但非)2^256
- 模運算陷阱公式:a = Q × B + r,在素域中若只約束此式,攻擊者可選 Q = (a - r) / B,利用素域中任何非零數都可整除的性質。
- 幾何平均數 bug:兩個小於 256 位的數相乘可溢位,需分割成三個區塊用「教科書乘法」處理
- 模減法:需驗證 r < B(非 r ≤ B),且必須約束 r 確實小於 B
- 審計資源:ABDK 音訊資料庫記錄各 ZK 項目發現的嚴重與非嚴重 bug
結論
結論“零知識電路的 bug 往往難以察覺且後果嚴重,編程時必須對素域運算、溢位邊界、模運算陷阱保持極度警惕。”
完整解析
詳細零知識證明正在成為區塊鏈擴展的核心技術。傳統以太坊流程是交易送出→全網執行→存儲更新,而 ZK-Rollup 則改為:交易在證明者側執行、生成執行證明上傳到鏈、節點驗證證明、存儲更新。這樣可大幅降低執行成本,但驗證 ZK 證明本身仍需費用,且帶來了一個隱藏的威脅——bug 追蹤困難。
在普通區塊鏈上,漏洞被利用時整個交易執行軌跡都暴露在鏈上,所有人能看到呼叫棧與執行狀態;但在 ZK 系統中,只有最終證明被驗證,交易本身從不對外公開。若電路有漏洞且攻擊者能生成無效輸入的有效證明,外界只看到「證明有效」,卻完全看不到內部發生了什麼。這意味著資金損失時可能無法追蹤攻擊者如何利用漏洞,極大增加了安全風險。
根本問題來自編程領域的差異。ZK 電路運作在素域(模某個素數 P)而非 256 位整數域,所有運算皆模 P 進行。當算術接近 2^256 邊界時,模 P 的結果與模 2^256 的 EVM 結果迥然不同。以 4 × (2^254 + 1) 為例,在 EVM 中溢位後變成確定值,但在 ZK 中模 P 後可能是完全不同的 250+ 位數字。更危險的是,素域中任何非零數都可被任何非零數整除,這創造了攻擊空間。例如模減法約束 a = Q × B + r 時,若攻擊者可自由選擇 Q 和 r,他可計算 Q = (a - r) / B(在素域中總能整除),這樣任意 r 值都能滿足約束。
電路編程還有另一大難點:用約束關係而非順序指令。這要求電路同時滿足「完整性」(所有有效執行都能生成證明)和「健全性」(有效證明必對應有效執行)。完整性失敗會導致正常交易無法被證明、可能阻止合法提現;健全性失敗會允許虛假交易通過。
高危場景包括:範圍接近 56 位的乘法(需逐個檢查溢位)、除法操作(結果可能巨大且難預測)、分支實現(必須計算所有標誌位避免只執行部分邏輯)、邊界情況(正常代碼無法觸及的分支在電路中成為攻擊者利用點)以及密碼學操作的誤用。幾何平均數 bug 典型地體現了溢位的複雜性:計算兩個 256 位數的幾何平均值時,中間乘積會溢位,解決方案是將數字分割成三個區塊進行「教科書乘法」並驗證多個等式才能確保正確性。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

