比特幣行情 比特幣行情
Ctrl+D 比特幣行情
ads
首頁 > AAVE > Info

ZKP:慢霧:盤點 ZKP 主流實現方案技術特點

Author:

Time:1900/1/1 0:00:00

文章來源:慢霧

概述

在研究區塊鏈系統的工作原理時,我們需要了解各種各樣密碼學知識,比如secp256k1,它是一種曲線和非對稱簽名算法,在比特幣和以太坊系統中用于簽名和驗證賬號。比如sha256,它是一種哈希算法,用于把變長信息壓縮成定長編碼。比如base58,它可以把信息編碼轉換成可打印字符表示的字符串。比如ECDH,它是一種Diffie-Hellman密鑰交換算法,用于在P2P節點間安全交換通訊密鑰。

零知識證明也是一種密碼學算法,簡稱為ZKP或者ZK,它的特點是可以在不泄露任何其他信息的前提下證明一個命題的正確性。

ZKP最早在1985年就已經被提出,然而長期以來一直沒有找到大規模應用的場景,所以技術的發展也十分緩慢。一直到2009年比特幣誕生后,人們發現它非常適合用于解決區塊鏈中的隱私和擴展性問題,至此大量的資本和人才投入到了這項技術的開發和工程應用中。ZKP有很多實現,例如:Groth16、PlonK、STARK等,至今還沒出現真正的行業標準,本文將為大家盤點各種ZKP實現的技術特點,希望能給大家的學習研究和工程開發帶來幫助。

ZKP應用領域

1.隱私證明

Zcash可能是ZKP的第一個被廣泛使用的應用,它在比特幣源代碼的基礎上,將ZKP應用于代幣的轉移,使得交易的信息完全保密,但同時能被區塊鏈上的節點驗證。

TornadoCash是在以太坊運行的混幣器,它使用ZKP證明Merkle-Tree上的節點,用戶可以將固定金額的代幣存入資金池,然后使用ZKP生成的Proof證明自己曾經存入過資金,但不需要暴露自己存入時的交易信息。

2.?計算外包

在區塊鏈中,每個節點的計算能力有限,但借助ZKP技術,節點可以將大量的計算外包給鏈下節點,這時只需要驗證外包提交的計算結果和計算證明就可以知道計算是否正確。

zksync1.0就是一個很好的例子,它在鏈下進行以太坊代幣轉賬和交易,然后將結果提交給節點,節點通過驗證ZKP證明就可以知道它是否按照它聲明的方法進行計算。

慢霧:Nomad事件中仍有超過9500萬美元被盜資金留在3個地址中:8月2日消息,慢霧監測顯示,Nomad攻擊事件中仍有超過9500萬美元的被盜資金留在3個地址中。其中0xB5C55f76f90Cc528B2609109Ca14d8d84593590E中仍有1084枚ETH、120萬枚DAI、103枚WBTC等約800萬美元的加密資產,該地址也負責將1萬枚WETH轉移到另一地址以及將其他USDC轉移;第二個地址0x56D8B635A7C88Fd1104D23d632AF40c1C3Aac4e3目前仍有1.28萬枚ETH、1.02萬枚WETH、80萬DAI等約4700萬美元的加密資產;第三個地址0xBF293D5138a2a1BA407B43672643434C43827179在收到3866.6萬USDC后兌換為了DAI,目前有約3970萬美元的加密資產。

目前慢霧經過梳理后,無法將地址3與其他兩個地址連接起來,但這些攻擊具有相同的模式。[2022/8/2 2:53:04]

3.?數據壓縮

Filecoin運用ZKP構造了時空證明系統,能證明用戶在本地存儲了特定文件,目前已經證明存儲的文件已經達到18EiB。

Mina是另一個例子,在很多高速區塊鏈系統中,交易的數據十分龐大,系統需要保留所有的區塊以備共識協議的驗證,所以系統對硬件的要求極高,永久保存意味著區塊鏈節點將需要不斷增大磁盤空間和數據索引能力。這時候可以借助ZKP,將驗證數據壓縮,Mina通過遞歸零知識證明,將賬本壓縮到11KB,但依舊可以驗證區塊的正確性。

ZKP證明系統

證明系統是ZKP的底層算法實現,可分為交互式和非交互式兩種:

1.?交互式證明系統

交互證明系統由兩方參與,分別稱為證明者和驗證者,其中P知道某一秘密,P希望使V相信自己的確掌握這一秘密。交互證明由若干輪組成,在每一輪,P和V可能需根據從對方收到的消息和自己計算的某個結果向對方發送消息。比較典型的方式是在每輪V都向P發出一個詢問,P向V做出一個應答。所有輪執行完后,V根據P是否在每一輪對自己發出的詢問都能正確應答,決定是否接受P的證明。

慢霧:跨鏈互操作協議Nomad橋攻擊事件簡析:金色財經消息,據慢霧區消息,跨鏈互操作協議Nomad橋遭受黑客攻擊,導致資金被非預期的取出。慢霧安全團隊分析如下:

1. 在Nomad的Replica合約中,用戶可以通過send函數發起跨鏈交易,并在目標鏈上通過process函數進行執行。在進行process操作時會通過acceptableRoot檢查用戶提交的消息必須屬于是可接受的根,其會在prove中被設置。因此用戶必須提交有效的消息才可進行操作。

2. 項目方在進行Replica合約部署初始化時,先將可信根設置為0,隨后又通過update函數對可信根設置為正常非0數據。Replica合約中會通過confirmAt映射保存可信根開始生效的時間以便在acceptableRoot中檢查消息根是否有效。但在update新根時卻并未將舊的根的confirmAt設置為0,這將導致雖然合約中可信根改變了但舊的根仍然在生效狀態。

3. 因此攻擊者可以直接構造任意消息,由于未經過prove因此此消息映射返回的根是0,而項目方由于在初始化時將0設置為可信根且其并未隨著可信根的修改而失效,導致了攻擊者任意構造的消息可以正常執行,從而竊取Nomad橋的資產。

綜上,本次攻擊是由于Nomad橋Replica合約在初始化時可信根被設置為0x0,且在進行可信根修改時并未將舊根失效,導致了攻擊可以構造任意消息對橋進行資金竊取。[2022/8/2 2:52:59]

2.?非交互式證明系統

在上述交互式證明系統中,P和V不進行交互,證明由P產生后直接給V,V對證明直接進行驗證,這種證明系統稱為非交互式證明系統。

我們在區塊鏈中使用的證明系統一般都是NIZK,區塊鏈中的節點就是驗證者V,終端用戶或者二層網絡就是證明者P。

文末參考鏈接?描述了近十年來公開發表的NIZK方案及特點。

在實際工程應用中我們主要關注的是性能和通用性,因此我們對一些常見證明系統進行更細致的分類對比,見文末參考鏈接:

Bulletproofs

特點:簡潔證明大小,無需可信設置,但證明生成和驗證耗時相比較長。

慢霧:iCloud 用戶的MetaMask錢包遭遇釣魚攻擊是由于自身的安全意識不足:據官方消息,慢霧發布iCloud 用戶的MetaMask錢包遭遇釣魚攻擊簡析,首先用戶遭遇了釣魚攻擊,是由于自身的安全意識不足,泄露了iCloud賬號密碼,用戶應當承擔大部分的責任。但是從錢包產品設計的角度上分析,MetaMask iOS App 端本身就存在有安全缺陷。

MetaMask安卓端在AndroidManifest.xml中有android:allowBackup=\"false\" 來禁止應用程序被用戶和系統進行備份,從而避免備份的數據在其他設備上被恢復。

MetaMask iOS端代碼中沒有發現存在這類禁止錢包數據(如 KeyStore 文件)被系統備份的機制。默認情況下iCloud會自動備份應用數據,當iCloud賬號密碼等權限信息被惡意攻擊者獲取,攻擊者可以從目標 iCloud 里恢復 MetaMask iOS App 錢包的相關數據。

慢霧安全團隊經過實測通過 iCloud 恢復數據后再打開 MetaMask 錢包,還需要輸入驗證錢包的密碼,如果密碼的復雜度較低就會存在被破解的可能。[2022/4/18 14:31:38]

代表項目:Bulletproofs,Halo,Halo2。

SNARKs(SuccinctNon-interactiveARgumentsofKnowledge)

特點:簡潔證明大小,證明驗證耗時相比較短,但需要對每一個電路進行可信設置。

代表項目:Groth16。

SNORKs(SuccinctNon-interactiveOecumenical(Universal)aRgumentsofKnowledge)

特點:簡潔證明大小,只需要進行一次可信設置即可用于所有電路。

代表項目:Sonic,PlonK,Marlin,Plonky2。

STARKs(Succinct(Scalable)TransparentARgumentsofKnowledge)

特點:證明十分龐大,不需要進行可信設置,具有良好的可擴展性。

慢霧:警惕QANX代幣的雙花攻擊風險:據慢霧區消息,近期存在惡意用戶利用QANX代幣的轉賬鎖定、解鎖功能(transferLocked/unlock)觸發的事件記錄與正常使用transfer功能轉賬觸發的Transfer事件記錄相同而進行雙花攻擊。

慢霧安全團隊建議已上架此幣種的平臺及時自查,未上架的平臺在對接此類幣種時應注意以上風險。

QANX: 0xaaa7a10a8ee237ea61e8ac46c50a8db8bcc1baaa[2022/3/26 14:18:46]

代表項目:STARK。

以上分類也不是絕對的,比如Halo/Halo2項目,它們在設計時也借鑒了很多Plonk的思路,另外,SNORKs通常會被歸入到SNARKs,因為它們都需要可信設置。

3.性能對比

電路編程

電路是ZKP系統的業務邏輯實現,開發ZKP應用需要進行電路編程,為什么ZKP邏輯代碼被稱為“電路”?主要有以下幾個原因:

ZKP證明的代碼會被轉換成一系列簡單約束條件的表達式R1CS,然后使用拉格朗日插值法,轉換為一個巨大的多項式QAP,最終以門電路的形式被約束。

與硬件電路類似,所有分支的代碼將被一起執行。

與硬件電路類似,ZKP證明電路中沒有遞歸和復雜的循環,循環的數量只能是恒定的。

我們不需要從頭去用密碼學實現ZKP應用,有很多開發庫已經實現了這些底層證明系統,我們只需要關注業務邏輯的實現。當然每一種庫都有不同的抽象程度,有的需要去學習描述電路的表達式,有的只需要按流程定義好代碼就可以輕松實現。

1.常用開發庫

libsnark

用C++語言實現了通用證明系統、基礎電路庫和應用示例。

證明系統:BBFR15、BCCT12、BCCT13、BCGTV13、BCIOP13、BCTV14a、BCTV14b、CTV15、DFGK14、Groth16、GM17、GGPR13、PGHR13。

鏈接:https://github.com/scipr-lab/libsnark。

慢霧:跨鏈互操作協議Poly Network遭受攻擊并非由于網傳的keeper私鑰泄漏:對于跨鏈互操作協議Poly Network遭受攻擊事件,慢霧安全團隊分析指出:本次攻擊主要在于EthCrossChainData合約的keeper可由EthCrossChainManager合約進行修改,而EthCrossChainManager合約的verifyHeaderAndExecuteTx函數又可以通過_executeCrossChainTx函數執行用戶傳入的數據。因此攻擊者通過此函數傳入精心構造的數據修改了EthCrossChainData合約的keeper為攻擊者指定的地址,并非網傳的是由于keeper私鑰泄漏導致這一事件的發生。[2021/8/11 1:47:48]

gnark

用Go語言實現的證明系統,提供高級API來設計電路。

證明系統:Groth16、PlonK。

鏈接:https://github.com/consensys/gnark。

bellman

Rust實現的證明系統,它提供電路接口、基礎結構以及一些基本電路實現,例如布爾和數值抽象。

證明系統:Groth16。

鏈接:https://github.com/zkcrypto/bellman。

snarkjs

Javascript和WASM實現的證明系統,可用于可信設置、生成證明并驗證證明。snarkjs使用iden3自己的circom編譯器對DSL定義的電路進行編譯。

證明系統:Groth16、PlonK。

鏈接:https://github.com/iden3/snarkjs。

ethsnarks

使用Python實現,可以在用戶瀏覽器生成證明,使用以太坊智能合約做為驗證者。目前項目開發不活躍,相同的場景下使用Circom可能是更好的選擇。

證明系統:Groth16。

鏈接:https://github.com/HarryR/ethsnarks。

bulletproofs

使用Rust實現的證明系統,具有單一和聚合范圍證明、強類型多方計算,正在開發中用于證明任意語句的可編程約束系統API。

證明系統:bulletproofs。

鏈接:https://github.com/dalek-cryptography/bulletproofs。

halo2

一個基于Rust的實現的證明系統,由ZCash團隊維護。Halo2特定于PLONKish,可以非常直接地控制電路在算術運算中的表示方式,非常適合編寫高度優化的電路。

證明系統:Halo2。

鏈接:https://github.com/zcash/halo2。

2.開發流程

以gnark為例,一個典型的工作流程如下圖:

1)用代碼描述需要解決的問題。

2)編譯成R1CS約束系統。

3)對R1CS進行可信設置,得到Provingkey和Verifykey。

4)證明者使用R1CS和Provingkey計算私密數據,生成證明Proof。

5)驗證者使用Verifykey驗證Proof。

電路編程專用語言

1.?基于以太坊平臺

Cairo

Cairo是一種用于編寫可證明程序的編程語言,其中一方可以向另一方證明某個計算已正確執行。Cairo和類似的證明系統可用于為區塊鏈提供可擴展性。StarkNet將Cairo編程語言用于其基礎設施和編寫StarkNet合約。

證明系統:STARK。

鏈接:https://www.cairo-lang.org/docs/。

Zokrates

ZoKrates采用DSL描述電路,提供了一些常用的電路庫,它可以幫助你在DApp中使用可驗證的計算,從用高級語言規范您的程序到生成計算證明,再到在Solidity中驗證這些證明。

證明系統:GM17、Groth16、Marlin。

鏈接:https://zokrates.github.io/。

Circom

Circom語言采用DSL描述電路,可以配合snarkjs在用戶瀏覽器生成證明,使用以太坊智能合約做為驗證者。

證明系統:Groth16、PlonK。

鏈接:https://iden3.io/circom。

Noir

Aztec基于Rust的隱私編程語言,采用DSL描述電路,允許安全、無縫地構建隱私保護零知識電路。

證明系統:PlonK。

鏈接:https://noir-lang.org/index.html。

zkEVM

與EVM一樣,zkEVM是一個虛擬機,它作為程序操作的結果在狀態之間轉換,但是zkEVM通過生成證明來證明計算的每個部分的正確性。本質上,zkEVM使用一種機制來證明執行步驟遵循規則。

目前有zkSync、Polygon、Scroll、Starkware等團隊正致力于zkEVM的實現,已取得重大進展。

2.?基于公鏈平臺

zkApp(Mina)

zkApps是MinaProtocol的智能合約,由零知識證明提供支持。zkApps可以在鏈下執行任意復雜的計算,同時只收取固定費用以將生成的零知識證明發送到鏈以驗證此計算,這與其他在鏈上運行計算并使用基于可變gas費用的區塊鏈相反模型。zkApps使用Typescript編寫。

證明系統:PlonK。

鏈接:https://docs.minaprotocol.com/zkapps。

LEO(Aleo)

Leo是一種函數式靜態類型編程語言,專為編寫私有應用程序而構建。它專為開發人員設計,可以直觀地在Aleo區塊鏈上構建,為私有的、去中心化的生態系統提供基礎。

證明系統:Marlin。

鏈接:https://leo-lang.org/。

ZKP常見安全問題

在過去幾年,慢霧安全團隊已為多個知名ZKP產品進行了電路及應用安全審計,包括ZKSwap、Zkdex、Zksafe等,發現了多個中高危漏洞,對基于Circom、libsnark等流行框架開發的應用有較為深入的理解。慢霧安全團隊在ZKP應用審計中發現常見的安全問題有:

信任參數風險

為了使用zk-SNARKs,需要一組公共參數,稱為公共參考字符串。但是這些參數的創建也會產生一些私有參數,如果某一方獲得這些私有參數,他們就可以偽造證明。另外,生成CRS的流程需要經過審計,確保不會有隨機數后門,或者私有參數不會被蓄意保留。使用zk-SNORKs時也需要確保結構化參考字符串是可信的。

可信配置階段的安全隱患問題可以使用安全多方計算來解決,MPC的特點是只要任何一個參與者能誠實參與,那么通過這套多方計算系統最終得到的計算結果就是可信的。

靜態代碼安全

這部分主要是由于編碼不規范造成的安全問題,例如:參數未校驗、返回值未處理、數值溢出、邊界未檢查等,如果編寫電路的語言是C/C++,那么還會存在內存溢出風險。

供應鏈攻擊風險

供應鏈的風險主要來自使用了存在漏洞的代碼庫,例如:舊版本的倉庫。通常ZKP應用還需要配合客戶端或者Web前端使用,而這部分也很容易遭受多種方式黑客攻擊。

邏輯錯誤

邏輯錯誤是電路實現中最容易出現的錯誤,需要結合需求文檔檢查電路的設計是否符合需求。

雙花攻擊

錯誤的設計可能導致雙花攻擊,例如:某些ZKP庫存在延展性風險,攻擊者可利用已知的Proof生成不同Proof,如果設計不當會導致雙花攻擊。

證明偽造

有效的證明是ZKP首要解決的問題,確保滿足完備性和可靠性,即“假的真不了,真的假不了”,所以如果一個電路可以創建假證明,通常是由于底層庫出現漏洞,通常我們會建議項目方使用公開的經過審計的ZKP庫,并使用穩定的發行版。

側信道攻擊

如果電路設計不當,不同的隱私信息可能存在不同的計算特征,攻擊者可能通過公開的輸入或者證明猜解出私有輸入數據。

電路約束失效

不恰當的電路表達式可能導致變量未被約束。

特殊值攻擊

一些特殊的輸入值可能繞過系統的驗證邏輯,例如:0、null等。

隱私輸入猜解

對于TornadoCash等應用,如果輸入的信息可以被猜解,那么會導致嚴重的隱私泄露問題,這時需要對輸入數據進行嚴格審計,確保不能被猜解。

RugPull風險

一些項目可能存在特殊的管理員權限,一旦權限被非法使用會導致項目資金和用戶資產被竊取。

智能合約風險

一些ZKP證明使用智能合約進行驗證,例如:Circom、ZoKrates等。智能合約可能出現重入、重放、邏輯錯誤等風險,詳情可查看慢霧安全團隊的智能合約安全審計服務。

針對上面列舉的ZKP安全問題,慢霧安全團隊在攻防實戰中總結出了一套安全解決方案,結合黑盒/灰盒/白盒多種測試手段,推出了面向區塊鏈行業的ZKP電路審計服務。

總結

零知識證明是解決區塊鏈隱私性、計算擴展和數據壓縮問題的有效方法,目前有很多的實現方案,這些實現方案具有不同的性能參數指標和安全基準。開發者在開發零知識證明電路時需要注意根據需求選擇合適的框架,并確保在項目上線前對應用的安全性進行過全面安全審計。

最后,感謝領先的一站式數字資產自托管服務商Safeheron提供的專業技術建議。

參考鏈接:

.https://en.wikipedia.org/wiki/Zero-knowledge_proof

.https://github.com/matter-labs/awesome-zero-knowledge-proofs

.https://docs.google.com/presentation/d/1gfB6WZMvM9mmDKofFibIgsyYShdf0RV_Y8TLz3k1Ls0/edit

Tags:ZKPARKPROCOMZKP幣xmark幣價格Boson ProtocolKarate Combat

AAVE
GAM:GameFi 已死?詳解加密游戲全生態產業圖

作者:Fiona,IOSGVentures我們目前正處于從關注Infra到關注用戶的轉變中,究其原因:1)就如同DeFi和GameFi在過去的繁榮一樣.

1900/1/1 0:00:00
NULS:NULS 社區 EVM 兼容網絡 ENULS 將于 2 月 15 日正式啟動

作者:ENULS 當前區塊鏈生態系統發展局勢下,EVM上構建的應用場景已經是其他智能合約虛擬機難以望其項背的,使用和兼容EVM的區塊鏈也越來越多.

1900/1/1 0:00:00
SHIB:Redline DAO 熱點剖析:“Web3 好萊塢” Shibuya 將何去何從?

撰文:Baker,Redline,RedlineDAO Web2中的互動視頻 互動視頻是一種近兩年流行的新興內容媒體,它與常規視頻最大的區別是,觀眾可以在劇情給出的分叉點做出選擇.

1900/1/1 0:00:00
比特幣:晚報 |美 SEC 主席稱質押即服務提供商必須注冊;Optimism 向主網用戶二次空投

整理:flowie,ChainCatcher“過去24小時都發生了哪些重要事件”?1、美SEC主席:質押即服務提供商必須注冊.

1900/1/1 0:00:00
Maker:MakerDAO 貢獻者提議創建首個以 DAI 為核心的流動性市場 Spark Protocol

根據Maker治理論壇上發布的一項提案,MakerDAO社區參與者提議創建一個名為SparkProtocol的流動性市場,用于借貸加密資產.

1900/1/1 0:00:00
以太坊:SEC 與 Kraken 達成和解之后將重塑以太坊質押格局?

原文:《HowtheSECCouldReshapeEthereum’sStakingLandscapefortheBetter》作者:MargauxNijkerk.

1900/1/1 0:00:00
ads