Zero-Knowledge-Proofs

zkSnarks:為什麼目標多項式t(秒)噸(s)t(s)如果證明者和驗證者都知道,是否需要保密?

  • February 3, 2022

我正在閱讀 Maksym Petkus 撰寫的 zkSnark 解釋 - http://www.petkus.info/papers/WhyAndHowZkSnarkWorks.pdf

這裡使用的例子是有一個 3 次多項式,驗證者知道它的根為 1 和 2。

  • 整個多項式是 $ p(x) $
  • 目標多項式 $ t(x) = (x-1)(x-2) $ .
  • 第三根來自 $ h(x) $ , 即如果第三根是 3,那麼 $ h(x) = (x-3) $ .
  • 和 $ p(x) = h(x). t(x) $ .

因此,證明者向驗證者證明的秘密似乎是他的知識 $ h(x) $

然而,深入到教程的第 3.6 節,作者在協議中添加了非互動性,他說如下

至此,我們有了一個互動式零知識方案。為什麼會這樣?因為證明只對原始驗證者有效,所以沒有其他人(其他驗證者)可以信任相同的證明,因為:

  • 驗證者可以與證明者串通並洩露這些秘密參數 $ s $ , $ \alpha $ 允許偽造證明,如備註 3.1 中所述
  • 出於同樣的原因,驗證者可以自己生成假證明
  • 驗證者必須儲存 $ \alpha $ 和 $ t(s) $ 直到所有相關證明都得到驗證,這允許額外的攻擊面,可能會洩露秘密參數

我明白如何 $ \alpha $ 是一個秘密,需要保護,但為什麼 $ t(s) $ 需要保護 - 在互動式版本中,證明者和驗證者都知道,所以為什麼在協議中添加非互動性 $ t(s) $ 突然變成秘密?

而多項式 $ t(x) $ 本身是已知的,具體的評價在 $ s $ , $ t(s) $ , 未知。

在互動式版本中,證明者計算 $ g^p $ 和 $ g^h $ 在論文所稱的“加密空間”中,通過使用 $ s $ .

然後驗證者使用 $ t(s) $ 檢查 $ g^p = g^{h \cdot t(s)} $ , 暗示 $ p(x) = h(x) \cdot t(x) $ 機率很高。

因為 $ t(x) $ 已知,如果 $ t(s) $ 也被知道, $ s $ 可以恢復。這是因為多項式 $ t(x) - t(s) $ 有 $ s $ 根據定義,作為根。任何計算多項式根的算法 $ q $ ,例如Cantor-Zassenhaus算法,可用於查找 $ s $ . 因此, $ t(s) $ 必須保密。

為此,我們還加密 $ t(s) $ 給予 $ g^{t(s)} $ ,然後使用雙線性對在 的指數中執行乘法運算 $ g $ .

引用自:https://crypto.stackexchange.com/questions/98472