Al igual que las recientes elecciones bajo el gobierno de Nicolás Maduro, la historia de desconfianza en las elecciones se repite como un reloj en muchos países de LATAM cada 4, 5 o 6 años. Las acusaciones de fraude, votos mal contados y la conclusión en gobiernos militares son temas recurrentes. En mí país Honduras, por ejemplo, Juan Orlando Hernández, ex-presidente, ahora está preso en una cárcel estadounidense, acusado de Narcotráfico luego de una reelección muy cuestionada.

Estos problemas han hecho que las elecciones sean vistas con escepticismo. Es claro que la OEA, las reformas y las fuerzas armadas no han sido suficiente para restaurar la confianza. Tampoco el internet, pues está sujeto a la manipulación de votos electrónicos. Y aunque las blockchains, como Ethereum, resuelven el problema de la manipulación, tienen un defecto: la información es pública, lo que abre la puerta a la coerción y el soborno.

Aquí entra una tecnología relativamente reciente: Zero Knowledge (ZK). Aunque su origen data de los años 80, ha sido en los últimos años que ha dado saltos significativos, prometiendo restaurar la confianza no solo en las elecciones, sino en múltiples áreas.
Zero Knowledge, o ZK, permite demostrar algo sin revelar información adicional. Por ejemplo:
Para entrar a una discoteca: Probar que soy mayor de edad sin revelar mi edad.
Para obtener un préstamo: Demostrar que tengo suficiente salario para un préstamo sin revelar la cantidad exacta.
Para votaciones: Mostrar que soy parte de un grupo de votantes sin revelar cuál soy.
En elecciones, ZK podría permitir a los ciudadanos demostrar que tienen derecho a votar sin exponer su identidad, previniendo la coerción y el fraude. Pero, ¿cómo funciona ZK a nivel técnico?
Imagina que cada ciudadano tiene un par de llaves criptográficas: una llave pública y una llave privada. La llave pública es como tu número de identidad, mientras que la llave privada es un secreto personal que usas para probar que esa identidad te pertenece, sin necesidad de exponerla.

Una propiedad fundamental de las llaves criptográficas es que, con la llave privada, puedes generar tu llave pública, pero no al revés. Esto se logra usando funciones hash, las cuales convierten la llave privada en una llave pública. La función hash es unidireccional, lo que garantiza la seguridad de tu identidad.
hash(llavePrivada) = llavePublica
Cuando un ciudadano vota, su voto se puede incluir en una prueba de inclusión ZK. Esta prueba permite demostrar que un ciudadano está en una lista de votantes sin revelar quién es ni por quién votó.

Aquí entra en juego el concepto del Árbol Merkle, una estructura de datos que permite validar pruebas de inclusión de forma eficiente. Cada nodo del árbol es el hash de los nodos hijos, y el nodo raíz representa la lista de todos los votantes. Esto permite a cada votante generar una prueba de que está en la lista en tiempo logarítmico O(log n), sin que el sistema tenga que verificar toda la lista cada vez en tiempo lineal O(n). Este tipo de optimización es importante para poder ejecutar votaciones con un gran número de personas, ya que ZK es computacionalmente demandante, y necesitamos que cada votante pueda emitir su voto desde dispositivos personales.
inclusionProof(private: llavePrivada, public: listaVotantes) {
llavePublica = hash(llavePrivada)
existe = listaVotantes.contains(llavePublica)
return existe
}
En este pseudocódigo, la función toma como entrada la llave privada y la lista de votantes (almacenada en un Árbol Merkle). Esto genera una prueba ZK que demuestra que la llave pública del votante está en la lista, sin revelar quién es ni detalles de la llave privada.
Una vez que los votos se registran, se necesitan lugares confiables para validar las pruebas ZK y asegurarnos que nadie votó dos veces. ¿Dónde? La respuesta es Ethereum. Ethereum es una blockchain global descentralizada y resistente a la censura, donde cualquiera puede validar transacciones y pruebas. De esta manera no dependemos de gobiernos o empresas centralizadas como ser Google Cloud, Amazon Web Services, Microsoft Azure o el resto del internet al que estamos acostumbrados a usar hoy.

Con Ethereum, podemos verificar pruebas ZK de manera pública y segura. Aunque otras blockchains como Solana o Avalanche también son opciones, ninguna ofrece las garantías de seguridad y descentralización que Ethereum proporciona. La única vulnerabilidad sería lo que comúnmente conocemos como el ataque del 51%, pero hoy en día se necesitarían decenas de miles de millones de dólares para ejecutar este ataque.
Aunque la tecnología ZK ha avanzado mucho, todavía está en fases experimentales. Los lenguajes como Circom, Noir, y Zokrates permiten crear circuitos ZK, pero aún quedan desafíos por resolver, como la escalabilidad y el costo computacional de generar pruebas ZK en dispositivos personales.
Además, otro gran obstáculo es cómo manejar el emisor de identidades. Si no confiamos en el gobierno para emitir identidades, necesitaríamos soluciones alternativas como la identificación biométrica o los grafos sociales (como los proyectos BrightID y Ethereum Attestation Service), donde las personas se verifican entre sí para combatir ataques Sybil.
Años atrás, comencé como desarrollador de videojuegos profesional y fullstack, pero luego enfoqué mi carrera hacia blockchain y luego, ZK. Creo que, aunque aún hay barreras por superar, estamos más cerca de lo que parece de lograr una adopción masiva de esta tecnología, que puede resolver los problemas actuales de confianza y privacidad.
Si te interesa iniciarte en el desarrollo ZK y contribuir a un futuro donde interactuemos de manera más justa, te invito a ver mi curso introductorio completo sobre ZK, donde además podrás acceder a excelentes oportunidades laborales a nivel mundial.
Gracias por leer, también me puedes encontrar en twitter, instagram y youtube para lo más nuevo en temas de desarrollo en ZK.

