El
Zero-knowledge Proof (ZKP)
o prueba de conocimiento cero es un protocolo criptográfico que permite a un
«probador» demostrar a un «verificador» que posee determinado conocimiento,
pero sin revelar la información que conforma ese conocimiento. Es decir,
permite al probador demostrar al verificador que se sabe algo, pero sin decir
qué es ese algo que sabe.
En esencia, una prueba de conocimiento cero es un protocolo criptográfico en
el que una parte, el demostrador, convence a otra, el verificador, de que una
afirmación es verdadera sin desvelar detalles adicionales. Este concepto
fundamental fue acuñado en 1985 por
Shafi Goldwasser,
Silvio Micali
y
Charles Rackoff
y sigue siendo la base teórica de todos los sistemas ZKP modernos.
El cifrado de conocimiento cero se basa en técnicas criptográficas que
emplean algoritmos y funciones de muy difícil reversibilidad (cifrados,
funciones hash, aritmética modular, etc.). Esto convierte a las
pruebas de conocimiento cero en evaluaciones probabilísticas,
donde es posible, aunque muy poco probable, que se produzcan errores de
verificación, puesto que la prueba puede repetirse infinidad de veces para
demostrar que se tiene la información a verificar. Por ejemplo, probar que
tengo una contraseña de acceso a una aplicación, pero sin revelar ni
introducir la contraseña.
Para que un protocolo sea considerado «Conocimiento Cero», debe cumplir tres
condiciones matemáticas estrictas:
-
Integridad (Completeness):
Si la afirmación es verdadera, un probador honesto convencerá a un
verificador honesto. -
Solidez (Soundness):
Si la afirmación es falsa, ningún probador tramposo puede convencer al
verificador (excepto por una probabilidad ínfima). -
Conocimiento Cero:
Si la afirmación es verdadera, el verificador no aprende nada más que el
hecho de que es verdadera.
Aplicado el ZKP a la protección de datos, permite cumplir con el
principio de minimización de datos y con la limitación en la accesibilidad a
los datos, recogidas en el artículo 25 del Reglamento Europeo de Protección de
Datos.
Características del Zero-knowledge Proof
Las pruebas de Zero knowledge Proof deben reunir las siguientes
características:
-
Integridad: El probador y el verificador deben ser honestos y seguir
el protocolo marcado. Es decir, se asume que el probador no miente respecto
a la información que dice tener y que seguirá las instrucciones del
verificador para demostrarlo. -
Solidez: Si el probador mintiera, el verificador nunca podría ser
convencido de que el probador posee la información verdadera, salvo en una
muy pequeña probabilidad de casos. -
Conocimiento cero: El verificador no tiene la información que el
probador posee, por lo que si el verificador no es honesto, nunca aprenderá
la información, protegiendo así el secreto.
Tipos de Zero-knowledge Proof
Existen dos tipos principales de Zero-knowledge Proof:
-
ZPK interactivos: En ellos probador y verificador deben estar
presentes en la ejecución del protocolo; el verificador va proponiendo una
serie de tareas al probador para que esta pueda demostrar de manera
suficiente que posee la información que dice poseer. -
ZPK no interactivos: Aquí no se requiere la interacción entre el
probador y el verificador al mismo tiempo, sino que el probador realiza
todas las tareas y el verificador puede comprobarlas con posterioridad. Para
poder llevarlo a cabo, es necesario usar dispositivos o software adicional.
¿Cómo funciona el ZKP?
En la base del Zero-knowledge Proof están los algoritmos que emplean en
el proceso de verificación y puede volverse más complejo aplicando el uso de
técnicas de criptografía asimétrica, pero para entender
cómo funciona el ZKP, vamos a usar el mismo ejemplo que se da siempre
para explicar este protocolo.
La mecánica básica se apoya en retos y respuestas: el verificador solicita al
demostrador ejecutar una serie de pruebas que sólo pueden completarse
correctamente si este conoce el secreto subyacente. Si el demostrador responde
sin conocer la información, las probabilidades de fallar en alguna de las
pruebas crecen hasta dejar al descubierto el engaño.
Ejemplo 1. Tenemos dos personajes, Alice y Bob, y una cueva circular,
con dos caminos (A y B), en cuyo centro hay una puerta que solo se abre usando
una contraseña. Alice conoce esta contraseña y quiere demostrárselo a Bob,
pero sin revelarle a este ni a nadie dicha contraseña. Para ello, Alice entra
en la cueva tomando uno de los caminos al azar, A. Bob llega un poco después y
le dice a Alice por qué camino debe regresar, B. Para regresar por B, Alice
debe introducir la contraseña (aunque no se la revelará a Bob) y abrir la
puerta que comunica ambos caminos.
Evidentemente, hay un 50% de probabilidades de que Alice hubiese entrado por B
y regresado sin necesidad de demostrar que posee la contraseña, pudiendo así
hacer creer a Bob que sí la tiene. Sin embargo, para asegurar que esto no
ocurre, Bob le pide a Alice que repita la prueba varias veces, reduciendo así
las probabilidades de ser engañado, porque si Alice no tuviese la contraseña,
no podría demostrar lo contrario siempre.
Ejemplo 2. Imagina que tienes un amigo que afirma que puede abrir
cualquier cerradura de combinación. En lugar de mostrarte la combinación, te
pide que pongas una cerradura y luego, sin ver la combinación, la abre. Puedes
confirmar que la ha abierto, pero sigues sin saber la combinación. En este
caso, tu amigo demuestra su habilidad y su conocimiento
sin revelar el secreto.
Ejemplo 3. Existe una clásica analogía de las «dos pelotas y el
amigo daltónico» que ilustra bien el concepto: supongamos que tienes dos
pelotas idénticas excepto por su color, una roja y otra verde. Tu amigo, sin
embargo, es daltónico y no puede distinguir los colores; para él, ambas
pelotas lucen iguales. Él duda que realmente sean diferentes, y tú quieres
convencerlo de que una pelota es roja y la otra es verde sin revelarle cuál es
cuál. ¿Cómo lograrlo?
El truco es el siguiente: le entregas ambas pelotas a tu amigo y él las
esconde detrás de su espalda. Luego toma una pelota al azar, la muestra, y la
vuelve a ocultar detrás de sí. A continuación, te pregunta si cambió la pelota
o si sacó la misma de antes. Como tú sí ves el color, podrás saber la
respuesta correcta (por ejemplo, si inicialmente mostró la pelota roja y luego
muestra una pelota verde, sabrás que la ha cambiado). Si las pelotas fueran
del mismo color, solo podrías adivinar al azar con ~50% de probabilidad de
acierto. Pero al ser de distinto color, acertarás prácticamente el 100% de las
veces. Tras repetir esta prueba varias veces, tu amigo comprobará que aciertas
en todos los casos, y concluirá con alta certeza que efectivamente puedes
diferenciar las pelotas de colores. Lo importante es que, al final de este
proceso, él habrá aprendido que las pelotas son de colores distintos, pero
nunca supo cuál es la roja ni cuál es la verde. En otras palabras, le
demostraste que tienes cierto conocimiento (saber distinguirlas) sin revelarle
el propio dato secreto.
Ejemplo 4: El
«Problema de los tres colores», también conocido como «Problema de coloración de gráficos».
En la práctica computacional, en lugar de pelotas de colores o cerraduras se
utilizan algoritmos criptográficos para generar una prueba matemática. Si la
prueba es válida, el verificador queda convencido de que la afirmación es
cierta (por ejemplo, que el probador conoce una contraseña, o que un conjunto
de transacciones es correcto) sin necesidad de ver los datos privados. Si
aplicamos el Zero-knowledge Proof a la autenticación, consistiría en
que el usuario, para autenticarse, no necesita introducir su contraseña en el
servicio al que quiera acceder, sino demostrar que tiene dicha contraseña al
verificador.
¿Para qué sirve el ZKP?
El Zero-knowledge Proof tiene diferentes aplicaciones, especialmente, y
cómo ya hemos adelantado, en el blockchain y protección de datos para proteger
la información confidencial en la cadena de bloques, de manera que puede
usarse para proteger y mantener oculta determinada información en los smart
contracts, así como en la protección de datos en la nube, puesto que, como
hemos visto, el proveedor de servicios en la nube no tendrá conocimiento de
nuestra contraseña y la información que tengamos almacenada ahí permanecerá
encriptada incluso si es robada de alguna forma.
Más centrado en la protección de datos, se puede usar para comprobar la edad
en el acceso a determinadas páginas y servicios online, para comprobar las
condiciones de nacionalidad, el voto electrónico, para comprobar la solvencia
financiera, para realizar compras seguras, para acreditar la identidad en el
derecho de acceso, etc. Y, si bien, el ZKP no elimina la información personal,
puede emplearse como una medida de pseudonimización que desvincula la
información personal del interesado.
Casos de usos de Zero-knowledge Proof
Estos son algunos casos de uso de Zero-knowledge Proof:
-
Identidad digital: Permiten autenticar usuarios en sistemas digitales
sin revelar información personal sensible. Esto es crucial en aplicaciones
como sistemas de votación electrónica o autenticación en servicios
financieros. -
Transacciones privadas: Plataformas como la citada Zcash y MantaPay
utilizan ZKP para garantizar la privacidad de sus usuarios al ocultar
detalles de las transacciones en la blockchain. -
Votaciones en blockchain: Los sistemas como
MACI (Minimum Anti-Collusion Infrastructure) garantizan votaciones
seguras y anónimas, protegiendo a los usuarios de posibles sobornos o
manipulaciones. -
Escalabilidad de blockchain: Los mencionados zk-Rollups permiten
procesar transacciones en lotes fuera de la cadena y luego validar su
integridad en la cadena principal, mejorando el rendimiento de redes como
Ethereum.
Las pruebas de conocimiento cero permiten a las personas demostrar atributos o
cualificaciones específicos manteniendo la privacidad de la información
sensible, lo que mejora la seguridad y la confianza en los procesos de
verificación de identidad digital.
-
Autenticación biométrica: Las pruebas de conocimiento cero pueden
utilizarse para verificar datos biométricos como el reconocimiento facial o
de voz sin exponer la información biométrica en bruto. Por ejemplo, un
usuario puede demostrar que posee un rostro válido a efectos de
autenticación sin revelar el propio rostro. Una persona puede acreditar su
derecho a acceder a un servicio o votar en una elección sin revelar su
nombre, dirección u otros datos sensibles. En entornos empresariales, ZKPs
facilitan auditorías, cumplimiento y compartición de datos minimizando la
exposición de información confidencial. -
Autenticación sin contraseñas: En lugar de transmitir contraseñas a
través de una red, los usuarios pueden demostrar que conocen la contraseña
mediante una prueba de conocimiento cero. Por ejemplo, un usuario puede
demostrar que conoce su contraseña sin revelar la propia contraseña al
iniciar sesión en una cuenta en línea. -
Verificación de edad: En los casos en los que se requiere la
verificación de la edad, las personas pueden demostrar que son mayores de
cierta edad sin revelar su fecha de nacimiento exacta. Por ejemplo, una
persona puede demostrar que tiene más de 18 años para acceder a contenidos
restringidos por edad sin revelar su fecha de nacimiento. -
Cumplimiento de KYC: Las pruebas de conocimiento cero pueden
facilitar el cumplimiento de la normativa «Conozca a su cliente» (KYC) en
los servicios financieros sin compartir información personal sensible. Por
ejemplo, las personas pueden demostrar que cumplen los requisitos de
conocimiento del cliente, como la residencia o la ciudadanía, sin revelar su
dirección completa o su número nacional de identidad. -
Verificación de credenciales: Las ZKP pueden utilizarse para
verificar credenciales a través de wallets de identidad como títulos
educativos, documentos oficiales o certificaciones profesionales sin revelar
los detalles específicos. Por ejemplo, un solicitante de empleo puede
demostrar que posee un título relevante sin revelar la institución exacta o
el año de graduación. -
Prueba de Humanidad: Las ZKP permiten a los usuarios verificar su
humanidad sin revelar ningún dato personal subyacente, abordando
preocupaciones críticas de privacidad en la verificación en línea. -
Combate de Bots e IA: Los mecanismos anti-bot de ZKP proporcionan una
defensa robusta contra ataques sofisticados impulsados por IA, deepfakes y
fraude automatizado, manteniendo la integridad de las plataformas digitales. -
Las soluciones de prueba de humanidad descentralizadas, que a menudo
aprovechan las ZKP, ofrecen seguridad mejorada, resistencia a la censura y
reducen la dependencia de autoridades centrales para la verificación de
identidad.
Ventajas y desventajas de la Prueba de conocimiento cero
El Zero-knowledge Proof tiene tanto ventajas como desventajas. Entre
las ventajas, la más destacada es el nivel de seguridad y privacidad que se
alcanza con esta técnica de cifrado, puesto que la información que se quiere
verificar nunca se desvela, ni siquiera ante el verificador.
Es decir, en el caso de la autenticación, la contraseña solo la tiene el
usuario, ni siquiera el proveedor del servicio va a guardar una copia de ella,
puesto que la forma de verificación no consiste en usar la contraseña, sino,
como hemos dicho, en demostrar que se tiene la contraseña. De manera que
solventaría el problema de una posible brecha de seguridad y una filtración de
datos, puesto que el proveedor no guarda ninguna copia de nuestra contraseña.
De cara la protección de datos ya lo hemos adelantado, el ZKP permite cumplir
con el principio de minimización de datos y de limitación a la accesibilidad
de los datos, pudiendo emplearse para desvincular al usuario de su
información, ya que no tiene que revelarla para poder demostrarla (por
ejemplo, si queremos demostrar que somos mayores de edad en una web, podemos
hacerlo a través de un protocolo ZKP apoyado en un tercero de confianza, que
verificará que tenemos esa edad realizando el proceso de verificación de la
información a través del algoritmo que emplee para ello).
Entre las desventajas del ZKP, está el hecho de que si perdemos la contraseña,
no podremos volver a acceder al servicio (o información o archivo, que hayamos
protegido mediante este método), ya que nos resultará imposible autenticarnos
ante el verificador.
Además, dado los cálculos que debe hacer, es un método más lento, lo que hace
que la experiencia de usuario no sea del todo cómoda.
Y en su aplicación en protección de datos puede entrañar algunas
vulnerabilidades relacionadas con el tercero de confianza, la posibilidad de
inferir datos personales basados en los metadatos asociados en el intercambio
de información entre el usuario, el tercero de confianza y el servicio de
Internet, o del cruce de los metadatos con la huella del dispositivo entre los
distintos servicios de Internet, por citar algunos.
Ejemplos de cifrado de conocimiento cero
Donde más ejemplos del uso de cifrado de conocimiento cero podemos encontrar
es en la blockchain. Uno de ellos es la criptomoneda
Zcash, que emplea zk-SNARKs
para realizar transacciones completamente cifradas. Este sistema permite
demostrar que se tienen los fondos necesarios para una transacción sin revelar
información como la identidad del usuario o la cantidad exacta de
criptomonedas.
Los zk-Rollups son otro ejemplo de la implementación de ZKP. Se trata de una solución
de escalabilidad para blockchain que agrupa múltiples transacciones fuera de
la cadena. Al presentar pruebas de validez en la red principal, se asegura la
integridad de las transacciones mientras se reduce la carga computacional.
Entre las construcciones más conocidas destacan
zk-SNARKs y zk-STARKs. Los zk-SNARKs son
Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge. Sus
ventajas principales son pruebas muy cortas y verificaciones rápidas, lo que
los hace aptos cuando el tamaño y la latencia importan. Su limitación
tradicional ha sido la necesidad de un setup inicial de confianza, aunque
avances recientes buscan mitigar ese requisito.
Los zk-STARKs (Zero-Knowledge Scalable Transparent Arguments of Knowledge),
nacen como alternativa que prioriza la transparencia y la escalabilidad. No
requieren un setup de confianza, suelen ser más resistentes a amenazas
cuánticas gracias al uso de funciones hash, y están diseñados para verificar
muchas pruebas de forma eficiente. La contrapartida suele ser un mayor tamaño
de prueba y costos de verificación más elevados.
Existen muchos tipos de ZKP y no existe una sistemática en el desarrollo de
este tipo de soluciones. Incluso hay métodos de ZKP no vinculados a
tratamiento digital y que se emplean para comprender intuitivamente este
concepto.
Pruebas de vida
Para un sistema ZKP anti-bot, un usuario podría someterse a un proceso de
detección de vivacidad biométrica. En lugar de enviar su selfie y video de
vivacidad a un servidor central, la verificación de vivacidad podría
realizarse en el dispositivo, y luego se genera una ZKP para probar que la
verificación de vivacidad se pasó con éxito de acuerdo con parámetros
predefinidos y no se detectó suplantación. La plataforma solo recibe la
prueba, no los datos biométricos, lo que garantiza la máxima privacidad al
tiempo que bloquea eficazmente los bots y los deepfakes.
La tecnología anti-bot ZKP funciona haciendo que el dispositivo de un usuario
genere una prueba criptográfica de que pasó con éxito un desafío de
verificación humana (como una prueba de detección de vivacidad o la posesión
de una firma biométrica única) sin enviar los datos brutos de ese desafío al
verificador. El verificador solo recibe la prueba, confirmando la humanidad
mientras se preserva la privacidad.
Fuentes:
