Zero-Knowledge-Proofs
知識的零知識證明與電路之間的關係是什麼?
隨著諸如Pinocchio、Groth16和Sonic之類的零知識證明 (ZKPoKs) 的日益流行,舉出一些通常稱為 zk-SNARKs 的 ZKPoKs,我開始了解這些協議的幕後情況.
我遇到的唯一問題是我不清楚 ZKPoKs 和 zk-SNAKRKs: Arithmetic Circuits上的底層方案的關係。
讓我問幾個關於它的問題:
- 為什麼算術電路在零知識世界中很有趣?
- 為什麼基於電路的 ZKPoK 被認為是“通用的”?
- 是否有任何特定(也不是基於電路)“實用”的 ZKPoK 能夠由電路執行?
- 基於電路的 ZKPoK 是否比特定的 ZKPoK 更有效(在時間或空間上)?
為什麼算術電路在零知識世界中很有趣?
一般計算有兩種主要模型:電路和圖靈機。
描述圖靈機的計算路徑是大多數主流程式語言嘗試做的事情,但是對於加密處理,圖靈機也有缺點。即,必須處理記憶體,此外,圖靈機並不是最有效的程式模型,所有更有效的模型通常會顯著增加複雜性,使密碼協議複雜化。因此,相反,人們所做的是他們使用可以相當容易地表達許多立即有趣的語句的電路,並且您通常只需為少數操作指定處理,即遇到乘法和加法時要做什麼。
為什麼基於電路的 ZKPoK 被認為是“通用的”?
使用上述考慮,它們允許您制定證明,例如“我知道 $ x $ 對於一些公眾 $ v $ 和一些公共電路 $ C $ 這樣 $ C(x,v)=1 $ “這使得它們在經過驗證的陳述中完全通用。
是否有任何特定(也不是基於電路)“實用”的 ZKPoK 能夠由電路執行?
任何 ZKPoK 都可以根據基於電路的方法重新制定,那麼問題就變成了效率損失有多大,以及潛在的組合收益是否值得。
基於電路的 ZKPoK 是否比特定的 ZKPoK 更有效(在時間或空間上)?
通常,特定 ZKPoK 的重點是它們可以利用基於通用電路的約束和結構,從而使專門的 ZKPoK 通常更有效。當然,關於電路的陳述除外,其中基於通用電路的電路和專用電路可能在很大程度上一致。