Leçon 3

¿Cómo combinar la prueba de reservas con la tecnología zk-SNARK?

Esta lección explica qué es la tecnología zk-SNARK y cómo se optimizan las Pruebas de Reservas utilizando la tecnología zk-SNARK

Antecedentes

La Prueba de Conocimiento Cero (ZKP) es una técnica criptográfica propuesta por primera vez por S. Goldwasser, S. Micali y C. Rackoff a principios de la década de 1980 en un artículo tituladoLa Complejidad del Conocimiento de los Sistemas de Prueba InteractivaEn el documento, se conceptualizó como un modelo teórico para resolver el problema de verificar declaraciones matemáticas sin revelar la evidencia. Este concepto ha atraído una atención generalizada en la academia porque desafía los límites de las técnicas criptográficas tradicionales y proporciona nuevos métodos para procesar información sensible.

Con el tiempo, ZKP ha evolucionado de un concepto teórico abstracto a protocolos concretos que pueden integrarse en varias aplicaciones. En 2010, Groth publicó un artículo titulado “ Argumentos cortos de conocimiento cero no interactivos basados en emparejamientos“, que se convirtió en el hito teórico para zk-SNARK (Argumento de Conocimiento Sincrético No Interactivo Cero Conocido), una solución importante en ZKP. El progreso más importante en la aplicación de la prueba de conocimiento cero es el sistema de prueba de conocimiento cero utilizado por Z-cash en 2015, que proporciona protección de privacidad para transacciones y cantidades. Posteriormente, zk-SNARK combinado con contratos inteligentes, extendiendo su aplicación a una gama más amplia de escenarios de aplicación.

Principios básicos de zk-SNARK

La ZKP tradicional se adhiere a tres principios:

  • Integridad: Si la afirmación es verdadera, un probador honesto siempre puede convencer al verificador.
  • Solidez: Si la afirmación es falsa, cualquier probador fraudulento solo puede engañar al verificador con una pequeña probabilidad.
  • Zero-conocimiento: Si la afirmación es verdadera, el verificador no podrá adquirir nada más que el hecho de que la afirmación es verdadera. En otras palabras, el proceso de verificación no revelará ninguna información que pueda usarse para construir la prueba.

El principio de ZKP se puede entender a través de un ejemplo simple: Si necesito demostrarle a A que tengo el número de teléfono de B, no necesito revelar directamente el número de teléfono de B. En cambio, puedo marcar directamente el número de teléfono de B y demostrar que realmente tengo el número de teléfono de B después de comunicarme. Este proceso no filtrará el número de teléfono de B.
zk-SNARK mejora aún más estos principios con las siguientes características:

  • Conocimiento cero: el verificador no obtiene ninguna información útil de la prueba.
  • Succinct: El tamaño de la prueba es pequeño (generalmente unos pocos docenas de bytes) y el tiempo de verificación es corto (generalmente unos pocos milisegundos);
  • No interactivo: El probador solo necesita enviar la prueba al verificador una vez, sin necesidad de más comunicación.
  • Parámetros de confianza: Tanto el probador como el validador necesitan utilizar una Cadena de Referencia Común (CRS) generada por un tercero de confianza, que puede contener información sensible que, si se filtra o se manipula, puede amenazar la seguridad del sistema.

En el artículo de Groth, propuso un método de prueba de conocimiento cero no interactivo basado en emparejamientos para transformar un problema computacional en un Programa Aritmético Cuadrático (QAP). Este método utiliza criptografía de curva elíptica y funciones hash para construir una prueba efectiva. Los diseños posteriores de zk-SNARK suelen implicar cuatro pasos.

  • Configuración del sistema: Realizada por un tercero de confianza. Implica la generación de un CRS, que incluye una clave de prueba (pk) y una clave de verificación (vk). Este proceso solo necesita ejecutarse una vez, y el CRS se puede reutilizar varias veces.
  • Problema de codificación: transformar un problema computacional f (x) = y en una forma QAP A (x) · B (x) = C (x) · Z (x), donde A (x), B (x), C (x) son polinomios determinados por la estructura del circuito de f, Z (x) es un polinomio fijo, x es un punto seleccionado al azar, y y es la salida de f. Este proceso puede ser realizado por un demostrador o verificador, o por un tercero con antelación.
  • Generación de Prueba: Realizada por el probador. Implica usar la entrada w de pk, x y f para generar una prueba \pi, demostrando que él conoce un w que satisface f (w) = y sin revelar el valor específico de w. Este proceso implica cálculos polinómicos, operaciones de curva elíptica y operaciones de función hash, generando en última instancia un \pi compuesto por varios puntos de curva elíptica y un valor hash.
  • Verificación de Prueba: Realizada por el verificador. Implica el uso de vk, x, y y \pi para la verificación, determinando si el demostrador conoce un w que satisface f(w) = y. Este proceso también implica cálculos polinómicos, operaciones de curva elíptica y operaciones de función hash. Finalmente se obtiene un valor booleano que indica si la prueba es válida.

Para ilustrar con un ejemplo simple, supongamos que tienes un mapa del tesoro que puede guiarte hasta la ubicación exacta de un tesoro enterrado. Quieres demostrarle a alguien que conoces la ubicación del tesoro, pero no quieres revelar el contenido del mapa del tesoro ni la ubicación real del tesoro. Si utilizas la tecnología zk-SNARK, necesitas crear un rompecabezas complejo del mapa del tesoro. Escoges una pequeña pieza del rompecabezas crucial (una prueba) y se la muestras a la otra persona, convenciéndola de que sabes cómo encaja toda la pieza del rompecabezas, es decir, la ubicación del tesoro, sin revelar el rompecabezas completo. Sin embargo, para hacer esto, necesitas obtener algunas marcas especiales de una imprenta de confianza, que se utilizan para demostrar la autenticidad de tu pieza del rompecabezas.

Combinación de Reservas de Intercambio con zk-SNARK

La discusión anterior mencionó que zk-SNARK permite establecer una cadena de referencia común, lo que significa que se pueden establecer restricciones en el circuito en funcionamiento. Tomando la reserva de Gate.io como ejemplo, establece cinco restricciones básicas en el circuito, como se muestra a continuación:

Antes de insertar los activos netos del usuario en el árbol de Merkle, el nodo correspondiente al ID del usuario está vacío.
② Calcular los activos/pasivos totales del usuario en base a la lista de activos del usuario y el precio de cada activo. Los activos totales deben ser mayores que los pasivos totales.
③ Agregue los activos/pasivos del usuario a los activos/pasivos del intercambio.
(4) Calcule el hash de estado del usuario utilizando el ID de usuario, el total de activos/pasivos y la lista de activos. Inserte el estado del usuario en el árbol de Merkle para obtener una nueva raíz de Merkle.
⑤ El valor hash del nodo raíz del árbol antes de que el usuario anterior cree una operación de usuario debe ser igual al valor hash después de que el usuario posterior cree una operación de usuario.
(La operación ① puede evitar que los datos del nodo sean falsos, la operación ② puede evitar cuentas con saldo negativo, y la operación ⑤ puede garantizar que los datos del usuario no se modifiquen antes y después de la operación).
Esto garantiza la resolución del problema de saldo negativo. Los datos del intercambio solo necesitan pasar por el circuito para realizar automáticamente verificaciones de restricciones y obtener el número de activos. Sin embargo, esta solución requiere cierta potencia de cálculo y condiciones de hardware. Se tarda 15 días en calcular la prueba de activos de 10 millones de usuarios en una máquina de 32 núcleos con 128 GB de RAM. El cálculo de la Prueba de Reservas puede ser paralelizado. Si hay 10 máquinas, solo se tarda 1.5 días.

Conclusión

Al establecer restricciones relevantes, zk-SNARK puede evitar la ocurrencia de problemas de valor negativo y proteger mejor la privacidad y seguridad de los usuarios. La Prueba de Reservas de Gate.io ahora puede demostrar las ratios de reserva para más de 100 monedas, y los usuarios pueden verlo simplemente haciendo clic en el enlaceEn la próxima lección, te llevaremos a verificar la seguridad de tus activos en 3 minutos.

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
Catalogue
Leçon 3

¿Cómo combinar la prueba de reservas con la tecnología zk-SNARK?

Esta lección explica qué es la tecnología zk-SNARK y cómo se optimizan las Pruebas de Reservas utilizando la tecnología zk-SNARK

Antecedentes

La Prueba de Conocimiento Cero (ZKP) es una técnica criptográfica propuesta por primera vez por S. Goldwasser, S. Micali y C. Rackoff a principios de la década de 1980 en un artículo tituladoLa Complejidad del Conocimiento de los Sistemas de Prueba InteractivaEn el documento, se conceptualizó como un modelo teórico para resolver el problema de verificar declaraciones matemáticas sin revelar la evidencia. Este concepto ha atraído una atención generalizada en la academia porque desafía los límites de las técnicas criptográficas tradicionales y proporciona nuevos métodos para procesar información sensible.

Con el tiempo, ZKP ha evolucionado de un concepto teórico abstracto a protocolos concretos que pueden integrarse en varias aplicaciones. En 2010, Groth publicó un artículo titulado “ Argumentos cortos de conocimiento cero no interactivos basados en emparejamientos“, que se convirtió en el hito teórico para zk-SNARK (Argumento de Conocimiento Sincrético No Interactivo Cero Conocido), una solución importante en ZKP. El progreso más importante en la aplicación de la prueba de conocimiento cero es el sistema de prueba de conocimiento cero utilizado por Z-cash en 2015, que proporciona protección de privacidad para transacciones y cantidades. Posteriormente, zk-SNARK combinado con contratos inteligentes, extendiendo su aplicación a una gama más amplia de escenarios de aplicación.

Principios básicos de zk-SNARK

La ZKP tradicional se adhiere a tres principios:

  • Integridad: Si la afirmación es verdadera, un probador honesto siempre puede convencer al verificador.
  • Solidez: Si la afirmación es falsa, cualquier probador fraudulento solo puede engañar al verificador con una pequeña probabilidad.
  • Zero-conocimiento: Si la afirmación es verdadera, el verificador no podrá adquirir nada más que el hecho de que la afirmación es verdadera. En otras palabras, el proceso de verificación no revelará ninguna información que pueda usarse para construir la prueba.

El principio de ZKP se puede entender a través de un ejemplo simple: Si necesito demostrarle a A que tengo el número de teléfono de B, no necesito revelar directamente el número de teléfono de B. En cambio, puedo marcar directamente el número de teléfono de B y demostrar que realmente tengo el número de teléfono de B después de comunicarme. Este proceso no filtrará el número de teléfono de B.
zk-SNARK mejora aún más estos principios con las siguientes características:

  • Conocimiento cero: el verificador no obtiene ninguna información útil de la prueba.
  • Succinct: El tamaño de la prueba es pequeño (generalmente unos pocos docenas de bytes) y el tiempo de verificación es corto (generalmente unos pocos milisegundos);
  • No interactivo: El probador solo necesita enviar la prueba al verificador una vez, sin necesidad de más comunicación.
  • Parámetros de confianza: Tanto el probador como el validador necesitan utilizar una Cadena de Referencia Común (CRS) generada por un tercero de confianza, que puede contener información sensible que, si se filtra o se manipula, puede amenazar la seguridad del sistema.

En el artículo de Groth, propuso un método de prueba de conocimiento cero no interactivo basado en emparejamientos para transformar un problema computacional en un Programa Aritmético Cuadrático (QAP). Este método utiliza criptografía de curva elíptica y funciones hash para construir una prueba efectiva. Los diseños posteriores de zk-SNARK suelen implicar cuatro pasos.

  • Configuración del sistema: Realizada por un tercero de confianza. Implica la generación de un CRS, que incluye una clave de prueba (pk) y una clave de verificación (vk). Este proceso solo necesita ejecutarse una vez, y el CRS se puede reutilizar varias veces.
  • Problema de codificación: transformar un problema computacional f (x) = y en una forma QAP A (x) · B (x) = C (x) · Z (x), donde A (x), B (x), C (x) son polinomios determinados por la estructura del circuito de f, Z (x) es un polinomio fijo, x es un punto seleccionado al azar, y y es la salida de f. Este proceso puede ser realizado por un demostrador o verificador, o por un tercero con antelación.
  • Generación de Prueba: Realizada por el probador. Implica usar la entrada w de pk, x y f para generar una prueba \pi, demostrando que él conoce un w que satisface f (w) = y sin revelar el valor específico de w. Este proceso implica cálculos polinómicos, operaciones de curva elíptica y operaciones de función hash, generando en última instancia un \pi compuesto por varios puntos de curva elíptica y un valor hash.
  • Verificación de Prueba: Realizada por el verificador. Implica el uso de vk, x, y y \pi para la verificación, determinando si el demostrador conoce un w que satisface f(w) = y. Este proceso también implica cálculos polinómicos, operaciones de curva elíptica y operaciones de función hash. Finalmente se obtiene un valor booleano que indica si la prueba es válida.

Para ilustrar con un ejemplo simple, supongamos que tienes un mapa del tesoro que puede guiarte hasta la ubicación exacta de un tesoro enterrado. Quieres demostrarle a alguien que conoces la ubicación del tesoro, pero no quieres revelar el contenido del mapa del tesoro ni la ubicación real del tesoro. Si utilizas la tecnología zk-SNARK, necesitas crear un rompecabezas complejo del mapa del tesoro. Escoges una pequeña pieza del rompecabezas crucial (una prueba) y se la muestras a la otra persona, convenciéndola de que sabes cómo encaja toda la pieza del rompecabezas, es decir, la ubicación del tesoro, sin revelar el rompecabezas completo. Sin embargo, para hacer esto, necesitas obtener algunas marcas especiales de una imprenta de confianza, que se utilizan para demostrar la autenticidad de tu pieza del rompecabezas.

Combinación de Reservas de Intercambio con zk-SNARK

La discusión anterior mencionó que zk-SNARK permite establecer una cadena de referencia común, lo que significa que se pueden establecer restricciones en el circuito en funcionamiento. Tomando la reserva de Gate.io como ejemplo, establece cinco restricciones básicas en el circuito, como se muestra a continuación:

Antes de insertar los activos netos del usuario en el árbol de Merkle, el nodo correspondiente al ID del usuario está vacío.
② Calcular los activos/pasivos totales del usuario en base a la lista de activos del usuario y el precio de cada activo. Los activos totales deben ser mayores que los pasivos totales.
③ Agregue los activos/pasivos del usuario a los activos/pasivos del intercambio.
(4) Calcule el hash de estado del usuario utilizando el ID de usuario, el total de activos/pasivos y la lista de activos. Inserte el estado del usuario en el árbol de Merkle para obtener una nueva raíz de Merkle.
⑤ El valor hash del nodo raíz del árbol antes de que el usuario anterior cree una operación de usuario debe ser igual al valor hash después de que el usuario posterior cree una operación de usuario.
(La operación ① puede evitar que los datos del nodo sean falsos, la operación ② puede evitar cuentas con saldo negativo, y la operación ⑤ puede garantizar que los datos del usuario no se modifiquen antes y después de la operación).
Esto garantiza la resolución del problema de saldo negativo. Los datos del intercambio solo necesitan pasar por el circuito para realizar automáticamente verificaciones de restricciones y obtener el número de activos. Sin embargo, esta solución requiere cierta potencia de cálculo y condiciones de hardware. Se tarda 15 días en calcular la prueba de activos de 10 millones de usuarios en una máquina de 32 núcleos con 128 GB de RAM. El cálculo de la Prueba de Reservas puede ser paralelizado. Si hay 10 máquinas, solo se tarda 1.5 días.

Conclusión

Al establecer restricciones relevantes, zk-SNARK puede evitar la ocurrencia de problemas de valor negativo y proteger mejor la privacidad y seguridad de los usuarios. La Prueba de Reservas de Gate.io ahora puede demostrar las ratios de reserva para más de 100 monedas, y los usuarios pueden verlo simplemente haciendo clic en el enlaceEn la próxima lección, te llevaremos a verificar la seguridad de tus activos en 3 minutos.

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.