Cover photo

Un Futuro para Elecciones Transparentes con ZK

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.

En mi país, Honduras, nuestro ex-presidente ahora está en una cárcel estadounidense acusado de Narcotráfico luego de una reelección muy cuestionada.
En mi país, Honduras, nuestro ex-presidente ahora está 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.

La OEA, las regulaciones y las fuerzas armadas no han sido capaces de devolver la confianza en las elecciones.
La OEA, las regulaciones y las fuerzas armadas no han sido capaces de devolver la confianza en las elecciones.

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.

¿Qué es Zero Knowledge?

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?

La Parte Técnica: ZK y Elecciones

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.

En Estonia, puedes demostrar criptográficamente tu identidad con una tarjeta USB. En otros modelos podrías almacenarla en tu celular o incluso en una hoja de papel.
En Estonia, puedes demostrar criptográficamente tu identidad con una tarjeta USB. En otros modelos podrías almacenarla en tu celular o incluso en una hoja de papel.

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ó.

Cada votante puede presentar una Prueba de Inclusión, demostrando que es parte de una lista sin revelar quién es.
Cada votante puede presentar una Prueba de Inclusión, demostrando que es parte de una lista sin revelar quién es.

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.

Ejemplo de Prueba de Inclusión en ZK

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.

Verificación en Ethereum

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.

Ethereum hoy cuenta con una seguridad económica de mas de 80 billones de dólares, lo que lo hace la red más segura y resistente a la censura capaz de procesar votos
Ethereum hoy cuenta con una seguridad económica de mas de 80 billones de dólares, lo que lo hace la red más segura y resistente a la censura capaz de procesar votos

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.

¿Por qué No Usamos ZK Aún?

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.

Mi Nota Personal

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.