Serie de blog posts cortos para Ethereum Costa Rica y Dojo Coding.
Las pruebas de conocimiento cero, o en inglés, zero-knowledge proofs (ZKPs). Son un área de la criptografía que se ha vuelto extremadamente relevante para la industria blockchain. De wikipedia:
zero-knowledge proofs is a method by which one party (the prover) can prove to another party (the verifier) that a given statement is true, while avoiding conveying to the verifier any information beyond the mere fact of the statement's truth
¿Cómo es eso de que puedo “probar que algo es cierto, sin dar más información de ese algo”?
Pensemos en la siguiente analogía: estoy jugando Where is Waldo? donde debo encontrar la figura de una persona en un mar de personas, imágenes y objetos. Quiero convencer a mis amigos que he encontrado a Waldo pero sin decirles exactamente dónde está para que así ellos puedan seguir jugando.
La manera de hacerlo es que yo (Alice) tomo un pedazo grande de cartón, hago un orificio, y pongo el pedazo grande de cartón encima del juego. De esa manera puedo probar que he encontrado a Waldo, sin revelar exactamente donde está.
Cuando remuevo el cartón, las personas pueden seguir jugando sin saber más información que en el inicio.
Integridad: Si una afirmación es verdadera, un verificador honesto puede ser convencido por un probador honesto de que posee conocimiento sobre esa afirmación.
Solidez: Si una afirmación es falsa, ningún probador deshonesto puede convencer unilateralmente a un verificador honesto de que posee conocimiento sobre la información correcta.
Cero conocimiento: Si el estado es verdadero, entonces el verificador no aprende nada más del probador aparte de que la afirmación es verdadera.
Por estas propiedades, es posible realizar las siguientes afirmaciones en el mundo blockchain:
(transacciones privadas) “Puedo demonstrar que hice una transacción siguiendo las reglas de Ethereum”
(escalabilidad) “Puedo demonstrar que estas 100 transacciónes que hice en mi Layer 2 blockchain, siguen las reglas de Ethereum”
(interoperabilidad) “Puedo demonstrar que estos tokens en blockchain A los destruí, de manera que puedo crear los mismos tokens en blockchain B”
(privacidad identidad) “Puedo demonstrar que tengo más de 18 años sin dar ninguna otra información”
(votaciones privadas) “Puedo demonstrar que puedo votar y es la primera vez que voto en esta ronda”
etc…
En resumen yo clasificaría el potencial de ZKPs en 3:
Escalabilidad
Privacidad
Interoperabilidad
Lo cual i) resuelve el Blockchain Trilemma, ii) traer privacidad de vuelta iii) permite expandir los casos de uso enormemente.
Temas dejados por fuera para otros posts:
Historia
Dev Mindset
Tipos de ZKPs
Construcciones de ZKPs
Matemática detrás de ZKPs
Tooling