El término «zkProof» se ha popularizado recientemente en el mundo crypto como una solución de privacidad y escalabilidad. Pero este término no es nuevo, sino que existe desde 1985, acuñado por Silvio Micali, Shafi Goldwasser y Charles Rackoff en su paper «The Knowledge of Interactive Proof-Systems».
Pero, ¿qué son realmente estos sistemas y por qué se repiten tanto últimamente si es un concepto tan «antiguo?
¿Qué son los zkProofs?
«zkProof» viene del término «Zero-Knowledge Proofs» que significan «pruebas de conocimiento cero». Estas son protocolos por el cuál una parte (prover) pruede probar a otra parte (verifier) que algo es correcto, sin tener que desvelar más información que el hecho de que esta afirmación es correcta.
Pongamos un ejemplo que entendamos todos: imaginemos que Alice y Bob están jugando a ver quién encuentra antes a Wally. Tras un rato, Alice dice haberlo encontrado y Bob le pide que lo demuestre.
- En el caso de no utilizar ZKPs, Alice simplemente señalaría a Bob dónde se encuentra Wally, de forma que él ahora también sabría dónde se encuentra.
- En el caso de utilizar ZKPs, Alice tendría dos opciones
- Recortar a Wally de la imagen y mostrárselo a Bob
- Recortar un pedazo de la imagen donde se encuentre Bob y pintar todo de negro menos al personaje
Con esto, y de ninguna de las dos formas, Bob podrá ubicar dónde está Wally a menos que lo encuentre por sí mismo. Así es básicamente como funcionan las pruebas de conocimiento cero.
Las ZK proofs son una técnica criptográfica donde no se revela ningún tipo de información sobre una transacción más allá de la información necesaria para que el validador pueda verificar que esto es correcto. Estas tienen 3 propiedades:
- Finalidad: Prueba que la transacción ha sido verificada y el prover es habilitado para procesar la transacción. Cuando el estado de la transacción es verdadero, el verifier tiene la autoridad de permitir al prover acceder al input que ha solicitado anteriormente.
- Validez: Certifica que la transacción es correcta y que no forma parte de ningún fraude. Estos significa que si la situación de una transacción es otra y el estado es falso, el verifier no puede ser manipulado en ningún caso.
- Conocimiento cero: El verifier no puede tener ninguna información más allá del estado actual y la certeza de que este es verdadero o falso. Cualquier otro tipo de información que no sea imprescindible para certificar esto será ocultada
Tipos de ZKPs
El primer tipo de ZKP es denominado «interactivo», donde el prover debe convencer a cada verifier y repetir este proceso para cada uno de ellos. En este tipo de ZKP el prover debe completar una serie de acciones para convencer al verifier acerca de un hecho.
Ejemplo: Alice es ciega y quiere saber si Bob también lo es. Alice tiene en sus manos una pelota azul y otra roja. Para saber si Bob puede ver los colores o no, esta esconde sus manos detrás de la espalda y puede (o no) cambiar las bolas de mano. Si Bob acierta en un número suficiente de ocasiones si Alice ha cambiado las bolas de mano o no, esta sabrá que no es ciego.
El segundo tipo de ZKP es el denominado «no interactivo» y en este caso el prover no debe demostrar a cada verifier de forma individual que lo que está diciendo es correcto. En su lugar, este crea un sistema para que cada verifier pueda comprobar, por su propia cuenta, que lo que afirma es correcto.
¿Para qué se pueden usar las ZKPs?
Como ejemplo off-chain podríamos aplicarlo a los unicios de sesión en una web. Imaginad que en lguar de tener que escribir tu correo y contraseña en una web potencialmente peligrosa, simplemente podrías enviar una prueba de que «conoces la contraseña». También podríamos utilizarlo para verificar nuestra identidad sin tener que dar nuestro nombre y apellidos o DNI a cualquiera, en su lugar enviaríamos una prueba que demuestre que somos quien decimos ser.
Trayéndolo al campo que nos interesa, la implementación de esta tecnología en la blockchain son los zkSNARKS y zkSTARKS, que pueden ser utilizados para enviar transacciones privadas en una blockchain. En lugar de que se compartan de forma pública los detalles de las transacciones, podríamos codificar esta información a los observadores y enviarla a través de protocolos ZKP.
Ventajas de usar ZKPs
- Simplicidad: No requieren de ningún conocimiento sobre software para operar pero pueden ofrecer soluciones superiores que impacten nuestra vida diaria. Además, debido a que está completamente desencriptado y aún así es altamente seguro, puede ofrecer lo mejor de los dos mundos.
- Seguridad: Son extremadamente seguras en el envío de información, por lo que los usuarios pueden confiar en estos sin necesidad de ser expertos en programación o analíticas.
- Eficiencia: Acortan el tiempo necesario para enviar transacciones en una blockchain, mejorando la eficiencia de las mismas y mejorando la experiencia del usuario
Desventajas de usar ZKPs
- Por el momento, los ZKP dependen en algoritmos matemáticos simples que sólo pueden verificar datos numéricos. Para verificar cualquier otro tipo de información, esta debe convertirse a un formato numérico, ralentizando los procesos.
- Para establecer una probabilidad lo suficientemente alta de que algo es válido utilizando ZKP, se necesitan alrededor de +2000 computaciones para demostrarlo. Esto hace que los ZKPs requieran de mayores recursos que otros métodos criptográficos.