¿Se pueden implementar ZKSnarks en el ecosistema Ethereum?

Dado que Zcash parece tener su implementación de ZKSnarks terminada (o casi al menos).

Y aparecieron versiones de Quorum de JPMorgan con implementaciones de ZKsnarks incluidas, consulte: https://www.coindesk.com/jpmorgan-integrates-zcash-privacy-tech-enterprise-blockchain/

Todos sabemos que el tiempo de verificación de los Snarks es independiente del circuito (no del número de puertas, es cierto) pero de todos modos, las verificaciones de los nodos serán mucho más rápidas de lo que son ahora porque los cálculos no serían ejecutado más.

Las posibilidades de zkSNARK son impresionantes, puede verificar la exactitud de los cálculos sin tener que ejecutarlos y ni siquiera aprenderá qué se ejecutó, solo que se hizo correctamente.

Como se dice en el blog de Ethereum (quizás con un "nivel matemático/teórico" más bajo

Sé sobre la implementación de LibSnark.cpp y otras, pero no estoy hablando de poner todo esto en un SmartContract, estoy hablando de todos los mecanismos de blockchain que adoptan las estructuras de Snarks para trabajar con bloques y transacciones totalmente encriptados. , y un proceso de verificación de los nodos implementado también con la verificación de ZkSnarks.

¿Será posible implementar esos SNARKS a nivel de protocolo para verificar toda la Blockchain de Ethereum? Si no es así, ¿por qué?

Gracias.

Respuestas (3)

Descargo de responsabilidad : no soy criptógrafo ni matemático ni ingeniero de software de bajo nivel. Por favor, corríjame si alguna información provista a continuación es incorrecta.

Respuesta muy corta: si

Respuesta corta: Posible, pero muy difícil hoy.

Respuesta más larga: el principal desafío con Ethereum es que, dado que tiene una cadena de bloques programable, necesita implementar una máquina virtual (por ejemplo, EVM) como un circuito aritmético, lo cual es posible, pero no trivial en la actualidad. Tener un circuito especializado para una función específica (por ejemplo, transferir activos) es mucho más simple, por lo que el protocolo Coda comienza con una cadena de bloques no programable.

Considerando esto, la pregunta ahora es ¿Qué necesitamos para usar S(T|N)ARK recursivos para probar la validez de toda la cadena Ethereum?

Necesita construir un circuito que implemente una máquina de acceso aleatorio (RAM), es decir, una CPU que tenga acceso a los registros de memoria. Afortunadamente, dicho diseño se propuso en un artículo llamado Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture . Mike Hearn publicó una publicación mediana fantástica en 2016 describiendo en un nivel superior qué es esta pequeña máquina zk-snark von Neumann. En general, este sigue siendo un circuito muy complicado donde es muy costoso ejecutar el código. Sin embargo, gracias por el hecho de que las pruebas de SNARK son paralelizables (por ejemplo, consulte DIZK), hay mucho espacio para la optimización de la generación de pruebas en paralelo, tanto entre máquinas como dentro de componentes de hardware como GPU o SNARK ASIC (no hay conocimiento de que existan hasta el momento). todavía).

Una vez que tengamos un circuito que pueda ejecutar cálculos arbitrarios, necesitaremos lenguajes que compilen hasta este código de máquina virtual. En ese momento, creo que podemos verificar sucintamente todo el historial de la cadena de bloques de Ethereum, permitiendo "nodos completos en el navegador".

Dado que llevará mucho tiempo alcanzar esto y requerirá una gran cantidad de reelaboración en el protocolo base, sería interesante crear un sistema de verificación como un servicio L2. Básicamente, podría pagar a las personas para que demuestren que una cadena determinada es válida desde su origen, lo que sería increíblemente valioso para los clientes ligeros. Esto no requiere una bifurcación dura y podría resultar ser un experimento valioso para una transición completa a una cadena basada en SNARK.

El problema aquí no es la viabilidad, eso está bastante probado, sino el enorme coste computacional (en términos de instrucciones EVM, no absoluto).

Vitalik Buterin está presionando a la comunidad para que adopte la técnica. Puede ser que esto podría ayudar si se agregan algunas funciones primitivas al llamado "conjunto de contratos precompilados" de Ethereum, donde puede encontrar cálculo elíptico, funciones hash básicas, etc.

Por el momento no es tan fácil mantenerse en los límites computacionales establecidos por EVM y Ethereum (me refiero al límite de gas, etc.).

Pero la carga computacional proviene de la generación de pruebas que solo debe hacerse una vez, no de la validación (que se haría muchas veces). Entonces no entiendo por qué ahora no se puede usar.

¿Será posible implementar esos SNARKS a nivel de protocolo para verificar toda la Blockchain de Ethereum? Si no es así, ¿por qué?

La respuesta a esta pregunta solo puede ser de naturaleza especulativa, pero aquí vamos, lo intentaré.

Eventualmente no es necesario implementar esto en la red principal. Ignis Plasma se acerca mucho a lo que estás imaginando. Eche un vistazo a " https://medium.com/plasma-ignis/presenting-ignis-plasma-of-fire-502fab5a6f17 ". En Ignis, usan ZK-SNARK para demostrar en la cadena principal que la cadena de plasma está ejecutando el código según lo acordado por los participantes.

En general, gracias a bibliotecas como ZoKRates (y recientemente se agregó soporte para sha256), la aplicación de ZK-SNARK está al alcance de la mano en Ethereum. Ya hay PoC sobre la reimplementación de Zcash. Véase ZKDAI. Sin embargo, quedan dos problemas principales: el cálculo intensivo de recursos de la prueba (hecho fuera de la cadena) y la configuración confiable y los desechos tóxicos. La verificación en cadena es O(1), sin embargo los costos de gas están por encima de 1M de gas, lo cual sigue siendo muy costoso, pero podría considerarse factible. Y podemos esperar ver cómo se empujan los límites en el futuro.