ZK-Rollups:基於零知識證明的 layer 2 擴容方案

與欺詐證明[ 1 ]不同, Zk-Rollup 採用的是有效性證明,利用零知識證明確保交易的有效性,在數據上鍊前就通過零知識證明對數據進行驗證,先證明這個交易是沒有問題的,然後再把更新後的狀態,對交易的證明以及壓縮後的交易數據傳到主鏈上,以此確保對應數據在鏈上的有效性和資金的安全性。

Zk-Rollup 的安全性依賴於密碼學原理,它的一個主要優點是不需要挑戰期[ 2 ]。

目前 Zk-Rollup 的通用計算能力較差,已經上線的版本大多隻能實現轉賬和特定的應用場景,對開發人員不友好。現在有些最新的 Zk-Rollup 方案研究與通用 EVM 兼容的L2擴容方案,如果成功的話意義還是很大的。

Zk-Rollup 更符合加密世界的風格,通過密碼學原理來證明交易的正確性而不是等着別人舉報不正確的交易。

零知識證明

零知識證明是密碼學概念,也被人稱作零泄密證明,由證明者和驗證者組成。

證明者需要運行在專門的硬件上,是去信任化的,也就是說系統的安全性不需要假設證明者是值得信任的,或者說假設它們所運行的硬件是值得信任的,因爲數學上沒有辦法僞造假的零知識證明。

驗證者不需要專門的硬件,任何節點都可以運行,通俗地說,證明者從系統的輸入中創建證明,驗證者檢查確認證明者上傳的是真實的計算結果而不需要重新再計算一遍。

用一句帶有哲學意味的話來說就是,我如果想證明某個比特幣賬戶是我的,我想要證明我知道這個賬戶的私鑰,但是不能夠把私鑰告訴給別人。(私鑰簽名,公鑰驗證)    

zk-SNARK

區塊鏈中用的比較多的是 zk-SNARK,這是一種特殊的零知識證明,要求是非交互性(之前零知識證明驗證比特幣的例子就不是非交互性,要改成非交互性的話就是我發佈一個轉賬交易,把賬戶上的幣轉到另一個賬戶就可以了,這樣所有節點都可以驗證這個比特幣賬號是我的,對於區塊鏈場景來說,證明者只需要把消息發佈到區塊鏈上,所有節點都可以驗證,不需要與證明者交互,這種驗證者叫做 Public Verifier)和簡潔性(只需要幾百個字節,即使原始輸入很大,生成證明也是很小的)。    

缺點是證明者產生證明的工作量是很大的,轉賬的時候發起一個匿名的轉賬交易需要幾秒鐘的時間,而驗證這個交易的合法性只要幾毫秒。

zk-SNARK 需要進行信任設置,要求初始化時隨機產生一組所有成員共享的公共參數,初始化時用到的隨機源必須要銷燬掉,如果泄露的話安全體系就崩潰了,有惡意的攻擊者可以製造出假的證明,爲了避免這個風險,zk-SNARK 的初始化過程是多方參與的,只要其中任何一方銷燬了初始化時用到的隨機源,系統就是安全的。

zk-SNARK 在區塊鏈中的應用

    

代表性應用一個是 Zcash,另一個是 Filecoin,這兩個項目並不是L2,這裏只是用它們說明一下 zk-SNARK 的應用場景。

Zcash 用 zk-SNARK 來隱藏交易信息,交易雙方的身份和交易金額,Zcash 可以在不知道 sender.address、receive.address、iuput.value、out.value 的情況下驗證交易的合法性。這跟比特幣是很不一樣的,比特幣的每筆交易都要說明幣的來源,說明這個幣是從之前的哪個交易裏來的,這樣才能證明我們花到的這個幣是合法的,不是憑空捏造出來的。對於 Zcash 來說只要通過數學的方法證明你花掉的幣是當前系統中存在的某個合法的幣就行,不用說明具體是哪一個,這樣就沒法追蹤幣的來源了。

Filecoin 是迄今爲止部署規模最大的 zk-SNARK 網絡,每天生成幾百萬個零知識證明。Filecoin 的礦工通過存儲數據來獲得出塊獎勵,需要定期證明它們在存儲所承諾的數據,這些礦工是 zk-SNARK 協議裏的證明者,需要提供兩類證明,複製證明[ 3 ]和時空證明[ 4 ]。

複製證明只有一次,當用戶和存儲提供者最初達成存儲交易的時候,存儲提供者需要證明它們確實存儲了用戶的數據,時空證明需要定期提供,用於證明存儲提供者隨着時間的推移繼續存儲原始數據,存儲提供商首次同意爲客戶存儲數據時需要質押相應的代幣 File,如果在協議期間提供商未能提供時空證明,將會受到處罰,可能失去質押的 File 代幣。

zk-SNARK 技術的優點在於生成的證明很短,節省網絡帶寬,驗證速度快,Filecoin 並沒有實現真正意義下的隱私計算,zk-SNARK 只是用於 Filecoin 的共識機制,並沒有用於用戶數據,到目前爲止幾乎所有的 zk-SNARK 電路都是專用集成電路,也就是根據不同的應用專門定製的零知識證明技術,以太坊的智能合約是圖靈完備的,zk-SNARK 技術目前還無法實現通用智能合約。

ZK-Rollup 代表項目    

ZK Rollup 有兩個代表性的項目,zkSync 和 STARKWARE。

zkSync

zkSync 使用 zk-SNARK 的零知識算法,安全性依賴於初始化信任設置(由包括以太坊創始人V神在內的一些參與者一起制定一個隨機數,要求至少有一個參與者是誠實的,那麼這個系統纔可以被證明是安全的)。

在 EVM 兼容方面,zkSync 有一個編譯器可以把智能合約轉換成 zkEVM 支持的操作碼來實現 Solidity 兼容。  

在數據可用性上,zkSync 提供了兩種數據可用性方案,用戶可以選擇將數據上鍊(也就是存儲在L1的鏈上或者說存儲在以太坊上以獲得更高的安全性,同時需要支付比鏈下高一些的 gas 費),用戶也可以選擇將數據存儲在鏈下(可以更大限度地擴容,進一步節約 gas 費,但是會犧牲一部分去中心化和安全性)。也就是說 zkSync 同時支持鏈上,鏈下兩種數據存儲模式,有人認爲鏈下數據不是真正意義上的L2,因爲L2要保證和L1一樣的安全性,如果數據存儲在鏈下,可用性跟L1是有差別的,如果存儲在鏈下的雲服務提供商處,那麼跟去中心化的理念背道而馳,如果存在 IPFS 那樣的去中心化存儲裏,那麼仍然沒有辦法保證數據的可用性(存在 IPFS 裏跟存在以太坊上是不一樣的),以太坊比特幣這樣的區塊鏈,保存在上面的數據是不會丟失的,但是 IPFS 並不保證不可篡改性。

StarkWare

目前市場上最主流的兩種生成零知識證明的系統分別是 zk-SNARK 和 zk-STARK。

zk-Sync 採用的是 zk-SNARK,StarkWare 是基於 zk-STARK 證明的密碼學技術。zk-STARK 這項技術由 StarkWare 團隊發明,可以看作是 zk-SNARK 技術的升級版本,能夠讓區塊鏈具備更強的可擴展性,採用該算法的區塊鏈底層允許開發人員將鏈上的交易數據以及部分數據的存儲轉移到鏈下來解決,鏈下批量處理後的數據可以打包生成一個 STARK 證明,將證明發送到鏈上後可以供任何利益相關方驗證真僞。STARK 跟 zk-Sync 使用的 SNARK 相比有三個主要優勢,第一個優勢是透明性,指這個系統運行無需信任設置,而 SNARK 證明是需要進行信任設置的,使用 zk-SNARK 必須進行強制性的初始信任設置,如果初始設置的參與方是不誠實的,那麼可以創造出虛假證明僞造交易,而 zk-STARK 不需要外部的信任設置,它通過隨機公共驗證可以防止任何一方破壞或修改參數,這個優勢有多少實際價值還不清楚。(肖老師認爲這個優勢意義不大)    

第二個優勢是擴展性, StarkWare 宣稱 zk-STARK 降低了計算複雜度,生成 STARK 證明的速度比 SNARK 更快,不過這個說法有一定的爭議。

第三個優勢是抗量子攻擊,理論上說 zk-STARK 使用抗衝突的哈希函數提高了抵禦量子攻擊的能力,這個優勢意義不大。

STARK 的劣勢在於它的技術遠沒有 SNARK 成熟,普及率也不行,StarkWare 這個公司的優勢在於技術團隊極其小,包含 STARK 和 SNARK 這兩個技術的發明人,缺點就是社區生態還差得很遠,這也跟 STARK 的普及率不足有關。

另外一個問題是 EVM 的兼容性,以太坊的 EVM 是圖靈完備的,而 STARK 如果要實現圖靈完備就很難做到跟 EVM 兼容,以太坊的智能合約語言 Solidity 要轉換成 STARK 兼容的格式是很複雜的,所以說 StarkWare 團隊創建了一種特定的編程語言 Cario 來運行由 STARK 支持的程序,Cario 這種語言的學習成本比較高,而且不兼容 EVM,導致以太坊上現有的 Dapp 很難遷移過來,這也是 StarkWare 生態不容易做起來的原因之一。從另一個方面來看,採用一門全新的語言也有好處,沒有歷史包袱,可以實現一些以太坊無法做到的功能。

在數據可用性方面,StarkWare 提供了兩種數據可用性方案,StarkWare 有一個 Voluation 系統,允許用戶自主選擇每筆交易是採用鏈上數據可用的 Rollup 方案還是採用鏈下數據可用的 validium 方案。

validium 方案的數據可用性委員會由一些有聲望的加密實體組成,從數據安全性角度來講,數據存儲在鏈上是最安全的,缺點是代價比較高,適合資金量比較大,實時性要求不高的情況;數據存儲在鏈下會犧牲一定的安全性,優點是代價小,適合資金量比較小,實時性要求高的應用場景,比如說:GameFi。    

名詞解讀

欺詐證明:在分佈式系統中,欺詐證明用於檢測和糾正不正確的狀態更新,通常在 Optimistic Rollups 中使用,假設大多數操作是正確的,但提供了一種機制來挑戰和糾正錯誤的操作。

挑戰期:挑戰期是一個指定的時間窗口,允許驗證者檢查並確認狀態更新的正確性,這在確保系統的安全性和公平性方面至關重要。

複製證明:複製證明表明某個數據在某個時間點確實被存儲在指定的位置,並且複製了多份。

時空證明:時空證明是一種結合空間(存儲)和時間(持續存儲)的證明機制,表明某個數據在一段時間內持續被存儲。

結語

2021 年 1 月份,以太坊創始人V神說道:"短期內 Optimistic-Rollups 會因爲 EVM 的兼容性勝出,ZK-Rollups 更有可能在一些簡單的交易之類的用例中勝出,從中長期來看,隨着 zk-SNARK 技術的改進,ZK-Rollups 最終會贏得所有的用例。"

鏈源科技是一家專注於區塊鏈安全的公司。我們的核心工作包括區塊鏈安全研究、鏈上數據分析,以及資產和合約漏洞救援,已成功爲個人和機構追回多起被盜數字資產。同時,我們致力於爲行業機構提供項目安全分析報告、鏈上溯源和技術諮詢/支撐服務。

感謝各位的閱讀,我們會持續專注和分享區塊鏈安全內容。