zkSnarks:為什麼目標多項式t(秒)噸(s)t(s)如果證明者和驗證者都知道,是否需要保密?
我正在閱讀 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 $ .