zkSNARKS:是什麼阻止了證明者選擇與他預期知道的多項式不同的多項式
我正在閱讀 Maksym Petkus 撰寫的 zkSnark 解釋 - http://www.petkus.info/papers/WhyAndHowZkSnarkWorks.pdf
在這裡,證明者知道一個 3 次多項式,多項式的 2 個解是 3 和 4。他必須向驗證者證明他知道這樣的多項式,而不向驗證者透露第 3 個解。
這是他們用作範例的多項式 - $ P(x) = x^3 - 7x^2 + 12x $ 這可以考慮為 $ x(x-3)(x-4) $ ,所以第三個解決方案是 $ x = 0 $
$ T(x) = (x-3)(x-4) $
$ H(x) = x $ (只有證明者知道)
$ P(x) = H(x) . T(x) $
$ E(c) = g^c \pmod p $ .
簡而言之,這是使用的協議
- 驗證者隨機選擇一個 $ s $ , 計算 $ E(s^0), E(s^1), E(s^2), E(s^3) $ 在不洩露 s 的情況下將這 4 個值發送給證明者。
- 證明者計算 $ E(p(s)) $ 使用不同的 $ E(s^n) $ s。他還計算 $ E(H(s)) $ 同樣不知 $ s $ . 他將兩者都交給驗證者
- 驗證者計算 $ T(s) $ & 然後加註 $ E(H(s))^ {T(s)} $ . 如果 $ E(P(s)) $ 證明者發送的匹配 $ E(H(s))^ {T(s)} $ ,則協議驗證成功。
我大致了解該協議。他們稍後會解決一些問題,但我想到的一個問題(他們沒有解決)如下。
如果證明者不知道實際的多項式(即 $ x^3 - 7x^2 + 12x $ ),但只是選擇一些隨機的第三種解決方案 - 即 $ x = 2 $ &他按照上述協議步驟繼續進行,它仍將與驗證者進行驗證。
在這種情況下,我無法弄清楚協議試圖實現的究竟是什麼?
我找不到那個具體的例子 $ x^3 − 7x^2 + 12x $ 在連結的文件中。但我認為你已經在這裡回答了你自己的問題:
在這裡,證明者知道一個 3 次多項式,多項式的 2 個解是 3 和 4。他必須向驗證者證明他知道這樣的多項式,而不向驗證者透露第 3 個解。
這正是他在這裡試圖證明的——他知道一個 3 次多項式,它有 3 和 4 解。證明這種多項式的知識並不特定於一個多項式——有多個這樣的 3 次多項式有根3 和 4. 證明所做的只是證明其中之一的知識。
如果證明者不知道實際的多項式(即 $ x^3 − 7x^2 + 12x $ ) 但只是選擇一些隨機的第三種解決方案 - 即 $ x = 2 $ &他按照上述協議步驟繼續進行,它仍將與驗證者進行驗證。
這是因為多項式的知識與其根的知識相同 - 唯一具有根 3、4 和 2 的 3 次多項式是 $ (x-2)(x-3)(x-4) $ . 所以證明者仍然在證明他們知道一個根為 3 和 4 的 3 次多項式,即使它不是 $ x^3 − 7x^2 + 12x $ . 在那種情況下,他們“知道”多項式 $ (x-2)(x-3)(x-4) $ 反而。
必須強調的是,這個文件慢慢地建構了更多有趣的應用程序。這個證明多項式知識的協議只是一個建構塊,它本身可能看起來有點無用。但該文件稍後解釋瞭如何建立這種“多項式知識”,例如在第 4.4 節及以後的部分。通常,這是因為我們實際上只關心多項式是否有一組根(這對應於在零知識中證明的事物的某些條件)。