Citesc această explicație despre zkSnark scrisă de Maksym Petkus - http://www.petkus.info/papers/WhyAndHowZkSnarkWorks.pdf
Aici Dovatorul cunoaște un polinom de gradul 3, 2 dintre soluțiile polinomului sunt 3 și 4. El trebuie să demonstreze verificatorului că cunoaște un astfel de polinom fără a dezvălui verificatorului a treia soluție.
Acesta este polinomul pe care îl folosesc ca exemplu - $P(x) = x^3 - 7x^2 + 12x$
Acest lucru poate fi luat în considerare ca $x(x-3)(x-4)$, deci a treia soluție este $x = 0$
$T(x) = (x-3)(x-4)$
$H(x) = x$ (doar dovatorul știe asta)
$P(x) = H(x) . T(x)$
$E(c) = g^c \pmod p$.
Pe scurt, acesta este protocolul folosit
Verificatorul alege o aleatorie $s$, calculează $E(s^0), E(s^1), E(s^2), E(s^3)$
Trimite aceste 4 valori la prover fără a dezvălui s.
Prover calculează $E(p(e))$ folosind diferite $E(s^n)$s. El calculează și el $E(H(e))$ la fel fără să știe $s$. Le dă pe amândouă verificatorului
Verificatorul calculează $T(i)$ și apoi crește $E(H(e))^ {T(e)}$. Dacă $E(P(e))$ trimis de probator se potriveste cu $E(H(e))^ {T(e)}$, apoi protocolul se verifică cu succes.
Am înțeles protocolul în general. Există probleme cu acesta pe care le abordează mai târziu, dar o problemă care îmi vine în minte (pe care nu o abordează) este următoarea.
Dacă probatorul nu cunoaște polinomul real (de ex. $x^3 - 7x^2 + 12x$), dar alege doar o a treia soluție aleatorie - adică $x = 2$ și el continuă cu pașii protocolului de mai sus așa cum este descris, se va verifica în continuare cu verificatorul.
În acest caz, nu pot să-mi dau seama ce anume încearcă să realizeze protocolul?