天天看點

密碼學系列 - 零知識證明(ZKP) - zkSNARKs

零知識證明 - ZKP

零知識證明的理論基礎:橢圓曲線,大數計算,群論,同态加密,配對函數

零知識證明的各種算法: zkSNARK,zkSTARK,BulletProof

算法屬性可表示為: zk-SNARKs (簡潔的非互動式零知識證明)

  • Zero-Knowledge
  • Succinct
  • Non-interactive
  • ARgument of Knowledge

關鍵詞

  • 見證人: 執行電路時産生的中間信号 - witness
  • 零知識證明證明您知道一組比對所有限制的信号(見證),而不會洩露除公共輸入和輸出之外的任何信号。
  • 生成 proving_key(私有證明密鑰-保密) 和 verification_key(驗證密鑰-可公示)
  • 建立證明: 使用proving_key和witness(見證人),生成proof資料(證據)和可公布的資料
  • 驗證證明: 使用verification_key, proof資料和可公布的資料, 驗證是否有效

目前最主流的證明協定 - Groth16

證明系統更快,并且可以實作更短的證明

密碼學系列 - 零知識證明(ZKP) - zkSNARKs
Groth 大牛,在2016年提出了 Groth16 算法。該算法大大縮小了證明的資料量,并且也大大提高了驗證證明的速度。從 PPT 中,我們可以看出驗證過程隻需要驗證一個等式就可以了,是以驗證特别快。

原理 – 為什麼零知識證明可以做到零互動(Non-interactive)呢?

其實原理就是利用 CRS(Common Reference String)。CRS 其實就把挑戰過程中所要生成的随機數和挑戰數,都預先生成好,然後基于這些随機數和挑戰數生成他們對應的在證明和驗證過程中所需用到的各種同态隐藏。

之後,就把這些随機數和挑戰數銷毀。這些随機數和挑戰數 被稱為 toxic waste。之是以把他們稱為 toxic waste,是因為如果他們沒有被銷毀的話,就可以僞造證明了。

在 Zcash 項目中,大家為了安全的生成這些随機數和挑戰數,使用了 MPC(multi-party computation 多方計算儀式) 技術。這樣多方一起來生成 這些 toxic waste,隻要不是所有人合謀,那麼沒有人能恢複出 toxic waste。進而保證了安全性。

到目前為止,Zcash已經建立了兩組不同的公共參數。第一個儀式發生在2016年10月,就在Zcash Sprout推出之前。第二個産生于2018年,預計當年晚些時候将進行Sapling網絡更新。
往期精彩回顧:
區塊鍊知識系列
密碼學系列
零知識證明系列
共識系列
公鍊調研系列
比特币系列
以太坊系列
EOS系列
Filecoin系列
聯盟鍊系列
Fabric系列
智能合約系列
Token系列

繼續閱讀