Blockchain, criptomonedas, zkSTARKs y el futuro de la privacidad en un mundo descentralizado

Gonzalo Álvarez Marañón    7 septiembre, 2020
Blockchain, criptomonedas, zkSTARKs y el futuro de la privacidad en un mundo descentralizado

En la Italia renacentista eran comunes los duelos entre matemáticos, pero no cruzando aceros, sino problemas de difícil resolución. Uno de los huesos más duros de roer en la época fueron las ecuaciones cúbicas. Conocer el método para su resolución confería una ventaja enorme en estos duelos, en los que los dos matemáticos duelistas se jugaban no solo su prestigio sino jugosas recompensas y a veces hasta la cátedra.

Uno de los enfrentamientos más famosos fue protagonizado por los matemáticos Niccolo Fontana, apodado Tartaglia por su tartamudez, y Girolamo Cardano. En 1535, en un duelo contra otro matemático, Antonio Maria del Fiore, Tartaglia aplastó a su rival tras resolver 30 cuestiones relacionadas con ecuaciones cúbicas, mientras que del Fiore no resolvió ni uno solo de sus 30 problemas. Había quedado demostrado, más allá de toda duda razonable, que Tartaglia conocía un método para resolver cúbicas, sin que hubiera revelado el método en sí. Impresionado por su victoria, Cardano le ofreció a Tartaglia encontrarle mecenas si le revelaba el codiciado método de resolución de ecuaciones cúbicas. Tartaglia accedió en 1539, bajo promesa de que no lo publicara jamás. Seis años después, Cardano lo publicó en su obra Ars Magna, alegando que lo había aprendido de otro matemático, Scipione del Ferro, y desatando la ira de Tartaglia. Éste retó a Cardano a un duelo matemático, al que acudió su discípulo, Lodovico Ferrari, quien derrotó a Tartaglia. Como resultado, Tartaglia acabó sin prestigio y sin blanca. ​

En el mundo de la seguridad de la información surgen multitud de escenarios similares en los que una entidad conoce un secreto y necesita probar a otra entidad que lo conoce, pero no es conveniente que le revele el secreto ni ninguna información parcial sobre el secreto:

  • ¿Quién gana más dinero, tu cuñado o tú? ¿Cómo podéis demostrarlo para satisfacción de toda la familia, pero sin que ninguno de los dos revele la cifra?
  • ¿Cómo demostrar la legitimidad de una transacción en una Blockchain pública, pero sin revelar ni emisor, ni receptor, ni valor transferido?
  • ¿Cómo demostrarle a una app instalada en tu smartphone que conoces la contraseña para autenticarte ante un sitio web, pero sin proporcionarle la contraseña a esa app, ni a tu smartphone, ni, incluso, al sitio web?
  • ¿Cómo puedes probar que eres mayor de edad para acceder a un servicio para adultos, pero sin revelar tu edad?
  • ¿Cómo puedes demostrar que eres ciudadano de la Unión Europea para acceder a un servicio de salud comunitario, pero sin que se sepa de qué nacionalidad?
  • ¿Cómo puedes convencer a una app de pagos de que tienes fondos suficientes en tu cuenta para una transacción, pero sin divulgar tu saldo?
  • ¿Cómo puede convencer un estado a otros de que ha destruido su arsenal militar nuclear sin dejar que inspectores neutrales entren en sus instalaciones?
  • ¿Cómo votar electrónicamente de manera que se recuente tu voto, pero sin saber a quién has votado?
  • ¿Cómo demostrar que un teorema es correcto sin proporcionar su prueba matemática?
  • ¿Cómo demostrar que conoces la solución al sudoku más complicado del mundo, sin desvelarla?

Afortunadamente, la criptografía aporta una respuesta para estos y otros muchos dilemas parecidos: las pruebas de conocimiento nulo (Zero Knowledge Proof, ZKP). Veamos con dos ejemplos mundanos cómo funcionan estas pruebas.

Pruebas de conocimiento nulo interactivas y no interactivas

Tu cuñado asegura ser capaz de distinguir a simple vista el agua bendita de Lourdes del agua del grifo, pero la verdad es que tú no te fías mucho de sus poderes místicos. Imagina que tenéis dos vasos llenos de agua, uno de Lourdes y el otro del grifo. ¿Cómo puede probarte tu cuñado que sabe cuál es cuál sin ni siquiera revelarte cuál es cuál? ¡Muy fácil! Basta con seguir los siguientes pasos:

  1. Le vendas los ojos y lanzas una moneda al aire. Si sale cara, intercambias la posición de los vasos; si sale cruz, los dejas como están.
  2. Le quitas la venda y le preguntas si los vasos han sido intercambiados o siguen en el mismo lugar.

Obviamente, no basta con desafiar a tu cuñado una sola vez, ya que podría acertar por pura casualidad el 50% de las veces. En cambio, si de verdad posee clarividencia, acertará el 100% de las veces. Por tanto, si repetís los dos pasos de la prueba n veces, la probabilidad de que tu cuñado siempre acierte por puro azar se reduce a p = (1/2)n. Por ejemplo, si es Nochevieja y no echan nada en la TV, podríais repetir la prueba 100 veces, con lo que p = 7,38×10‒31, o sea, prácticamente nula.

Este protocolo para la identificación de los vasos es un ejemplo de sistema de prueba interactivo: un probador (tu cuñado) y un verificador (tú) intercambian múltiples mensajes (retos y respuestas), típicamente dependientes de números aleatorios (idealmente, los resultados de lanzamientos de monedas no trucadas), hasta que el probador convence (prueba al verificador) la verdad de una afirmación, con una probabilidad abrumadora.

Un problema (o ventaja, según se mire) de estas pruebas interactivas es que solo el verificador queda convencido por la prueba. Tu hermana podría pensar que tu cuñado y tú os habéis conchabado para animar la cena de Nochevieja y habéis acordado de antemano los intercambios de vasos. La única forma de que el probador probara a otra persona que conoce el secreto es que esa otra persona actuara a su vez como verificador, proponiendo intercambios de vasos al azar. Y así con todas y cada una de las personas a las que tu cuñado quiera convencer de que conoce el secreto. ¡Qué agotador! ¿Cómo convencer a todos a la vez en un solo paso?

Existen otros protocolos más eficientes que permiten probar el conocimiento del secreto en un solo paso y para satisfacción de un número arbitrario de observadores. Se conocen como pruebas de conocimiento nulo no interactivas.

Por ejemplo, imagina que se ofrece un premio millonario por resolver un sudoku y ¡tú lo has resuelto! Pero tu cuñado, quien persigue la gloria más que el dinero, está dispuesto a pagarte el doble por su solución. ¿Cómo puedes probarles a la vez a él y a todos sus parientes que conoces la solución, pero sin que la vean antes de pagar por ella? ¿Tienes a mano unas cuantas barajas de cartas? ¡Entonces será fácil!

En un sudoku hay nueve filas, nueve columnas y nueve cajas. En cada una de estas agrupaciones tienen que aparecer los nueve valores del 1 al 9. En total, cada número aparece 9 veces. Si dispones de siete barajas idénticas puedes seleccionar 27 cartas para cada número, sin importar el palo: 27 ases, 27 doses, …, 27 nueves, un total de 243 cartas.

  1. Dibujas con rotulador indeleble sobre el mantel del ajuar de la abuela el sudoku del concurso, de manera que sobre cada número dado (son las pistas o números conocidos) colocas tres cartas boca arriba del valor correspondiente.
  2. Pides a todos que salgan de la sala y colocas en secreto boca abajo tres cartas con el valor adecuado sobre cada casilla por resolver. Una vez colocados todos los montoncitos de tres cartas, pides que entren todos de nuevo y ¡empieza la magia!
  3. Primero, retiras una carta de cada fila y haces nueve montones con las nueve cartas de cada fila.
  4. A continuación, retiras una carta de cada columna y haces nueve montones con las nueve cartas de cada columna.
  5. Por último, haces nueve montones con las nueve cartas de cada caja.
  6. Barajas bien por separado cada uno de los 27 montones y extiendes boca arriba las cartas de cada montón sobre la mesa. Si conocías la solución al sudoku, ¡cada uno de los 27 montones contendrá nueve cartas del 1 al 9!

Arrebatados por el júbilo, tu cuñado te hace un bizum y la abuela olvida el disgusto del mantel.

Este ejemplo demuestra cómo funciona en la práctica una prueba de conocimiento nulo no interactiva. Resultan cruciales cuando se busca que un gran número de verificadores verifiquen eficientemente una prueba.

Todo esto está muy bien para entretener a la familia en Nochevieja, pero ¿para qué sirven en el mundo real?

La idea de ZKP fue propuesta hace más de 30 años por los criptógrafos Goldwasser, Micali y Rackoff del MIT. Se consideró tan revolucionaria que mereció el primer Premio Gödel en 1993 y el Premio Turing en 2012. Sin embargo, no vio ninguna aplicación práctica en la industria… ¡hasta hoy! ZKP fue durante décadas un poderoso martillo en busca de clavos y por fin los clavos están apareciendo con la progresiva descentralización de servicios gracias a las cadenas de bloques (blockchain).

Cadenas de bloques y pruebas de conocimiento nulo en el mundo real

No, Bitcoin, Litecoin, Ethereum, incluso Monero, no son anónimos como el dinero contante y sonante, sino pseudoanónimos, o sea, que las transacciones dejan rastro en la cadena de bloques pública. Sin embargo, no todas las criptomonedas son pseudoanónimas: el uso más prominente de las ZKP hasta ahora es ZCash, una de las criptodivisas más populares, que permite transacciones anónimas. Concretamente, ZCash utiliza pruebas de conocimiento nulo no interactivas sucintas (Zero-Knowledge Succinct Non-interactive ARgument of Knowledge, zkSNARK), que permiten probar el conocimiento de un secreto en milisegundos mediante un único mensaje enviado por el probador al verificador. Gracias a las zkSNARK, en ZCash la única información registrada tras un pago es que se ha realizado una transacción válida: no queda información sobre el remitente, el destinatario o el importe.

Ethereum también ha comenzado a integrar las zkSNARK, concretamente en forma de contratos precompilados. Un contrato inteligente es básicamente un depósito de fondos que se activa una vez que se realiza una tarea determinada. Por ejemplo, tu cuñado pone 100 ETH en un contrato inteligente contigo, de manera que cuando completes la tarea acordada, obtendrás los 100 ETH del contrato inteligente. ¿Y si la tarea que tienes que hacer es confidencial y no quieres revelarle sus detalles a tu cuñado? Gracias a zkSNARK, Ethereum prueba que la tarea del contrato inteligente se ha completado sin revelar cuáles son sus detalles.

En principio, las zkSNARK pueden aplicarse a cualquier tipo de blockchain, en una capa de seguridad de conocimiento nulo (Zero-knowledge Security Layer, ZSL), útil en multitud de casos de uso en cualquier empresa. Uno de los más interesantes es la identidad descentralizada.

Blockchain, identidad descentralizada y pruebas de conocimiento nulo

Nuestros datos personales se han convertido en la mercancía con la que comercian los gigantes tecnológicos para manipular nuestro comportamiento a través de la publicidad y de las redes sociales. Las zkSNARK y Blockchain pueden trabajar muy bien en conjunto, aportando privacidad, seguridad y transparencia a la hora de intercambiar y verificar información, en áreas como el cuidado de la salud, las comunicaciones y las finanzas.

El truco reside en las soluciones de identidad basadas en cadenas de bloques. Tradicionalmente, una miríada de servidores pertenecientes a organizaciones públicas o privadas almacenan y comparten datos sobre tu persona, como DNI, fecha de nacimiento, saldo en la cuenta bancaria, contraseña (o su hash), grado de discapacidad, nacionalidad, contactos, número de teléfono, etc.

En cambio, en una solución descentralizada se almacenan credenciales verificables: permiten realizar sencillas operaciones sobre ellas, pero sin ver su valor. Por ejemplo: ¿eres mayor de edad?, ¿puedes aparcar en la plaza para discapacitados?, ¿tienes fondos para este pago?, ¿puedes volar a este país?, ¿conoces la contraseña para iniciar sesión?, etc. De esta forma, el servicio no obtiene ningún conocimiento sobre tu persona, ¡porque tu información personal no se envía en ningún momento!

Por consiguiente, no puede robarse, no puede compartirse ilícitamente, no puede comerciarse con ella. Tú eres dueño y señor de tus datos. Corda de R3 es un buen ejemplo del trabajo que se está haciendo en esta línea.

Afianzando el futuro de las ZKP

No creas que es oro todo lo que reluce. Las zkSNARK también presentan sus puntos débiles, entre ellos, los tres mayores son:

  1. Dependen de una configuración inicial de confianza entre probador y verificador: se requiere un conjunto de parámetros públicos para construir las pruebas de conocimiento nulo y, por lo tanto, transacciones privadas. Estos parámetros son tan críticos que suelen generarse por un grupo muy pequeño en el que se deposita confianza absoluta, lo que crea un posible problema de centralización. Por ejemplo, en Zcash esta fase inicial de configuración se conoce como la Ceremonia de Generación de Parámetros.
  2. La escalabilidad de las zkSNARK puede mejorarse: a medida que aumenta el tiempo de ejecución, aumenta el tiempo necesario para generar y especialmente verificar las pruebas.
  3. La criptografía subyacente está basada en curvas elípticas, lo que las vuelve vulnerables a la computación cuántica.

La superación de estas debilidades llegó en 2018 de la mano del criptógrafo Eli-Ben Sasson, inventor de las pruebas de conocimiento nulo no interacticas transparentes y escalables (Zero-Knowledge Scalable Transparent ARguments of Knowledge, zkSTARK). Estas pruebas son transparentes en el sentido de no requerir una configuración inicial de confianza porque se basan en una criptografía más sencilla a través de funciones de hash resistentes a colisiones. Este enfoque también resulta computacionalmente menos costoso y, por tanto, más escalable. Y además es resistente a los ataques de los futuros ordenadores cuánticos por apoyarse en criptografía post-cuántica. Uno de sus inconvenientes es que el tamaño de la prueba es mayor, lo que podría resultar limitante en según qué aplicaciones. Sasson ha fundado una empresa alrededor de las zkSTARK, STARKWARE, para mejorar la escalabilidad y privacidad de las tecnologías de cadena de bloques.

Por supuesto, las cadenas de bloques no son el único ámbito de aplicación de las pruebas de conocimiento nulo. Recientemente se constituyó ZKProof, una iniciativa abierta que aúna a la academia y la industria, para promover el uso seguro, eficiente e interoperable de las tecnologías de prueba de conocimiento nulo. Su misión principal es estandarizar protocolos para facilitar su adopción por la industria.

El dato por fin bajo control del usuario

Las pruebas de conocimiento nulo albergan un inmenso potencial para devolver a la gente el control de sus datos, permitiendo a otros verificar ciertos atributos de esos datos sin revelarles los datos mismos. Sin duda, las ZKP presentes y las que están por venir causarán un enorme impacto en las finanzas, el cuidado de la salud y otras industrias, al permitir todo tipo de transacciones al mismo tiempo que se salvaguarda la privacidad de los datos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *