Evaluar un Programa Aritmético Cuadrático (QAP) en una configuración confiable permite a un probador demostrar que un QAP se satisface sin revelar el testigo mientras usa una prueba de tamaño constante.
Específicamente, los polinomios del QAP se evalúan en un punto desconocido . La ecuación del QAP
estará equilibrada si el vector satisface la ecuación, y desequilibrada con abrumadora probabilidad en caso contrario.
El esquema mostrado aquí no es una Prueba ZK segura, pero es un paso intermedio para mostrar cómo funciona Groth16.
Un ejemplo concreto
Para hacer esto un poco menos abstracto, digamos que las matrices del Sistema de Restricciones de Rango 1 (R1CS) , , y tienen 3 filas y 4 columnas.
Dado que tenemos 3 filas, significa que nuestros polinomios de interpolación serán de grado 2. Debido a que tenemos 4 columnas, cada matriz resultará en 4 polinomios (para un total de 12 polinomios).
Nuestro QAP será
Notación y preliminares
Nos referimos a los puntos generadores de la curva elíptica en los grupos y como y respectivamente. Un elemento en se denota como . Un elemento en se denota como . Donde pueda haber ambigüedad con los subíndices referidos a índices en una lista, decimos o . Un emparejamiento de curva elíptica entre dos puntos se denota como .
Sea la -ésima columna de . En nuestro ejemplo, las filas serán y las columnas . Sea el polinomio obtenido al ejecutar la interpolación de Lagrange en la -ésima columna de usando los valores y siendo los valores los valores de la -ésima columna.
Puesto que tenemos 4 columnas, obtenemos cuatro polinomios de
cuatro polinomios de
y cuatro polinomios de
Un polinomio representa el -ésimo polinomio y el -ésimo coeficiente (potencia). Por ejemplo, significa el coeficiente asociado con .
El QAP para nuestro ejemplo es
donde y es
Los grados de los polinomios en el QAP con respecto al tamaño del R1CS
Un par de observaciones sobre los grados de los polinomios en el caso general:
- El grado de y podría ser tan alto como porque interpolan puntos, donde es el número de filas en el R1CS.
- El grado de podría ser tan bajo como 0 si la suma de los polinomios da como resultado el polinomio cero, es decir, si los coeficientes se cancelan aditivamente entre sí.
- es de grado por definición.
- Multiplicar polinomios suma sus grados, y dividir polinomios resta sus grados.
Por lo tanto, h(x) será como máximo de grado porque
Expandiendo los términos
Si expandimos las sumas de nuestro ejemplo anterior, obtenemos lo siguiente
En cada uno de los casos, dado que estamos sumando 4 polinomios de grado 2, obtenemos un polinomio de grado 2.
En general, la expresión produce un polinomio con a lo sumo la misma potencia que (podría ser menor, si por ejemplo sumara 0). Por conveniencia, hemos introducido los coeficientes donde es la potencia del coeficiente y significa que combinamos los polinomios con el testigo .
Aquí están los polinomios después de reducirlos de esta manera:
Combinando una configuración confiable con un QAP
Ahora podemos aplicar la cadena de referencia estructurada de la configuración confiable para evaluar los polinomios.
Es decir, dada una cadena de referencia estructurada
la cual fue calculada en la configuración confiable como
Podemos calcular
Aquí, significan que los polinomios fueron evaluados usando la cadena de referencia estructurada generada a partir de en la configuración confiable, no significa “sustituir y evaluar los polinomios”. Dado que fue destruido después de la configuración confiable, el valor es desconocido.
Hemos calculado la mayor parte del QAP utilizando el srs, pero aún no hemos calculado :
Calculando
Recuerde que el grado de es 3 (generalmente ) y el grado de es 1 (generalmente ). Si los multiplicamos, podríamos obtener hasta un polinomio de grado 3, lo cual es más de lo que proporciona la ceremonia de potencias de tau. En su lugar, la ceremonia de potencias de tau debe ajustarse para proporcionar una cadena de referencia estructurada para .
La persona que realiza la configuración confiable conoce , que es simplemente . Sin embargo, es un polinomio calculado por el probador y modificado en base a los valores de , por lo que no puede conocerse durante la configuración confiable.
Tenga en cuenta que no podemos evaluar y por separado (usando una cadena de referencia estructurada) y luego emparejarlos. Eso no daría como resultado un elemento que es lo que necesitamos.
SRS para productos de polinomios
Observe que todos los siguientes cálculos dan como resultado el mismo valor:
- El polinomio evaluado en , o
- multiplicado por , o ( evaluado en y evaluado en )
- multiplicado por la evaluación , luego evaluado en , es decir
Usaremos el tercer método para calcular . Suponga, sin pérdida de generalidad, que es y . El cálculo sería
Si sustituimos en , eso sería .
Sin embargo, evaluar este polinomio en requeriría que el probador conociera . La idea clave aquí es que el cálculo anterior puede estructurarse como:
Si la configuración confiable proporciona , y el probador proporciona , entonces el probador puede calcular sin conocer , porque todo lo que involucra a está en el vector derecho del producto interno.
Cadena de referencia estructurada para
Para crear una cadena de referencia estructurada para , creamos evaluaciones de multiplicadas por potencias sucesivas de .
(De forma un poco confusa, un polinomio de grado tiene términos, por lo tanto generamos evaluaciones para un polinomio de grado . Tenga en cuenta que Upsilon comienza en y termina en 0).
Aquí, es el número de filas en el R1CS, y establecimos que no puede tener un grado mayor a .
Para usar la cadena de referencia estructurada para calcular , el probador hace lo siguiente:
Evaluando un QAP en una configuración confiable
Ahora unimos todo. Supongamos que tenemos un R1CS con matrices de filas y columnas. A partir de esto, podemos aplicar la interpolación de Lagrange para convertirlo en un QAP
Los términos de la suma producirán cada uno un polinomio de grado (un polinomio de Lagrange tiene un grado menos que el número de puntos que interpola), y el polinomio tendrá a lo sumo grado , y tendrá grado .
Una configuración confiable genera un elemento de campo aleatorio y calcula:
Note que las cadenas de referencia estructuradas necesitan tener suficientes términos para acomodar los polinomios en el QAP.
Luego, la configuración confiable destruye y publica las cadenas de referencia estructuradas:
El probador evalúa los componentes del QAP de la siguiente manera:
El probador publica y el verificador puede comprobar que
Si el testigo satisface el QAP, entonces la ecuación anterior estará equilibrada. Pero el hecho de que la ecuación esté equilibrada no garantiza que el probador conozca un que la satisfaga porque el probador puede publicar puntos arbitrarios de la curva elíptica y el verificador no sabe si realmente se derivan del QAP.
La prueba es muy pequeña
Observe que la prueba solo consta de tres puntos de la curva elíptica. Si un elemento de tiene un tamaño de 64 bytes, y un elemento de tiene un tamaño de 128 bytes, entonces la prueba es de solo 256 bytes. ¡Esto es cierto independientemente del tamaño del R1CS!
Cuanto mayor sea el R1CS, más trabajo tiene el probador, pero el trabajo del verificador permanece constante.
La solución a este problema se describe en el siguiente capítulo sobre el protocolo Groth16.
La prueba sigue siendo de tamaño constante en Groth16, como se puede ver en el código fuente de Tornado Cash en el struct llamado Proof.
Publicado originalmente el 28 de agosto de 2023