Qué es zkSNARKs: Spooky Moon Math. Con ethereum entrando en la fase Metropolis, introducirá varios cambios que lo harán más abstracto y amigable con la privacidad. Uno de esos cambios es la introducción del “Argumento de conocimiento sucinto y no interactivo de conocimiento cero”, también conocido como Zk-Snarks. Zk-Snarks se basa en la idea de pruebas de conocimiento cero.
En este artículo, vamos a repasar la idea de pruebas de conocimiento cero y su aplicación en la tecnología blockchain.
¿Qué son zkSNARKs: Spooky Moon Math?
Las pruebas de conocimiento cero surgieron en la década de 1980 gracias al trabajo de los investigadores del MIT Shafi Goldwasser, Silvio Micali y Charles Rackoff. Estaban trabajando en problemas relacionados con los sistemas de prueba interactivos, donde un Prover intercambia mensajes con un Verificador (más sobre probadores y verificadores más adelante) para convencerlos de que tienen conocimiento de una determinada prueba sin declarar cuál es ese conocimiento.
Antes de que hicieran su descubrimiento histórico, la mayoría de los sistemas de prueba se basaban en las propiedades de “solidez” del sistema de prueba. Siempre se asumió que el “probador” podría ser el malintencionado en cualquier escenario en el que intentará engañar al verificador. Estos 3 investigadores le dieron la vuelta a la idea al cuestionar la moralidad del verificador en lugar del probador. La pregunta que hicieron fue, ¿cómo puede alguien saber con certeza que el verificador no filtrará el conocimiento? También surgieron inquietudes en cuanto a la cantidad de conocimiento sobre el prover que el verificador llegará a conocer durante el proceso de verificación.
Hay varias consecuencias en el mundo real de este acertijo y una de las más famosas tiene que ver con la protección por contraseña. Suponga que desea iniciar sesión en un sitio web con una contraseña. El protocolo estándar es que el cliente (usted) escribirá su contraseña y la enviará al servidor, el servidor luego codificará la contraseña y la equiparará con el hash que han almacenado en su sistema. Si los valores coinciden, puede ingresar al sistema.
¿Puedes ver la gran falla en este sistema, verdad?
El servidor tiene la versión en texto plano de su contraseña y su privacidad está a merced del servidor (el verificador en este escenario). Si el servidor se ve comprometido o atacado, entonces su contraseña estará con la parte maliciosa y las consecuencias podrían ser nefastas. Para contrarrestar estos escenarios, las pruebas de conocimiento cero son absolutamente esenciales y abren camino en todos los sentidos.
Hay dos partes cuando se trata de una prueba de conocimiento cero (como se indicó anteriormente), el probador y el verificador. El conocimiento cero establece que un probador puede demostrarle al verificador que posee cierto conocimiento sin decirle cuál es ese conocimiento en realidad.
Propiedades de una prueba de conocimiento cero
Para que un ZKP funcione, debe satisfacer ciertos parámetros:
- Integridad: si la declaración es verdadera, un verificador honesto puede ser convencido de ello por un probador honesto.
- Solidez: si el prover es deshonesto, no puede convencer al verificador de la solidez de la declaración mintiendo.
- Conocimiento cero: si la afirmación es verdadera, el verificador no tendrá idea de cuál es realmente la afirmación.
Entonces, ahora que tenemos una idea básica de lo que es una prueba de conocimiento cero, veamos algunos ejemplos antes de profundizar en zk-snarks y su aplicación en la cadena de bloques.
Caso # 1 Cueva de Alibaba
En este ejemplo, el probador (P) le está diciendo al verificador (V) que conoce la contraseña de la puerta secreta en la parte posterior de la cueva y quiere probársela al verificador sin decirle realmente la contraseña.
Así que esto es lo que parece:
El Probador sigue cualquiera de los caminos A y B, supongamos que inicialmente deciden ir por el camino A y llegar a la puerta secreta en la parte de atrás. Cuando lo hacen, el verificador V entra por la entrada, sin saber qué camino tomó realmente el probador y declara que quieren ver al probador aparecer por el camino B.
En el diagrama, como puede ver, el prover sí aparece en el camino B. Pero, ¿y si fuera una mala suerte? ¿Qué pasa si el probador no conocía el código de acceso y tomó el camino B, se quedó atascado en la puerta y, por pura fortuna, el verificador le dijo que apareciera por el camino B, en el que estaban originalmente de todos modos?
Entonces, para probar la validez, el experimento se realiza varias veces. Si el probador puede aparecer en la ruta correcta cada vez, le demuestra al verificador que el probador realmente conoce la contraseña aunque el verificador no sepa cuál es realmente la contraseña.
Veamos cómo se satisfacen las tres propiedades del conocimiento cero en este ejemplo:
- Integridad: Dado que la declaración era verdadera, el probador honesto convenció al verificador honesto.
- Solidez: si el probador fue deshonesto, no podría haber engañado al verificador porque la prueba se realizó varias veces. Eventualmente, la suerte del prover tuvo que acabarse.
- Conocimiento cero: el verificador nunca supo cuál era la contraseña, pero estaba convencido de que el probador tenía posesión de ella.
Caso # 2 Encontrar a Wally
¿Recuerdas haber encontrado a Wally?
Por supuesto que sí, debe haberlo visto en alguna parte, ya sea en la vida real o en línea. Para aquellos que no lo sepan, Finding Wally es un juego en el que tienes que encontrar a “Wally” entre un mar de personas. Es un simple juego de “Encuentra al chico”. Solo para darte una idea básica, así es como se ve el juego:
Parece bastante sencillo, ¿verdad? Encuentra a este tipo entre el mar de otras personas que ves en el juego. Bien, entonces, ¿de dónde viene el concepto de conocimiento cero aquí? Imagina que hay dos personas, Anna y Carl. Anna le dice a Carl que sabe dónde está Wally, pero que no quiere mostrarle dónde está exactamente. Entonces, ¿cómo puede demostrarle que ha encontrado a Wally sin mostrar su posición exacta?
Hubo un artículo interesante de Naor, Naor y Reingold que muestra dos soluciones de conocimiento cero a este problema. Hay una “solución de tecnología media” y una “solución de baja tecnología”. Analicemos ambos.
Solución de tecnología media
La razón por la que esta solución es de “tecnología media” es porque nuestro comprobador y verificador necesitan acceso a una fotocopiadora para que esto funcione. Así es como funciona. Primero, Anna y Carl harían una fotocopia del juego original. Luego Anna, mientras se asegura de que Carl no esté mirando, recortará a Waldo de la fotocopia y luego destruirá las sobras. Después de eso, puede mostrarle el recorte de Wally a Carl y demostrar que sí sabía dónde estaba Wally, después de todo, sin indicarle su ubicación exacta a Carl.
Hay problemas con esta solución. Si bien cumple con los criterios de “conocimiento cero”, no cumple con los criterios de “solidez”. Hay muchas formas en que Anna podría haber hecho trampa aquí. Ella podría haber tenido un Wally al azar con ella desde el principio y podría simplemente mostrárselo a Carl sin saber realmente dónde estaba Wally. Entonces, ¿cuál es la solución a esto?
La solución a esto es una prueba meticulosa y cuidadosa. En primer lugar, Anna y Carl sacarán una fotocopia del juego. Luego, Carl dibujará un patrón distintivo en la parte posterior de la fotocopia. Después de eso, Carl acompañará a Anna a una habitación donde estará aislada y no tendrá ninguna posibilidad de hacer trampa. Si Anna sale con un recorte de Waldo, entonces Carl puede estar convencido de que ella realmente sabía dónde estaba Wally sin revelar la solución. Pueden repetir este experimento varias veces y Carl puede comparar los diferentes recortes de Wally para estar aún más seguro de la validez de la afirmación de Anna.
Solución de baja tecnología
Esta solución requería un equipamiento muy básico. La idea es sencilla. Consigue un cartón enorme, uno que sea el doble del tamaño del juego y recorta un pequeño rectángulo en él. Ahora, cuando Carl no está mirando, Anna puede mover el cartón en el juego de tal manera que el rectángulo esté directamente encima de Wally. Ahora, puede decirle a Carl que eche un vistazo y esto es lo que verá:
Imagen cortesía: Criptografía infantil aplicada por Naor y Reingold
Entonces, aunque Carl puede tener una idea muy básica de dónde puede estar Wally en realidad, no sabe la ubicación exacta. Por lo tanto, Anna le ha demostrado a Carl que sabe dónde está Wally sin señalar su ubicación exacta.
Caso # 3: Sudoku
Otra gran aplicación del conocimiento cero está en el Sudoku. Para aquellos que no lo saben, Sudoku es un rompecabezas japonés en el que obtienes una mesa 9X9 que se parece a esto:
La idea es llenar cada fila, cada columna y cada bloque de 3X3 con números del 1 al 9 y ningún número debe repetirse. Entonces, la solución para el rompecabezas anterior se ve así:
Como puede ver, cada fila, columna y bloque 3X3 son únicos y no se ha repetido ni un solo número. Volvamos a nuestros viejos amigos Anna y Carl. Anna ha encontrado la solución al acertijo de Sudoku y Carl, escéptico de que no le cree y quiere que Anna demuestre que sí conoce la solución. Anna quiere demostrar su honestidad, pero al mismo tiempo, no quiere que Carl sepa la solución exacta del rompecabezas. ¿Cómo lo hará? Anna utilizará Zero Knowledge para demostrar la validez de su afirmación.
En primer lugar, Carl ejecutará la solución Sudoku a través de un programa de computadora que ha sido verificado, para ser honesto y el programa ejecutará los números a través de un cifrado de sustitución elegido al azar. Digamos, para este problema en particular, el cifrado que el programa ha elegido es este:
El programa y el cifrado elegidos son tales que cada dígito tiene la misma probabilidad de ser transmutado en su sustitución que cualquier otro número. Básicamente, 1 tiene tantas posibilidades de ser transmutado como 3 y 4 tiene tantas posibilidades de ser transmutado como 9 y así sucesivamente. Entonces, usar este cifrado nos da la siguiente solución al rompecabezas anterior:
Anna obtiene la solución transmutada ahora, tenga en cuenta que Carl todavía no sabe cuál era la solución original y tampoco posee la solución transmutada. Entonces, lo que Anna hace ahora es ocultar todos los números en el rompecabezas usando un “mecanismo de caja de seguridad”, básicamente Carl no podrá ver ninguno de los números y verá una cuadrícula vacía de 9X9 frente a él.
Carl ahora tiene 28 opciones frente a él:
- Revela una fila.
- Revelar una columna.
- Revele una caja de 3X3.
- Revela la versión transmutada del rompecabezas original.
Suponga que Carl quiere saber cómo se ve la tercera fila:
Esto es lo que verá. Carl verá que cada número en la fila es único y dado que cada número posible en la solución original tenía la misma probabilidad de ser transmutado a través del cifrado, Carl no tendrá ni idea de cuál es la solución original.
Ahora supongamos que Carl decide tomar la última opción y quiere ver cómo se ve el rompecabezas original cuando se transmuta:
Una vez más, dado que el cifrado se eligió al azar y todos los números tienen la misma probabilidad de ser transmutados, Carl no tendrá idea de cuál es la solución original. Carl ahora puede revisar todas sus 28 opciones y eventualmente estará satisfecho con la validez de la declaración de Anna.
¿Por qué?
Porque, si Anna realmente estaba haciendo trampa, no hay forma de que pudiera haber encontrado un cifrado para dar soluciones únicas para las 28 opciones de Carl. Si Carl solo eligió una opción, las posibilidades de Anna de salirse con la suya son 27/28. PERO si Carl elige hacer una prueba aleatoria varias veces, suponga que elige probarla 150 veces, la elección de Anna de salirse con la suya se reduce a (27/28) ^ 150, que es <0.5%.
Entonces, veamos las propiedades de conocimiento cero de este escenario:
- Integridad: el programa de cifrado que se está utilizando ha sido verificado, para ser honesto, y tanto Anna como Carl están siguiendo el protocolo.
- Solidez: si Carl hace pruebas al azar 150 veces, las posibilidades de Anna de salirse con la suya son <0.5%.
- Conocimiento cero: Anna nunca tuvo que revelarle a Carl cuál era la solución original.
Prueba vs prueba de declaraciones
Ahora que conocemos los aspectos teóricos de las pruebas de conocimiento cero y su aplicación en varios ejemplos, ¿cuál es su aplicación práctica en blockchain? ¿Por qué todos están entusiasmados con Zcash para implementar ZKP (pruebas de conocimiento cero) y por qué todos están entusiasmados con que ethereum haga lo mismo? Antes de ampliar eso, es importante conocer un concepto teórico más importante.
¿Qué estamos probando exactamente con ZKP? En un amplio espectro, hay dos afirmaciones que puede probar utilizando ZKP. Pruebas también conocidas como hechos y prueba de conocimiento.
- Pruebas: estas son las verdades intrínsecas sobre el universo que es posible que desee probar a través de ZKP. P.ej. “El número X pertenece a un grupo Y”.
- Prueba de conocimiento: es posible que también desee demostrar que tiene conocimiento de una idea en particular sin revelar cuál es ese conocimiento en particular. Como se puede ver en los ejemplos de Sudoku, Waldo y la cueva de Alibaba dados arriba.
Es importante notar la diferencia entre estos dos porque son completamente diferentes. En el mundo de las criptomonedas, nos centramos principalmente en la “prueba de conocimiento”. Uno de los avances más importantes en la prueba de conocimiento a través de la prueba de conocimiento cero se produjo cuando Claus-Peter Schnorr, en la década de 1980, ideó el protocolo de identificación de Schnorr. Este protocolo establece los conceptos básicos de la criptografía de firma de clave moderna y muestra cómo el conocimiento cero se puede integrar sin problemas en las prácticas criptográficas modernas.
El protocolo de identificación de Schnorr
Para entender de qué se trata la identificación de Schnorr, traigamos de vuelta a nuestros viejos amigos Anna y Carl. Anna ha anunciado al mundo que tiene una clave pública y puede aceptar y recibir información a través de ella. Carl, siempre escéptico, piensa que Anna está mintiendo. La única forma en que Anna puede demostrar su honestidad es mostrándole su clave privada a Carl, pero no quiere revelar su clave privada.
Entonces, ¿cómo revelará Anna su conocimiento de su clave privada sin revelarla? Aquí es donde entra en juego el protocolo Schnorr. Antes de que siquiera comencemos a comprender cómo funciona el protocolo, hay ciertos parámetros que debe conocer:
p = Cualquier número primo.
q = factor de p-1.
“A” tal que a ^ q = 1 mod p.
Ahora tenga en cuenta, en el protocolo de Schnorr, estas 3 variables son globales. Lo que significa que cualquiera tiene conocimiento de cuáles son estas 3 variables para un escenario en particular.
Ahora llegamos a las dos claves, la clave privada secreta que llamaremos “s” y la clave pública que llamaremos “v”.
s puede ser cualquier valor siempre que 0 <s <q.
v = a ^ -s mod q.
La clave pública “v” será de conocimiento público y global junto con p, q y a. Sin embargo, SÓLO Anna tendrá conocimiento de lo que es “s”, porque esa es su clave privada.
Entonces, ahora que hemos definido la variable, veamos cómo el intercambio de información y la validez de la declaración de Anna pueden funcionar SIN que ella revele cuál es la clave privada.
Anna firma y envía un mensaje cifrado
Suponga que Anna quiere enviar un mensaje “M” a Carl codificado con su clave privada. ¿Cómo lo haría si siguiera el protocolo de Schnorr?
En primer lugar, elegirá un número aleatorio “r” tal que 0 <r <q.
Ahora calculará un valor x tal que:
X = a ^ r mod p.
Ahora que ha calculado el valor de X, va a concatenar esto con el mensaje original. ¿Qué es la concatenación? Supongamos que tenemos dos cadenas “hola” y “mundo”. Si concatenamos estos dos, obtendremos “hola mundo”. La concatenación básicamente significa agregar dos cadenas y convertirlas en una.
Entonces, ella va a concatenar M y X para obtener M || X. y va a almacenar el hash de este valor en e.
Básicamente, e = H (M || X) donde H () es la función hash.
Finalmente, cuando todo esto esté hecho, hará un cálculo final. Obtendrá un valor “y” tal que:
y = (r + s * e) mod q
Ahora que todos los cálculos terminaron, le enviará la siguiente información a Carl:
El mensaje “M”.
Las firmas e e y.
Carl recibe el mensaje y verifica la prueba de conocimiento de Anna.
Ahora Carl ha recibido la siguiente información de Anna: El mensaje (M) y las firmas (eey).
Junto con eso, tiene la siguiente información que es conocida públicamente por todos:
La clave pública de Anna “v”.
El número primo que Anna eligió “p”.
“Q” que es el factor de “p-1” que eligió Anna.
Y la “a” tal que a ^ q = 1 mod p, esto también eligió Anna.
Ahora, Carl tendrá que calcular X ’de manera que:
X ’= a ^ y * v ^ e mod p.
Ahora hagamos una simple sustitución:
Sabemos que v = a ^ -s, sustituyamos eso en la ecuación anterior y obtenemos:
X ’= a ^ y * a ^ -se = a ^ (y-s * e).
Ahora también sabemos que y = r + s * e.
Lo que significa: r = y-s * e.
Sustituyamos este valor en la ecuación anterior:
Obtenemos: X ’= a ^ r.
Como ya hemos visto anteriormente: X = a ^ r.
Entonces, técnicamente: X = X ‘.
Pero Carl no conoce el valor de “X” porque nunca recibió ese valor. Todo lo que recibió son los siguientes: El mensaje M, las firmas (eey) y la multitud de variables públicas (clave pública “v”, p, qya).
Nunca recibió una “X”, pero sabe que si Anna está diciendo la verdad, entonces X ’tiene que ser igual a X. Pero sí conoce el valor de e y el mensaje M.
Entonces, va a resolver e haciendo lo siguiente:
e = H (M || X ‘).
Tenga en cuenta que antes resolvimos para e haciendo: H (M || X).
Entonces, según esa lógica, si los dos valores de e resultan iguales, entonces eso significa X = X ‘.
Esto también significa que Anna sí tuvo la clave privada todo el tiempo y no estaba mintiendo.
Entonces, analicemos todo este escenario a través de las tres propiedades de las pruebas de conocimiento cero:
- Integridad: Carl estaba convencido de la honestidad de Anna porque al final X = X ’.
- Solidez: El plan era sólido porque la única forma en que Anna podría haber demostrado su honestidad era usando su clave privada. No podría haber mentido acerca de tener la clave privada.
- Conocimiento cero: Carl nunca descubrió cuál era la clave privada de Anna.
- El protocolo de Schnorr ofrece una aplicación criptográfica muy real de pruebas de conocimiento cero.
¿Cómo hacer que las pruebas de conocimiento cero no sean interactivas?
Con los sistemas de verificación de conocimiento cero anteriores había un gran problema. Para que funcione, el probador y el verificador deben estar en línea al mismo tiempo. En otras palabras, el proceso fue “interactivo”. Esto hizo que todo el sistema fuera ineficiente y casi imposible de ampliar. ¿No es posible que los verificadores estén en línea al mismo tiempo que los probadores todo el tiempo? Necesitaba un sistema para hacer esto más eficiente.
En 1986, Fiat y Shamir inventaron la heurística Fiat-Shamir y cambiaron con éxito la prueba interactiva de conocimiento cero por una prueba de conocimiento cero no interactiva. Esto ayudó a que todo el protocolo funcionara sin ninguna interacción. El procedimiento que hay detrás es muy sencillo.
Entonces, para darle un ejemplo, así es como solían funcionar las pruebas de conocimiento cero antes de Fiat y Shamir.
Demostremos esto usando logaritmos discretos simples.
- Anna quiere demostrarle a Carl que conoce un valor x tal que y = g ^ x a una base g.
- Anna elige un valor aleatorio v de un conjunto de valores Z, calcula t = g ^ v y envía t a Carl.
- Carl elige un valor aleatorio c del conjunto Z y se lo envía a Anna.
- Anna calcula r = v-c * x y devuelve r a Carl.
- Carl comprueba si t = g ^ r * y ^ c se cumple o no (ya que r = vc * x, y = g ^ x y por simple sustitución, g ^ (vc * x) * g ^ c * x = g ^ v = t).
- Carl no conoce el valor de x, simplemente verificando si t = g ^ r * y ^ c puede verificar que Anna sí conoce el valor de x.
Ahora bien, si bien la interacción anterior es de conocimiento cero, el problema con esto es que Anna y Carl necesitan estar en línea e intercambiar valores para que funcione.
¿Cómo puede Anna demostrarle a Carl que tiene conocimiento de algo sin que Carl esté conectado? Puede hacerlo utilizando una función hash criptográfica simple, como teorizaron Fiat y Shamir.
Veamos cómo funcionaría el ejemplo anterior de forma no interactiva:
- Anna quiere demostrarle a Carl que conoce un valor x tal que y = g ^ x a una base g.
- Anna elige un valor aleatorio v de un conjunto de valores Z y calcula t = g ^ v.
- Anna calcula c = H (g, y, t) donde H () es una función hash.
- Anna calcula r = v – c * x.
- Carl o cualquiera puede comprobar si t = g ^ r * y ^ c.
Entonces, como puede ver, las pruebas de conocimiento cero se hicieron no interactivas. Y esto fue lo que sentó las bases de Zk-Snarks.
¿Cuál es el uso de Zk-Snarks?
Zk-Snarks significa “Argumento de conocimiento sucinto y no interactivo de conocimiento cero”. Su uso en la tecnología blockchain moderna es inmenso. Para comprender su aplicación, es importante saber cómo funciona un contrato inteligente. Un contrato inteligente es básicamente un depósito de fondos que se activa una vez que se realiza una función en particular.
P.ej. Anna pone 100 ETH en un contrato inteligente que entabla con Carl. Carl tiene que hacer una tarea en particular, tras la finalización de la cual, Carl obtendrá los 100 ETH del contrato inteligente.
Esto se complica cuando las tareas que Carl tiene que hacer son confidenciales y de varios niveles. Suponga que ha firmado un contrato inteligente con Anna. Ahora, solo recibirá el pago si hace A, B y C. ¿Qué sucede si no desea revelar los detalles de A, B y C porque son confidenciales para su empresa y no desea competidores? para saber lo que tienes que hacer
Lo que hace Zk-Snarks es que demuestra que esos pasos se han tomado en el contrato inteligente sin revelar cuáles son realmente esos pasos. Es muy útil para proteger su privacidad y la de su empresa. Solo puede revelar parte del proceso sin mostrar todo el proceso en sí y demostrar que está siendo honesto acerca de sus afirmaciones.
¿Cómo funciona ZkSnarks?
Un Zk-Snark consta de 3 algoritmos: G, P y V.
G es un generador de claves que toma una entrada “lambda” (que debe mantenerse confidencial y no debe revelarse bajo ninguna circunstancia) y un programa C. Luego procede a generar dos claves disponibles públicamente, un pk de clave de prueba y una verificación clave vk. Estas claves son públicas y están disponibles para cualquiera de los interesados.
P es el probador que va a utilizar 3 elementos como entrada. La clave de prueba pk, la entrada aleatoria x, que está disponible públicamente, y la declaración privada de la que quieren probar el conocimiento sin revelar lo que realmente es. Llamemos a esa declaración privada “w”. El algoritmo P genera una prueba prf tal que: prf = P (pk, x, w).
El algoritmo de verificación V básicamente ha devuelto una variable booleana. Una variable booleana tiene solo dos opciones, puede ser VERDADERA o FALSA. Entonces, el verificador toma la clave de verificación, la entrada pública x y la prueba prf como entrada como:
V (vk, x, prf)
..y devuelve VERDADERO si el comprobador es correcto y falso en caso contrario.
Ahora, sobre el parámetro lambda. El valor de la “Lambda” debe mantenerse confidencial porque entonces cualquiera puede usarlo para generar pruebas falsas. Estas pruebas falsas devolverán un valor de VERDADERO independientemente de si el probador realmente tiene conocimiento de la declaración privada “w” o no.
Funcionalidad de ZkSnarks
Para mostrar la funcionalidad de un Zk-Snark, usaremos la misma función de ejemplo que usó Christian Lundkvist en su artículo para Consensys. Así es como se ve el programa de ejemplo:
función C (x, w)
{
return (sha256 (w) == x);
}
Básicamente, la función C toma 2 valores como entrada, un valor hash público “x” y la declaración secreta que necesita ser verificada “w”. Si el valor de hash SHA-256 de w es igual a “x”, la función devuelve VERDADERO; de lo contrario, devuelve FALSO. (SHA-256 es la función hash que se utiliza en bitcoin).
Traigamos a nuestros viejos amigos Anna y Carl para este ejemplo. Anna es el probador y Carl el escéptico es el verificador.
Lo primero que tiene que hacer Carl, como verificador, es generar la clave de prueba y verificación utilizando el generador G. Para ello, Carl necesita generar el valor aleatorio “lambda”. Sin embargo, como se indicó anteriormente, debe tener mucho cuidado con Lambda porque no puede dejar que Anna sepa su valor para evitar que cree pruebas falsas.
De todos modos, así es como se verá:
G (C, lambda) = (pk, vk).
Ahora que se generan las dos claves, Anna necesita demostrar la validez de la declaración generando la prueba. Ella va a generar la prueba usando el algoritmo de prueba P. Ella va a demostrar que conoce el valor secreto “w” que utiliza hash (al analizar mediante SHA-256) para dar la salida x. Entonces, el algoritmo de prueba para la generación de pruebas se ve así:
prf = P (pk, x, w).
Ahora que ha generado la prueba “prf”, le dará el valor a Carl, quien finalmente ejecutará el algoritmo de verificación de Zk-Snarks:
Así es como se verá:
V (vk, x, prf).
Aquí, vk es la clave de verificación y x es el valor hash conocido y prf es la prueba que obtuvo de Anna. Si este algoritmo devuelve VERDADERO, significa que Anna fue honesta y de hecho tenía el valor secreto “w”. Si devuelve FALSE, significa que Anna estaba mintiendo acerca de saber qué es “w”.
El uso de ZkSnarks en criptomonedas
Zcash es una criptomoneda lanzada por Zerocoin Electic Coin Company el 9 de septiembre de 2016 y es el primer ejemplo de una criptomoneda que combina los conceptos de la tecnología blockchain con ZkSnarks. Su objetivo es proporcionar espacios de transacción completamente seguros y protegidos para sus usuarios sin revelar detalles (como sus direcciones) a nadie.
Ethereum quiere integrar ZkSnarks cuando ingresa a su fase de Metrópolis y la forma en que planean hacerlo es creando una alianza con Zcash que incluirá el intercambio mutuo de valor. El desarrollador principal de Zcash, Zooko Wilcox, dio una presentación en DevCon2 en Shanghai que exploró el futuro de dicha alianza. Según él, hay 3 formas en que Z-Cash y, por extensión, zk-snarks podrían integrarse con ethereum.
El primer método se llama Baby Zoe (Zoe = Zcash en ethereum). Agrega un precompilador zk-snark en Ethereum y hace un mini contrato inteligente de Zcash en Ethereum. La idea es ver si el sistema Ethereum puede crear un DAPP habilitado para zk-snark en la parte superior de su cadena de bloques.
El segundo método es integrar la computabilidad de Ethereum dentro de la cadena de bloques de Zcash. Como dice Wilcox, el mayor activo de ethereum es su computabilidad y la gente quiere ver si pueden integrarlo en una cadena de bloques basada en zk-snark como Zcash. ¿Pueden las personas crear DAPPS en una cadena de bloques basada en pruebas de conocimiento cero? Eso es algo que están esperando ver.
El tercer y más emocionante aspecto es Project Alchemy. Esta es básicamente la conexión y la interoperación de las dos cadenas de bloques, de modo que uno puede moverse sin problemas entre las dos. La forma en que Zcash planea hacerlo es clonando el relé BTC. Es un script de Ethereum que se escribió para crear un cliente ligero de Bitcoin dentro de Ethereum. El clon de Zcash utilizará el mismo concepto para crear un cliente ligero de Zcash dentro de Ethereum.
Si esto funciona, tendremos el primer sistema monetario descentralizado del mundo que facilita la creación de DAPPS sin conocimiento arraigado en él.
Mirando hacia el futuro
No hay duda de que la introducción de pruebas de conocimiento cero va a ser un gran cambio de juego para Ethereum. En un mundo cada vez más abierto, conectado y supervisado, cualquier tipo de privacidad es bienvenida. Queda por ver cómo ocurre la integración, pero siguiendo los conceptos teóricos en sí, uno no puede evitar emocionarse.