ZKPs en 5 minutos — probar sin revelar
Las zero-knowledge proofs —pruebas de conocimiento cero, abreviado ZKPs— son una técnica criptográfica que permite a una parte demostrarle a otra que algo es verdadero, sin revelar la información que sustenta esa verdad.
Es el siguiente paso después de la revelación selectiva. Donde selective disclosure permite mostrar solo algunos campos de una credencial, ZKPs permiten demostrar propiedades derivadas sin mostrar ningún dato directo.
La analogía clásica
Imaginate que querés demostrarle a un amigo daltónico que dos pelotas son de colores distintos —una roja y una verde— sin tener que enseñarle a distinguir los colores. ¿Cómo?
- 1Tu amigo agarra las dos pelotas, una en cada mano, y te las muestra. Vos ves cuál es cuál.
- 2Lleva las manos detrás de su espalda, y posiblemente intercambia las pelotas o no.
- 3Te muestra de nuevo las dos pelotas y te pregunta: "¿Las intercambié o no?".
- 4Si vos podés responder correctamente, con alta probabilidad, después de varias rondas, tu amigo se convence de que efectivamente sos capaz de distinguirlas, sin que vos nunca le hayas dicho qué color es cuál.
Esta es la intuición de las ZKPs: convencer a alguien de algo (acá: que vos sí distinguís los colores) sin compartir la información que te permite saberlo.
Aplicado a identidad
En credenciales verificables, las ZKPs habilitan presentaciones del tipo:
- "Soy mayor de 18" sin revelar mi fecha de nacimiento ni mi edad exacta.
- "Soy residente de la provincia" sin revelar mi domicilio.
- "Mi salario está entre $500.000 y $1.000.000" sin revelar el monto exacto.
- "Soy uno de los 50 funcionarios autorizados a firmar este documento" sin revelar mi identidad puntual.
En todos los casos, el verificador queda convencido de la propiedad sin acceder al dato subyacente. La propiedad es demostrable, pero el dato sigue siendo privado.
Diferencia con selective disclosure
| Selective disclosure | ZKPs | |
|---|---|---|
| Qué se muestra | Atributos específicos de la credencial | Propiedad derivada (cálculo sobre los atributos) |
| Ejemplo | "Mi fecha de nacimiento es 14-feb-1995" | "Soy mayor de 18" |
| Cuándo conviene | Cuando el atributo en sí es lo relevante | Cuando lo relevante es algo derivado del atributo |
| Estado de adopción | Maduro, estandarizado (SD-JWT VC) | En proceso, hay varios formatos |
La regla simple: selective disclosure te deja elegir qué columnas mostrar; ZKPs te dejan demostrar predicados que ni siquiera son columnas.
Por qué no está en todos lados todavía
Aunque las ZKPs son potentes, todavía no son el default por tres razones:
Costo computacional
Generar pruebas ZK consume más recursos que una firma directa. En el celular puede tardar segundos en vez de milisegundos.
Estandarización en curso
Los formatos —BBS+ signatures, Groth16, PLONK— todavía están consolidándose. La interoperabilidad cross-vendor está madurando.
Complejidad operativa
Diseñar circuitos ZK requiere conocimiento criptográfico que no escala a todos los equipos. La mayoría de casos de uso de identidad se resuelven con selective disclosure.
Por eso, en el portfolio de FederAI y de las wallets sobre stack Sovra, el default es SD-JWT VC. Las ZKPs entran en casos puntuales donde la propiedad que hay que demostrar es derivada y revelar el dato base sería excesivo.
Casos públicos relevantes
- Voto digital privado: demostrar que un voto fue emitido por una persona autorizada sin revelar quién votó qué.
- Beneficios sociales con umbral de ingresos: demostrar que el ingreso es menor a un umbral sin revelar el monto.
- Acceso a contenido por edad: sistemas de "age verification" que están apareciendo en Europa y Reino Unido.
- Cumplimiento regulatorio sin auditoría intrusiva: demostrar que una operación cumple criterios sin entregar el detalle de la operación.
Relacionados
- Selective disclosure — la revelación selectiva — el escalón previo, sin matemática avanzada
- SD-JWT — cómo funciona la divulgación selectiva — cómo se implementa la divulgación selectiva en producción
- AnonCreds — el formato histórico (legacy) — formato histórico que usó ZKPs como default

