Entre las técnicas de cifrado que se usan actualmente en entornos digitales, especialmente en aquellos donde se quiere garantizar el anonimato y la privacidad, tenemos el denominado protocolo Zero-knowledge proof o Prueba de conocimiento cero. En este artículo explicaremos en qué consiste, cómo funciona y qué aplicaciones tiene.
Contenido del artículo
¿Qué es el Zero-knowledge proof o Prueba de conocimiento cero?
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.
Por ejemplo, probar que tengo una contraseña de acceso a una aplicación, pero sin revelar ni introducir la contraseña.
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.
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 proofdeben 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.
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 puede pedir 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.
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.
Ejemplos de cifrado de conocimiento cero
Donde más ejemplos del uso de cifrado de conocimiento cero podemos encontrar es en el 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 Zero-knowledge proof. 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.
¿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 seudonimizació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.
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.
