Las pruebas de cero conocimiento y la privacidad de Zcash

in cryptocurrency •  last year 

Zcash (ZEC), una de mis criptomonedas favoritas por el altísimo nivel de anonimato que ofrece, basa su funcionamiento en las pruebas de cero conocimiento –ZKP, por sus siglas en inglés–, esta tecnología confiere a las transacciones de Zcash una privacidad inviolable.

Imagen: Apple5x1.com

Las ZKP surgieron en 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 probador intercambia mensajes con un verificador con el fin de convencerlo de que tiene el conocimiento de cierta prueba, pero sin declarar el contenido de ese conocimiento.

Antes de realizar su descubrimiento histórico, la mayoría de los sistemas de prueba se basaban en las propiedades de solidez o robustez del sistema de prueba. Siempre se supuso que el probador podría actuar maliciosamente e intentar engañar al verificador. Lo que hicieron los tres investigadores del MIT es cuestionar la moralidad del verificador en lugar de la del probador. La pregunta que se hicieron fue: ¿cómo se puede saber con certeza que el verificador no perderá el conocimiento? Y también surgieron inquietudes sobre la cantidad de conocimiento sobre el probador que el verificador conocerá durante el proceso de verificación.

Hay varias consecuencias en el mundo real de este enigma, una de las más famosas tiene que ver con la protección con contraseña. Supongamos que deseas iniciar sesión en un sitio web utilizando una contraseña. El protocolo convencional es que escribas tu contraseña la cual es enviada al servidor para su verificación, si esta coincide con el hash que está almacenado en el servidor, entonces podrás ingresar al sistema. Este sistema tiene una gran falla porque tu privacidad está a merced del servidor –que actúa como verificador–. Si el servidor se ve comprometido o atacado, tu contraseña podría ser robada y las consecuencias podrían ser nefastas. Con el fin de contrarrestar este riesgo, las pruebas de cero conocimiento son absolutamente esenciales.

En una prueba de cero conocimiento participan dos partes: el probador y el verificador. En este escenario, el probador puede demostrarle al verificador que posee un determinado conocimiento sin que el verificador sepa de qué se trata ese conocimiento.

Propiedades de una ZKP

Para que una ZKP funcione, debe cumplir con estos parámetros:

1. Completitud: si un enunciado es verdadero, un verificador honesto puede ser convencido de su veracidad por un probador honesto.
2. Solidez: si el probador es deshonesto, no puede convencer al verificador de la veracidad del enunciado mintiendo.
3. Cero conocimiento: si el enunciado es verdadero, el verificador no tendrá idea del contenido del enunciado.

La cueva de Alibabá

En este ejemplo, el probador (P) le dice al verificador (V) que conoce la contraseña de la puerta secreta en la parte posterior de la cueva. El probador debe demostrarle al verificador que conoce la contraseña, pero sin revelársela.

El probador desciende por cualquiera de los caminos –A o B–, supongamos que inicialmente decide ir por el camino A para llegar a la puerta secreta. El verificador se acerca a la entrada de la cueva sin saber cuál de los dos caminos tomó el probador, y declara que quiere ver al probador saliendo del camino B.

Imagen: Blockgeeks.com

En el gráfico, el probador efectivamente aparece saliendo del camino B, pero evento podría haber sido una simple coincidencia. ¿Qué pasaría si el probador no conocía el código de acceso, y por fortuna tomó precisamente el camino B, sin saber que el verificador le iba a pedir que salga por aquel? Para demostrar que el probador realmente conoce la contraseña de la puerta secreta, el experimento se realiza varias veces. Si el probador puede salir por el camino correcto cada vez, le demuestra al verificador que efectivamente conoce la contraseña sin que el verificador la sepa.

Veamos cómo se satisfacen las tres propiedades de la prueba de cero conocimiento –PCC– en el ejemplo de la cueva de Alibabá:

1. Completitud: como la declaración era cierta, el probador honesto convenció al verificador honesto.
2. Solidez: si el probador hubiese sido deshonesto, no podría haber engañado al verificador porque la prueba se realizó varias veces. Eventualmente, la suerte del probador se agotará en algún momento.
3. Cero conocimiento: El verificador nunca supo cuál era la contraseña, pero estaba convencido de que el probador la conocía.

¿Qué es zk-SNARKS?

La aplicación de zk-SNARKS en la tecnología blockchain es inmenso. Para comprender sus aplicaciones, es importante saber cómo funciona un contrato inteligente. Un contrato inteligente es básicamente un depósito de fondos en garantía que se activa una vez que se ejecuta una función en particular –que se cumple una condición determinada–. Por ejemplo, Lorena deposita 100 ETH en un contrato inteligente que va a celebrar con Juan. Juan debe cumplir con una tarea o condición específica para recibir los fondos. Una vez ha cumplido con la tarea, él obtendrá los 100 ETH de Lorena, según lo establecido en el contrato inteligente.

La situación se complica cuando las tareas que Juan tiene que cumplir son múltiples y confidenciales. Supongamos que ha firmado otro contrato inteligente con Lorena, Juan recibirá el pago de los 100 ETH solamente si cumple con las condiciones A, B y C. Juan no puede revelar los detalles de A, B y C a sus colaboradores porque no desea que ningún competidor se entera de dicha información. Lo que hace zk-SNARKS es probar que las condiciones A, B y C estipuladas en el contrato inteligente se han cumplido a cabalidad sin que se revele su contenido. Esto es muy útil para proteger la privacidad de los usuarios. Simplemente se revela cierta parte del proceso sin tener que mostrar la totalidad con el fin de demostrar que se está actuando honestamente.

¿Cómo funciona zk-SNARKS?

Un zk-SNARKS consta de tres 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 tenemos un programa C. El programa genera dos claves públicas –que están disponibles para las partes interesadas–: una clave de prueba (pk) y una clave de verificación (vk).

P es el probador que va a usar tres elementos como entrada. La clave de prueba (pk), la entrada aleatoria (x), que está disponible públicamente, y la declaración privada –de la cual se desea probar su conocimiento sin revelar su contenido–. Esa declaración privada se llamará w. El algoritmo P genera una prueba (prf) tal que: prf = P (pk, x, w).

El algoritmo verificador V básicamente devuelve una variable booleana. Una variable booleana únicamente tiene dos opciones, puede ser VERDADERA o puede ser FALSA. Por lo tanto, el verificador toma la clave de verificación, la entrada pública x y la prueba (prf) como entrada, tales como: V (vk, x, prf). Y devuelve como resultado VERDADERO si el probador es correcto y FALSO de lo contrario.

Ahora, el valor de "lambda" debe mantenerse confidencial porque cualquiera puede usarlo para generar pruebas falsas. Estas pruebas falsas devolverán un valor VERDADERO independientemente de si el probador realmente tiene conocimiento de la declaración privada "w" o no.

Este ha sido uno de los artículo que más me ha costado escribir ya que es muy complicado entender el funcionamiento de estas tecnologías basadas en algoritmos, espero que haya sido lo suficientemente explícito, y que esta lectura haya sido lo más agradable posible.

Por Juan Francisco Bolaños
@criptoEstratega

Si te pareció interesante esta publicación por favor dale un voto y un "resteem". ¡Gracias de antemano!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!