Seguridad

Zero Knowledge Protocols: El Poder de los Secretos

Hola, apasionados de la seguridad y la privacidad, hoy vamos a adentrarnos en el fascinante mundo de los protocolos de conocimiento cero (Zero Knowledge Protocols), esos enigmáticos héroes de la criptografía moderna. Imagina poder demostrar que sabes un secreto sin tener que revelar ni una pizca del mismo. 

Figura 1:Zero Knowledge Protocols: El Poder de los Secretos
Suena a magia, ¿verdad? pues eso es exactamente lo que hacen los protocolos de conocimiento cero; permiten que pruebes que tienes un conocimiento específico sin divulgarlo. En un mundo donde la privacidad es oro, estos protocolos son como el Santo Grial de la seguridad.

¿Qué son las pruebas de conocimiento cero?

Se refieren a las técnicas criptográficas que permite a un “Probador” comprobar inequívocamente que conoce un dato o una información específica a un “Verificador”, sin revelar nada sobre la información misma.

Figura 2: Imagen Zero Knowledge generada con ChatGPT4.

Dentro de las pruebas de conocimiento cero, se distinguen principalmente dos tipos: los zk-STARKs y los zk-SNARKs. Los zk-STARKs son resistentes a los ataques cuánticos y requieren interacción entre el Verificador y el Probador, lo que les otorga ciertas características de seguridad únicas. 

Por otro lado, los zk-SNARKs son más ligeros y rápidos, y tienen la ventaja de no necesitar interacción entre las partes involucradas. Debido a su eficiencia y practicidad, los zk-SNARKs se han convertido en la opción predominante en la actualidad, y es en ellos donde centraremos nuestra atención en este artículo.


Ejemplo práctico de zero knowledge

Para crear una Zero Knowledge Proof necesitaremos primero un circuito conocido por ambas partes (Probador y Verificador). Este circuito está escrito en un lenguaje especializado como Circom o Zokrates. En este ejemplo vamos a ver como se haría con Zokrates ya que tiene una integración bastante visual en Remix IDE.

Figura 4: Plugin ZOKRATES en Remix IDE

En esta imagen anterior observamos el circuito arriba a la derecha, y los pasos a seguir para generar la prueba de conocimiento cero a la izquierda. Vamos a explicar los pasos uno a uno:

1.- Compile: Compilar el circuito escrito en Zokrates

def main(private field a, field b) {
    assert(a * a == b);
    return;
}

2.- Compute: El Probador pasará los valores válidos para que se cumpla el circuito. En este caso a = 3 y b = 9, siendo “a” la variable privada que no va a conocer el Verificador.

Figura 5: Creando el “witness”

3.- Setup: Se crean llaves de verificación de y de prueba a partir de un número aleatorio.

4,- Generate Proof: Se genera a partir de el paso segundo y tercero generados por el Probador.

Figura 6: Prueba generada

5.- Export Verifier: Al ser un ejemplo de un zk-SNARK no interactivo, el Verificador será un código generado a partir del circuito que permita saber si el valor de la prueba es correcto sin saber los parámetros privados. En este caso se despliega un SmartContract de Solidity con una función pública para determinar si este valor es correcto. 

Figura 7: Prueba verificada
Como parámetros hemos pasado los obtenidos en el paso Generate Proof:

La prueba:

[["0x109b7a48a253af99694912bdedc2067fcc2795cc6f7f8771bd548d3706ae7eff",
"0x30164869c99abafaa6c020cfa6c7725a46fe6e8d8d144654edb3e665355fce90"],
[["0x261c5b83bd5f59c8f62cb9b53789f34b4a8aabd3eb58cf395159d72f406d2c29",
"0x0e3f97868f33e6809a4434f3e057f40cec38c13d351b72ccb1dbe81a591252ac"],
["0x041bc3604e4864e493ae44ec0ed3873e49849e1f6612e3ce9bc4358905fe0ad4",
"0x00bcbaef597cde379b1e8f4b259dc2cc144df04edac945f8f9b5d70ef877f9e7"]],
["0x2129a223e0c8e321b3e1d832392a017bf8756185e38dead75eb4c369ac8fe97e",
"0x2a0702baf1d41279a46474b5de0e067b2a02e6403bd43bc4ffff1680eab0f7c4"]]


Las variables públicas del circuito:

["0x0000000000000000000000000000000000000000000000000000000000000009"]


El resultado obtenido:
 

Es “True” verificando así que el Probador conoce el secreto.


Posibles aplicaciones

En un futuro se prevé que con esta tecnología desbloquearemos un mundo de oportunidades con respecto a la privacidad y la autenticación con usos desde votaciones electrónicas, cumplimiento regulatorio hasta juegos y apuestas en línea. Sin embargo, en el presente, esta tecnología se está utilizando para cadenas de Blockchain y las criptomonedas. Esto se debe a que juntos son como un matrimonio perfecto entre privacidad y transparencia. 

Por un lado, tienes una cadena de bloques pública y transparente. Por otro, deseas realizar transacciones o ejecutar contratos sin revelar todos tus secretos. Aquí es donde entran los Protocolos de Conocimiento Cero, permitiendo, por ejemplo, transacciones anónimas o la verificación de contratos inteligentes sin exponer los detalles sensibles. Esta combinación ha permitido dos grandes usos dentro de las cadenas de Blockchain:

  • Privacidad: Protocolos como Zcash o Tornado Cash se benefician de esta oportunidad para ofrecer transacciones completamente anónimas, desvinculando el origen y el destino de los fondos.
    Sin embargo, debido a su funcionalidad, también se están utilizando para el lavado de dinero y están siendo sometidas a procesos judiciales tanto a los creadores como a los usuarios de los mismas.
  • Zk rollups en cadenas públicas: Los zk-Rollups son una solución de escalado que agrega múltiples transacciones en un solo lote y luego las procesa en la cadena Blockchain principal. Utilizando ZKP, los zk-Rollups pueden validar estas transacciones masivamente agrupadas sin revelar sus contenidos individuales. Esto reduce los costos de transacción manteniendo la integridad.
    Cabe aclarar que, pese a su nombre, no deberíamos enviar transacciones privadas en estas redes porque su funcionamiento es de escalado y no privacidad, ya que, en la Layer2 dónde subas tu transacción se podrá acceder al contenido como en cualquier otra cadena Blockchain pública.


Conclusión

Mirando hacia el futuro, los protocolos de conocimiento cero tienen el potencial de transformar radicalmente nuestra forma de interactuar. Así como los alquimistas soñaban con convertir los metales básicos en oro, los protocolos de conocimiento cero buscan transformar nuestra percepción de la seguridad y la privacidad, convirtiéndolos en elementos accesibles y transparentes para todos en la era digital.


Recuerda que si quieres aprender de estas tecnologías, tienes Bit2Me Academy, que es una plataforma online para aprender de Web3, BitCoin, Tokenomics o Ethereum con cursos gratuitos además del libro dedicado a “Bitcoin: La tecnología Blockchain y su investigación” de Yaiza Rubio y Félix Brezo que seguro que te ayudan a ponerte las pilas.


Más artículos de Web3, Blockchain & SmartContracts

AutorLuis García Adán (Intership en el equipo de IdeasLocas)

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.