ฉันกำลังอ่านคำอธิบายของ zkSnark ที่เขียนโดย Maksym Petkus - http://www.petkus.info/papers/WhyAndHowZkSnarkWorks.pdf
ที่นี่ผู้พิสูจน์รู้พหุนามดีกรี 3 คำตอบของพหุนาม 2 ตัวคือ 3 & 4 เขาต้องพิสูจน์ให้ผู้ตรวจพิสูจน์ว่าเขารู้จักพหุนามดังกล่าวโดยไม่เปิดเผยคำตอบที่ 3 ให้ผู้ตรวจสอบทราบ
นี่คือพหุนามที่พวกเขาใช้เป็นตัวอย่าง - $P(x) = x^3 - 7x^2 + 12x$
สิ่งนี้สามารถแยกได้เป็น $x(x-3)(x-4)$ดังนั้นทางออกที่ 3 คือ $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)$
ส่งค่าทั้ง 4 ค่านี้ไปให้ Prover โดยไม่เปิดเผย s
Prover คำนวณ $E(p(s))$ ใช้ต่างกัน $E(s^n)$ส. เขาคำนวณด้วย $E(H(s))$ โดยไม่รู้ตัวเหมือนกัน $s$. เขาส่งทั้งสองเพื่อตรวจสอบ
ตรวจสอบคำนวณ $T(s)$ แล้วยกขึ้น $E(H(s))^ {T(s)}$. ถ้า $E(P(s))$ ส่งโดยผู้พิสูจน์ตรงกับ $E(H(s))^ {T(s)}$จากนั้นโปรโตคอลจะตรวจสอบสำเร็จ
ฉันเข้าใจโปรโตคอลโดยทั่วไป มีปัญหาที่พวกเขากล่าวถึงในภายหลัง แต่ปัญหาหนึ่งที่อยู่ในใจของฉัน (ซึ่งพวกเขาไม่ได้กล่าวถึง) มีดังต่อไปนี้
ถ้าผู้พิสูจน์ไม่ทราบพหุนามที่แท้จริง (เช่น $x^3 - 7x^2 + 12x$) แต่เพียงเลือกวิธีแก้ปัญหาที่ 3 แบบสุ่ม - เช่น $x = 2$ & เขาดำเนินการตามขั้นตอนโปรโตคอลข้างต้นตามที่อธิบายไว้ มันจะยังคงตรวจสอบกับตัวตรวจสอบ
ในกรณีนี้ ฉันไม่สามารถเข้าใจได้ว่าโปรโตคอลกำลังพยายามบรรลุอะไรกันแน่