天天看點

零知識證明zk-snark的8種實作的對比

zk-SNARK是一個快速發展的領域,僅在過去的兩個月裡,就宣布了數個突破性的zk-SNARK建構。曾經必須的可信設定現在已經是備援的了,這意味着可以使用任何計算。然而關于這些新的zk-SNARK建構的資料很難找到。在這片文章中,我将比較這些新出現的zk-SNARK建構,并在以後不定期更新。

像zk-SNARK這樣的零知識證明有很多應用:Zcash利用零知識證明來保護隐私,Coda和Mir利用零知識證明将整個區塊鍊壓縮到隻有幾K位元組,0x和Matter則利用零知識證明将許多交易封裝為以太坊

上的單一證明。如果你還不了解零知識證明,可以看一下這裡的

解釋

相關連結: 以太坊 | 比特币 EOS Tendermint Core Hyperledger Fabric Omni/USDT Ripple

1、可信設定

傳統的zk-SNARK,例如Groth16有一個主要的缺點:依賴于一個公共的參考字元串,該字元串使用一次性可信設定建立。該設定建立一個供證明方和驗證方同時使用的參考字元串。這裡面有三個主要的問題:

  • 可信設定生成的“有毒廢料”,如果洩露的話,可以被用于生成無法 檢測的僞造證明。多方計算通常會忽略這個問題,但是儀式的協調 異常複雜。
  • 可信設定建立的參考字元串通常綁定到一個電路(基本上就是程式)。 不可能為任何計算建立一個單獨的可信設定,這使得很多應用都不可行, 例如智能合約。
  • 可信設定是一次性的,生成的參考字元串不可更新,這意味着如果 Zcash需要修複其zk-SNARK電路中的哪怕一個很小的bug,也需要一個 新的儀式來部署修複。

2、通用zk-SNARK

新的zk-SNARK建構解決了對可信設定的要求,這意味着像智能合約等任意代碼可以作為zk-SNARK運作。目前有兩個不同的方法:

  • 透明設定

設定建立一個共用的參考字元串,公開并且不會建立有毒廢料。這和zk-STARK的機制類似。Fractal、Halo和SuperSonic-CG使用的就是透明設定。這種方法的缺點在于證明資料量會很大。Fractal和zk-STARK證明能達到250KB,這對于區塊鍊應用是不現實的。Fractal團隊告訴我,他們正在解決證明資料量過大的問題。Halo和SuperSonic的證明要小一些,

不到10KB。

  • 通用設定

這種設定建立一個結構化參考字元串,也會産生有毒廢料,不過設定不再局限于單一電路,一個參考字元串可以用于無限的任意電路中。例如Marlin、SuperSonic-RSA和Plonk。這三種建構生成的參考字元串可以更新,以便提高安全性。如果目前的有毒廢料洩露,那麼隻需要更新設定就可以再次保障系統的安全。

3、zk-SNARK分類

如何比較新出現的zk-SNARK?在證明人側,為每種zk-SNARK建構生成一個證明需要O(n log n)時間。差別主要在于證明的資料量大小、驗證時間以及參考字元串的大小。

下面的分類基于Alessandro Chiesa在舊金山ZKSummit上的

演講

零知識證明zk-snark的8種實作的對比

所有這些zk-SNARKS使用的編譯器可以分為三類:預處理、DARK和傳統的SNARK(非通用):

零知識證明zk-snark的8種實作的對比

4、已有的zk-SNARK建構

作為參考,我将介紹三種已有的建構。Groth16是非通用的,它依賴于一次性不可更新的設定,Sonic是一個通用的zk-SNARK。

Groth16:Groth16是目前最快、資料量最小的zk-SNARK,被用于Zcash等。Groth16不是通用的,其設定需要綁定到一個特定的電路。由于其速度和證明的小資料量,是以常常被新的zk-SNARK拿來比較性能。Groth16論文連結:

https://eprint.iacr.org/2016/260

Sonic:Sonic是一個早期的通用zk-SNARK協定。論文發表于2019年1月。Sonic支援通用、可更新的參考字元串。Sonic的證明大小固定,但是驗證成本高。理論上可以将多個證明分批驗證以獲得更好的性能。下面列舉的許多新的zk-SNARK都是基于Sonic。Sonic論文連結:

https://eprint.iacr.org/2019/099

5、新的zk-SNARK建構

Fractal:Fractal 是一種允許遞歸的zk-SNARK。通過對電路的預處理實作了透明設定。證明最大250KB,這筆其他建構生成的證明都要大的多。Fractal論文連結:

https://eprint.iacr.org/2019/1076

Halo:Halo支援遞歸證據組織,無需可信設定。與其他新的zk-SNARK建構不同,Halo的驗證時間是線性的。Halo論文連結:

https://eprint.iacr.org/2019/1021

SuperSonic:SuperSonic 是Sonic的改進版,是第一個在驗證時間和證明資料量方面實用化的透明zk-SNARK。SuperSonic論文連結:

https://eprint.iacr.org/2019/1229

Marlin:Marlin 是Sonic的改進版,證明時間縮短10倍,驗證時間縮短4倍。Marlin論文連結:

https://eprint.iacr.org/2019/1047

Plonk:Plonk也是Sonic的改進,證明時間縮短5倍。Plonk論文連結:

https://eprint.iacr.org/2019/953

6、zk-SNARK建構的性能比較

一個大問題是:如何比較這些不同zk-SNARK建構的性能?不幸的是,我不知道zk-SNARK有任何基準測試,不過即使有的話,也不是所有的新建構都有一個參考實作。是以下面表格中的數字請不要過于較真,它們是基于論文中的基準名額,或者基于發明者提供的估算。

通過檢視證明的大小、證明運作時間、驗證運作時間,有一些方面是值得注意的:

  • 使用透明設定的建構通常由較大的證明資料量
  • Halo的驗證時間不恒定,這和其他新的zk-SNARK建構不同
  • 在證明資料量尺寸和運作速度方面,Groth16仍然是無敵的
零知識證明zk-snark的8種實作的對比

原文連結:

8種zk-SNARK建構的比較 — 彙智網

繼續閱讀