¿Qué es un zk-STARK y cómo funciona?

¿Qué es un zk-STARK?
Un zk-STARK es una forma criptográfica de demostrar que un cálculo es correcto, sin que quien verifica la proof tenga que volver a ejecutar el cálculo completo. Gracias a la propiedad de zero-knowledge, además, ciertos datos utilizados en el cálculo pueden permanecer ocultos.
La sigla significa Zero-Knowledge Scalable Transparent ARgument of Knowledge. Suena técnico, pero sus componentes se pueden explicar con claridad:
- Zero-Knowledge: puede demostrar que algo es correcto sin revelar la información secreta subyacente.
- Scalable: incluso con cálculos grandes, la proof puede verificarse de forma relativamente eficiente.
- Transparent: no se necesita una trusted setup. Por tanto, no es necesario realizar previamente una configuración especial en la que se genere información secreta que después deba destruirse de forma segura.
- Argument of Knowledge: una proof válida demuestra que quien la crea dispone de la información necesaria para ejecutar correctamente el cálculo. Por ello, es extremadamente difícil falsificar una proof válida sin más.
En cripto, esto resulta especialmente útil cuando se realizan grandes cálculos fuera de la blockchain. Por ejemplo, un sistema puede procesar muchas transacciones off-chain y después enviar una sola proof a la blockchain. Entonces, la blockchain no necesita volver a ejecutar cada cálculo, sino que solo comprueba si la proof presentada es válida.
Ejemplo: Supongamos que miles de transacciones se procesan fuera de Ethereum. En lugar de volver a ejecutar todas esas transacciones en Ethereum, un sistema puede generar un único zk-STARK que demuestre que todo el lote se procesó según las reglas. Después, Ethereum solo tiene que verificar esa proof.
La base de los STARKs fue descrita en 2018 por Eli Ben-Sasson, Iddo Bentov, Yinon Horesh y Michael Riabzev. El sistema fue diseñado para hacer que grandes cálculos sean verificables de forma eficiente sin trusted setup.
Puntos clave
- Un zk-STARK demuestra que un cálculo se ha ejecutado correctamente sin volver a hacerlo por completo.
- Zero knowledge puede mantener oculta la entrada privada, pero no está presente automáticamente en todas las aplicaciones STARK.
- Los STARKs no necesitan una trusted setup con parámetros secretos.
- En los rollups, muchas transacciones off-chain pueden verificarse en una blockchain con una sola validity proof.
- La técnica puede utilizarse tanto para la escalabilidad de blockchain como para cálculos verificables fuera de cripto.
¿Cómo funciona un zk-STARK?
Un zk-STARK transforma un cálculo grande en una forma mucho más eficiente de verificar. La parte que ejecuta el cálculo, el prover, crea después una proof criptográfica. El verifier comprueba esa proof sin volver a ejecutar el cálculo original completo.
Dicho de forma sencilla: el prover realiza el trabajo pesado de cálculo y el verifier comprueba, mediante una serie de controles criptográficos y matemáticos, si el resultado es correcto.
A grandes rasgos, funciona así:
-
El cálculo se convierte en reglas matemáticas: Primero se establece a qué reglas debe ajustarse cada paso del cálculo. En los STARKs, esto suele hacerse mediante una llamada Algebraic Intermediate Representation (AIR). Puede entenderse como una descripción matemática de lo que está permitido y lo que no durante el cálculo.
-
El prover registra todos los pasos de cálculo: El prover ejecuta el cálculo y crea una llamada execution trace. Puede verse como una gran tabla en la que se registran los distintos pasos del cálculo.
-
Los datos se fijan criptográficamente: El prover procesa estos datos matemáticamente y los fija mediante commitments criptográficos, por ejemplo con un Merkle tree. De ese modo, el prover no puede modificar los datos posteriormente sin más.
-
El verifier comprueba una selección de los datos: Después se realizan comprobaciones en puntos imprevisibles. El verifier verifica, entre otras cosas, si los datos coinciden con los commitments fijados previamente y si se han seguido las reglas matemáticas del cálculo. Los STARKs utilizan para ello, entre otras cosas, una técnica llamada FRI. Esta permite comprobar de forma eficiente si las funciones matemáticas utilizadas tienen la forma correcta, sin verificar todos los datos por separado.
-
La proof se verifica: Si todas las comprobaciones tienen éxito, el verifier obtiene una fuerte certeza criptográfica de que el cálculo se ha ejecutado correctamente. Para ello no es necesario volver a ejecutar el cálculo completo. Cuando se utiliza en una blockchain, el prover puede enviar la proof final a un smart contract. Ese contrato verifica la proof y solo acepta el nuevo resultado cuando esta es válida. StarkWare, por ejemplo, utiliza verificadores on-chain en Ethereum para comprobar proofs STARK.
Ejemplo: Supongamos que un rollup procesa 1.000 transacciones fuera de Ethereum. El rollup ejecuta todos los cálculos y luego crea una proof que demuestra que las transacciones se procesaron según las reglas. Ethereum no necesita volver a ejecutar las 1.000 transacciones. En su lugar, un smart contract verifica la proof. Si es válida, puede aceptarse el nuevo estado del rollup.
Esto hace que los zk-STARKs sean especialmente interesantes para la escalabilidad: gran parte del trabajo de cálculo puede realizarse fuera de la blockchain, mientras que la blockchain sigue pudiendo comprobar criptográficamente si el resultado es correcto.
¿Qué son las zero-knowledge proofs?
Una zero-knowledge proof permite demostrar que una afirmación es correcta sin revelar la información secreta que hay detrás de esa afirmación.
Dicho de forma sencilla: el prover muestra al verifier que algo es correcto, sin tener que compartir todos los datos subyacentes.
Una zero-knowledge proof tiene tres propiedades importantes:
- Completeness: si la afirmación es correcta y el prover ejecuta todo correctamente, el verifier puede aceptar la proof.
- Soundness: quien intenta demostrar una afirmación incorrecta solo tiene una probabilidad despreciable de lograrlo.
- Zero knowledge: el verifier no aprende información secreta adicional, salvo que la afirmación es correcta.
Ejemplo: Un sistema puede demostrar que un lote de transacciones se ha procesado conforme a todas las reglas, sin hacer públicos ciertos datos privados de esas transacciones.
En un rollup, por ejemplo, la afirmación pública puede ser que una nueva state root procede de una secuencia válida de transacciones. Qué datos permanecen ocultos depende de cómo se haya diseñado el sistema de proof y la aplicación.
Es importante saber que una validity proof no ofrece privacidad automáticamente. Un sistema puede demostrar criptográficamente que las transacciones se han procesado correctamente mientras los datos de las transacciones siguen siendo públicos. Para que exista privacidad, la propiedad de zero-knowledge debe incorporarse deliberadamente en el sistema.
¿Cuál es el papel de los STARKs?
Los STARKs son el sistema de proof que permite demostrar y verificar grandes cálculos de forma eficiente sin trusted setup.
La propiedad de zero-knowledge determina qué información puede permanecer oculta. La técnica STARK garantiza que el verifier pueda comprobar de forma eficiente si el cálculo se ha ejecutado según las reglas.
Una característica importante de los STARKs es que son transparent. No se necesita una trusted setup en la que se generen previamente parámetros criptográficos secretos que después deban destruirse de forma segura. En su lugar, el sistema se apoya, entre otras cosas, en aleatoriedad pública y funciones hash criptográficas.
Además, los STARKs utilizan técnicas como FRI, que permiten comprobar de forma eficiente si la estructura matemática detrás de la proof es correcta.
El término Argument of Knowledge significa que un prover no puede crear una proof válida sin más. Bajo los supuestos de seguridad del sistema, el prover debe disponer de la información necesaria para ejecutar correctamente el cálculo.
¿Para qué se utilizan los zk-STARKs?
Los zk-STARKs se utilizan sobre todo para ejecutar grandes cálculos fuera de una blockchain y luego demostrar con una sola proof criptográfica que el resultado es correcto. Una aplicación importante de esto son los validity rollups.
En un rollup de este tipo, muchas transacciones se procesan fuera de la capa base. Después, se envía una proof a la blockchain que demuestra que el nuevo estado se ha generado a partir del estado anterior conforme a las reglas.
Esto resulta útil porque la capa base no tiene que volver a ejecutar todos los cálculos. Así, el coste de una sola proof puede repartirse entre un gran grupo de transacciones.
Un ejemplo conocido es StarkEx. Este sistema utiliza proofs STARK para procesar grandes volúmenes de transacciones en aplicaciones como trading, pagos, gaming y NFT's. Las transacciones se agrupan, después se crea una proof y un smart contract en Ethereum la verifica.
La tecnología STARK también puede utilizarse fuera de cripto. En principio, la técnica es adecuada para situaciones en las que se desea demostrar que un cálculo grande se ha ejecutado correctamente sin que quien lo verifica tenga que volver a realizar todos los cálculos. Con zero knowledge, además, ciertos datos subyacentes también pueden permanecer ocultos.
Una proof por sí sola no resuelve todo. En los rollups, por ejemplo, sigue siendo importante dónde están disponibles los datos de las transacciones. Una proof válida demuestra que el cálculo es correcto según las reglas establecidas, pero no garantiza automáticamente la disponibilidad de todos los datos.
¿Qué blockchains utilizan STARKs?
El ejemplo más conocido de una red blockchain que utiliza proofs STARK es Starknet. Starknet es una Layer 2 sobre Ethereum que procesa muchas transacciones fuera de Ethereum y luego envía una STARK-proof a Ethereum.
Ethereum verifica esta proof para confirmar que el nuevo estado de Starknet se ha calculado correctamente. De este modo, Ethereum no tiene que volver a ejecutar por separado todas las transacciones que tienen lugar en Starknet.
StarkEx también utiliza proofs STARK, pero StarkEx no es una blockchain independiente. Es una solución de scaling que permite a distintas aplicaciones cripto procesar grandes volúmenes de transacciones fuera de Ethereum y luego demostrar criptográficamente que los cálculos se han ejecutado correctamente.
Por tanto, Ethereum no utiliza STARKs como su propio mecanismo de consenso o de transacciones. Sin embargo, la red sí puede verificar proofs STARK presentadas por aplicaciones y redes Layer 2 como Starknet.
Es importante saber que el uso de proofs STARK no significa automáticamente que las transacciones sean privadas. Starknet utiliza STARK validity proofs para demostrar que los cálculos se han ejecutado correctamente, mientras que la privacidad zero-knowledge es una propiedad aparte.
¿Cuáles son las ventajas de los zk-STARKs?
Los zk-STARKs permiten verificar grandes cálculos de forma mucho más eficiente que si cada participante tuviera que volver a ejecutar todos los cálculos.
Las principales ventajas son:
- Sin trusted setup: los STARKs no necesitan una ceremonia previa en la que se genere información criptográfica secreta que después deba destruirse de forma segura.
- Verificación eficiente: el verifier puede comprobar un cálculo grande sin volver a ejecutar cada paso por separado.
- Adecuados para la escalabilidad: una sola proof puede demostrar la ejecución correcta de un gran lote de transacciones, lo que permite a las blockchains procesar más transacciones fuera de la capa base.
- Posibilidad de privacidad: cuando zero knowledge está incorporado en el sistema, ciertos datos privados pueden permanecer ocultos mientras el cálculo sigue siendo verificable.
- Seguridad basada en hash: los STARKs se apoyan para su proving layer en funciones hash criptográficas en lugar de en pairings de curvas elípticas, que se utilizan en muchos sistemas SNARK clásicos.
Gracias a este enfoque basado en hash, los STARKs también suelen considerarse mejor preparados para un futuro con potentes ordenadores cuánticos. Los conocidos algoritmos cuánticos plantean un problema mayor para muchas construcciones basadas en curvas elípticas que para funciones hash criptográficas bien elegidas.
Eso no significa que cualquier aplicación con STARKs sea automáticamente totalmente resistente a la computación cuántica. Las funciones hash utilizadas, los parámetros, la implementación y otros componentes criptográficos del sistema siguen siendo importantes.
¿Cuáles son las limitaciones de los zk-STARKs?
Los zk-STARKs también tienen desventajas. En particular, la creación de una proof puede requerir mucha potencia de cálculo y memoria. Por tanto, el trabajo pesado no desaparece, sino que se traslada principalmente al prover.
Además, las proofs STARK suelen ser más grandes que las proofs de muchos sistemas zk-SNARK clásicos. Esto puede significar que haya que procesar más datos cuando una proof se verifica en una blockchain.
Otras limitaciones son:
- Complejidad técnica: los desarrolladores deben convertir correctamente los cálculos a una forma que pueda ser verificada por el sistema de proof.
- Coste de generación de proofs: crear proofs puede requerir mucha potencia de cálculo y, por tanto, generar costes.
- La proof solo verifica las reglas establecidas: si la lógica de la aplicación contiene un error, una proof válida solo demuestra que esas reglas erróneas se han seguido correctamente.
- La privacidad no está presente automáticamente: un sistema basado en STARK puede utilizar validity proofs sin mantener en secreto los datos de las transacciones.
En resumen: una proof STARK puede demostrar de forma muy sólida que un determinado cálculo se ha ejecutado según las reglas establecidas, pero no puede determinar si esas reglas están bien diseñadas.
¿Cuál es la diferencia entre zk-STARKs y zk-SNARKs?
Los zk-STARKs y los zk-SNARKs tienen el mismo objetivo general: demostrar de forma eficiente que un cálculo se ha ejecutado correctamente sin que el verifier tenga que volver a ejecutar el cálculo completo.
La diferencia principal está en la técnica criptográfica que se utiliza para ello.
Una ventaja importante de los zk-SNARKs es que, en muchos sistemas, las proofs pueden ser muy pequeñas. Esto los hace atractivos cuando la cantidad de datos que debe verificarse on-chain debe mantenerse lo más reducida posible.
Los zk-STARKs suelen tener proofs más grandes, pero no necesitan trusted setup y utilizan otros supuestos criptográficos. Por ello, resultan especialmente atractivos para grandes cálculos y aplicaciones en las que la transparencia de la configuración es importante.
No obstante, es importante no meter todos los zk-SNARKs en el mismo saco. zk-SNARK es un término general para varios sistemas de proof. No todos los SNARK utilizan la misma criptografía ni todas las variantes requieren el mismo tipo de trusted setup.
En ambas técnicas también se aplica que una validity proof no significa automáticamente privacidad. Zero knowledge debe formar parte del sistema de proof específico y de la aplicación.
Conclusión
Un zk-STARK es una técnica criptográfica con la que puede demostrarse que un cálculo grande se ha ejecutado correctamente sin que el verifier tenga que volver a ejecutar ese cálculo completo.
Esto hace que los zk-STARKs sean especialmente interesantes para la escalabilidad de blockchain. Los rollups pueden procesar grandes cantidades de transacciones fuera de la capa base y luego demostrar con una sola proof que el resultado es correcto.
Las ventajas importantes son la configuración transparente sin trusted setup y la verificación eficiente de grandes cálculos. A cambio, hay proofs más grandes, mucho trabajo de cálculo para el prover y complejidad técnica.
Por tanto, los zk-STARKs son sobre todo una forma de hacer que grandes cálculos sean eficientes y criptográficamente verificables. La privacidad puede formar parte de ello, pero no está presente automáticamente.