Wikipedia describe ese ejemplo. Considere el problema UNNAT completo de coNP: dado un CNF en n variables, queremos convencer al verificador de que φ no es satisfactoria. Aritmetizamos φ a un polinomio p y elegimos algunos q primos grandes . Sea
p ( x 1 , … , x k ) = 1 ∑ x k + 1 = 0 ⋯ 1 ∑ x n = 0 p ( x 1 ,φnφφpq
El protocolo procede de la siguiente manera:
p(x1,…,xk)=∑xk+1=01⋯∑xn=01p(x1,…,xn).
- Prover envía al verificador un primo , y este último verifica que q sea primo.q∈(2n,2n+1)q
- Prover envía el verificador . El verificador verifica que p ( 0 ) + p ( 1 ) = 0 , y envía al probador un aleatorio r 1 .p(z)∈Zq[z]p(0)+p(1)=0r1
- Prover envía el verificador . El verificador verifica que p ( r 1 , 0 ) + p ( r 1 , 1 ) = p ( r 1 ) , y envía al probador un r 2 aleatorio .p(r1,z)∈Zq[z]p(r1,0)+p(r1,1)=p(r1)r2
- Finalmente, el verificador obtiene , y verifica que tiene el valor correcto evaluando p directamente.p(r1,…,rn)∈Zqp
Debido a que el grado de es pequeño en comparación con q , si el probador está haciendo trampa, entonces el verificador probablemente la atrapará (vea Wikipedia para la prueba, o resuélvalo usted mismo usando el lema de Schwartz-Zippel).pq