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:
No hay comentarios.:
Publicar un comentario
Gracias por dejar un comentario en Segu-Info.
Gracias por comentar!