---
# System prepended metadata

title: Aplicaciones prácticas de las pruebas de conocimiento-cero en el mundo real

---

# **Aplicaciones prácticas de las pruebas de conocimiento-cero en el mundo real**
Resumido desde ["A Survey on the Applications of Zero-Knowledge Proofs".](https://arxiv.org/html/2408.00243v1)

## Introducción 



Este articulo presenta un panorama conciso de las principales aplicaciones de las **Zero-Knowledge Proofs (ZKPs)**, destacando su uso en el ámbito **blockchain** para mejorar la **privacidad transaccional**, la **escalabilidad**, la **interoperabilidad** y las arquitecturas de **capa 1 y 2**. También cubre aplicaciones en sectores **no-blockchain**, como **votación electrónica**, **protocolos de autenticación**, **verificación de modelos de machine learning** e **identidad digital**. Estas aplicaciones posicionan a las ZKPs como una tecnología clave para la **próxima generación de escalabilidad y privacidad**.


**TL;DR:**  Puedes ir directo a la sección que más te interese según tus aplicaciones favoritas.



## 1. Herramientas y Plataformas de Software ZKP

### Zero-Knowledge Virtual Machines

Una zkVM es una máquina virtual (VM) diseñada para generar una prueba verificable de forma eficiente sobre la ejecución de un cómputo arbitrario, preservando la privacidad del programa y sus datos mediante conocimiento cero.

La zkVM actúa como un circuito de conocimiento cero（ZK）programable que implementa una VM, recibe entradas públicas y privadas, y crea un certificado de ejecución válida.

La motivación para construir zkVMs surge del deseo de reducir la complejidad de crear una prueba de conocimiento cero（ZKP）.


#### Metodología

El primer paso de la mayoría de las zkVMs es recibir un programa de entrada escrito en un lenguaje de alto nivel como C++, Circom, Rust u otros. Luego, el programa se compila a bytecode que la VM puede traducir a una arquitectura de conjunto de instrucciones (ISA) generalizada, como RISCV.

Estas arquitecturas ISA son mínimas y están optimizadas para operaciones criptográficas como el hashing, con el fin de optimizar el rendimiento de la zkVM.


```mermaid
graph LR
    PC[Program Code] --> zkVM
    C[Commitments] --> zkVM
    W[Witness] --> zkVM
    
    subgraph zkVM["zkVM"]
        MM[Main Memory]
        OS[Operating System]
        R[Registers]
        CPU[CPU]
        B[Backend]
    end
    
    zkVM --> P[Proof]
    zkVM --> PO[Program Output]

```

**La fase de configuración** comienza después de que el programa ha sido interpretado y **traducido a bytecode**. Esta etapa incluye tareas como **ocultar las entradas privadas**, **inicializar un esquema de compromiso polinomial** y la **generación de claves**. Se establece un conjunto de **restricciones sobre el programa y el testigo** para garantizar la **integridad computacional** en la traza de ejecución. Cada **restricción es un polinomio** para cada declaración dentro de la traza de ejecución. 

El verificador recibe este **polinomio** y responde con un **valor aleatorio** para evaluar el polinomio del demostrador. Si el verificador concluye que el **resultado es correcto**, entonces la declaración en cuestión también se considera correcta. La zkVM se diferencia de escribir un **circuito especializado** por su **alto nivel de optimización** y la **reducción de complejidad**.


```mermaid
sequenceDiagram
    participant P as Programa
    participant D as Demostrador
    participant V as Verificador
    
    Note over P,V: Proceso zkVM Completo
    
    P->>D: Programa traducido a bytecode
    
    Note over D: Fase de configuración
    D->>D: Ocultar entradas privadas
    D->>D: Esquema compromiso polinomial
    D->>D: Generación de claves
    
    Note over D: Establecer restricciones
    D->>D: Restricciones sobre programa y testigo
    D->>D: Cada restricción = polinomio
    
    Note over D,V: Interacción de Verificación
    
    D->>V: 1. Envía polinomio
    Note right of V: Recibe polinomio de<br/>cada declaración
    
    V->>D: 2. Responde con valor aleatorio
    Note left of D: Usa valor aleatorio<br/>para evaluar
    
    D->>V: 3. Envía resultado de evaluación
    Note right of V: Verifica si es correcto
```

La zkVM se distingue de escribir un circuito especializado para cómputos por su alto nivel de optimización y la reducción de complejidad que implica diseñar un circuito. En un cómputo de conocimiento cero, se deben considerar tres sobrecargas comunes:

1.  **Range Checks:** Un chequeo de rango prueba que un elemento en un campo finito está dentro de un intervalo específico [a, b]. Debido a la variabilidad de los campos, la importancia de enteros con tamaño de bit correcto, y las operaciones intensas que se realizan, es crucial verificar que las entradas sean válidas. Esto se realiza mediante una prueba de rango que confirma que un entero cabe, por ejemplo, en 32 bits sin desbordarse.

2.  **Bitwise operations:** Casi todas las computaciones en un contexto ZK requieren operaciones bit a bit para tareas como hashing. En hardware convencional, estas operaciones están altamente optimizadas para números de tamaño estándar, no para elementos grandes en un campo finito. En contexto ZK, cada bit de un elemento del campo debe probarse, la descomposición en bits debe validarse y el resultado de la operación bit a bit debe agregarse para realizar otra operación sobre el campo. Con el hardware actual, no optimizado para ZK, esto puede generar una gran sobrecarga.

3. **Hashing:** Las primitivas tradicionales usan optimizaciones complejas para operaciones bit a bit (como en el punto 2); sin embargo, estas operaciones toman más tiempo por las razones mencionadas. Funciones hash como SHA256 se vuelven obsoletas en zkVMs a menos que se mejoren. Por eso, muchas zkVMs usan primitivas alternativas como Rescue o Poseidon, o utilizan procesadores distintos para manejar el hashing.

```mermaid
graph TB
    A["Sobrecargas en 
    Computación ZK"]
    
    A --> B["Range Checks"]
    A --> C["Operaciones Bit a Bit"] 
    A --> D["Hashing"]

    B --> B1["Verificar elemento en 
    rango [a,b]"]
    B1 --> B2["Evitar desbordamiento 
    ( ej. 32 bits)"]

    C --> C1["Hardware no optimizado 
    para ZK"]
    C1 --> C2["Cada bit debe 
    probarse"]
    C2 --> C3["Gran sobrecarga"]

    D --> D1["SHA256 obsoleto en zkVMs"]
    D1 --> D2["Alternativas ZK-friendly"]
    D2 --> D3["Rescue, Poseidon"]

    style A fill:#f8f9fa,stroke:#374151,stroke-width:3px
    style B fill:#f3f4f6,stroke:#6b7280
    style C fill:#f3f4f6,stroke:#6b7280
    style D fill:#f3f4f6,stroke:#6b7280
    
```




**Conclusión**

En conclusión, las **zkVMs** ofrecen un **espectro más amplio de aplicabilidad** gracias a su compatibilidad con **cómputo general y especializado**. Una **zkVM** está diseñada para admitir una **amplia gama de cálculos**, a diferencia de algunos sistemas de **pruebas de conocimiento cero（zero-knowledge proof systems）**.

Esta **flexibilidad** permite a los desarrolladores implementar **algoritmos complejos** y **cómputos diversos**, mientras se benefician de las garantías de **privacidad** y **seguridad** inherentes a las **pruebas de conocimiento cero**.

### Domain Specific Languages



Un **zkDSL** (lenguaje de dominio específico para conocimiento cero) es un **lenguaje de programación** diseñado específicamente para proporcionar al programador una **conexión entre una representación de alto nivel de un programa** y las **complejidades de bajo nivel** de una **prueba de conocimiento cero（ZKP）**, como la creación de circuitos.


El objetivo de un **zkDSL** es **traducir un lenguaje de alto nivel a un circuito aritmético** que pueda ser pasado a un **sistema de prueba** para generar una **prueba（proof）de la ejecución** de un programa determinado.

Algunos de los **circuitos más comunes** a los que se apunta son **R1CS**, **Plonk** y **AIR**.



```mermaid

graph TD

    %% Nodo raíz
    Aritmetizacion[Esquemas de Aritmetización]

    %% Subesquemas
    Aritmetizacion --> R1[R1CS]
    Aritmetizacion --> P1[Plonk]
    Aritmetizacion --> A1[AIR]

    %% Herramientas por esquema
    R1 --> Bellman
    R1 --> O1JS
    R1 --> Gadgetlib
    R1 --> Circom
    R1 --> Pequin
    R1 --> Zokrates
    R1 --> Zinc
    R1 --> Leo

    P1 --> Noir
    P1 --> Halo2

    A1 --> Cairo

```

```mermaid
---
title: Proceso General de zk-DSL
---
graph LR
    A[Código] --> B(Sistema de Restricciones)
    B --> C{Compilador Criptográfico}
    C --> D[Sistema de Prueba]
    D --> E(Prueba)

```


#### Desafíos
Aunque los **zkDSLs** logran el objetivo de la **abstracción**, deben considerarse algunos **inconvenientes importantes**.

Primero, los zkDSLs enfrentan **desafíos en la gestión de memoria**, debido a las **complejidades inherentes a las pruebas de conocimiento cero（ZKP）** y a los **cómputos criptográficos**. La necesidad de manejar **primitivas criptográficas**, **circuitos booleanos a gran escala** y **estructuras de datos** introduce una complejidad que los sistemas tradicionales de gestión de memoria pueden tener dificultades para resolver.




Segundo, los zkDSLs tienen una **historia de problemas con ciertos paradigmas de desarrollo**, como la **recursión**, los **condicionales convencionales** (excluyendo los ternarios), las **variables mutables** y las **estructuras definidas por el usuario**, lo que provoca **desafíos únicos al programar**.

La **recursión**, un componente esencial en la programación tradicional, enfrenta obstáculos en este contexto debido a la **ausencia de una pila directa** y a la necesidad de seguir un **camino determinista** requerido por el **cómputo basado en circuitos**.

#### Aplicaciones con DSL

- Circom: representa tanto un **lenguaje de programación** como un **compilador** diseñado para la creación de **circuitos aritméticos**, los cuales luego se compilan en **sistemas de restricciones de rango 1（Rank-1 Constraint Systems, R1CS）**. Este **proceso complejo** permite a los programadores que usan Circom expresar circuitos aritméticos a nivel de **restricciones**, mientras que el compilador genera un archivo con la descripción en **R1CS**, así como programas en **WebAssembly（WASM）** y **C++**.

![circom-logo-black](https://hackmd.io/_uploads/HkymVd6Lxe.png)


![image5](https://hackmd.io/_uploads/SJE6EO68xe.png)


- **O1JS:** es una biblioteca especializada en **generar y validar pruebas de conocimiento cero（ZK）** derivadas de **R1CS**. **O1JS** es un **kit de herramientas completo** que se ejecuta en **Node** o en el **navegador**, y puede integrarse en cualquier base de código existente escrita en **TypeScript**. También es **compatible con la blockchain de Mina**, y puede utilizarse para desarrollar **ZkApps** para **Mina**, **Protokit** y **Zeko**.



```mermaid
graph TD
    A[o1js SDK TypeScript] --> B[Compilar Programa]
    A --> C[Ejecutar Programa]
    B --> D[Capa de Bindings]
    D --> E[Representación Intermedia de Restricciones OCaml]
    C --> F[Ejecución de Prueba TypeScript]
    F --> G{¿Algún Problema?}
    G -->|No| H[Ejecutar en Capa de Bindings]
    G -->|Sí| I[Lanzar Error / Depurar]
    E --> J[Pickles: Sistema de Pruebas Wrap OCaml]
    E --> K[Kimchi: Sistema de Pruebas Step Rust]
    H --> L[Generar Prueba]
    J --> L
    K --> L
```

- **Leo** es un **lenguaje de programación** diseñado para el desarrollo de **aplicaciones de conocimiento cero verificadas formalmente** en la blockchain.Más allá de los beneficios inherentes como la **privacidad de la aplicación** y la **mitigación del valor máximo extraíble（MEV）**, Leo presenta **otras dos propiedades útiles**. Primero, las aplicaciones desarrolladas en Leo se someten a una **verificación formal** con respecto a sus **especificaciones de alto nivel**.Segundo, la **verificación sucinta** de las aplicaciones es accesible para **cualquier persona**, sin importar el **tamaño de la aplicación**.

![download (3)](https://hackmd.io/_uploads/Hk03s_6Lgx.jpg)


- Noir: Noir es un lenguaje **open-source** que facilita crear programas de **zero-knowledge (ZK)** de forma segura y sencilla, sin requerir conocimientos avanzados en matemáticas o criptografía. Funciona en la nube y dispositivos móviles, para casos como **private authentication** y verificación de pruebas en **blockchain**. Usa una compilación en dos etapas (a **ACIR** y luego a circuitos aritméticos), lo que da flexibilidad y simplifica el desarrollo de aplicaciones ZK complejas.
![_A8Fb1a6_400x400](https://hackmd.io/_uploads/By3PZKTLgx.png)

##### Conclusión

Los **zkDSLs** encuentran utilidad en escenarios de computación general, donde su aplicación se extiende a campos como la **data privacy**, **machine learning**, cálculos distribuidos seguros y análisis confidencial de datos. En aplicaciones criptográficas y protocolos de seguridad, los **zkDSLs** juegan un papel clave al permitir la creación de pruebas para declaraciones relacionadas con propiedades criptográficas, mejorando así la seguridad y privacidad de las transacciones digitales y la comunicación.

### Librerias y Frameworks

Para los desarrolladores, la dificultad radica en crear código reutilizable y reducir la redundancia, especialmente en las pruebas ZK, donde restricciones como el tamaño del **circuito** y el uso de **gas** pueden imponer limitaciones significativas. Para enfrentar estos desafíos, han surgido múltiples librerías que ofrecen implementaciones de "gadgets" criptográficos, facilitando la construcción de instancias de **Rank-1 Constraint Systems (R1CS)** a partir de clases modulares de "gadgets".

Para facilitar el proceso de generación y verificación de pruebas, se utilizan curvas elípticas. Las operaciones sobre estas curvas están relativamente estandarizadas y no siempre necesitan ser recreadas, por lo que las librerías evitan la duplicación de código en esta área. La combinación de gadgets para circuitos y curvas elípticas permite la composición modular de una aplicación junto con un sistema de pruebas compatible, como **Groth16**, Plonk o **Bulletproofs**. 

```mermaid
graph TB
    subgraph ZK["🔐 Componentes de Pruebas de Conocimiento Cero"]
        A[🔧 Gadgets de Circuito]
        B[🎯 Sistemas de Prueba]
        C[📐 Curvas Elípticas]
    end
    
    subgraph CG["Gadgets de Circuito"]
        A1[➕ Operaciones Aritméticas]
        A2[🔀 Booleanos]
        A3[📊 Pruebas de Rango]
        A4[🔢 SHA256]
        A5[🔄 MIMC]
        A6[🌊 Poseidon]
        A7[🔑 Pedersen]
        A8[⚡ blake2]
        A9[🔍 Búsquedas]
    end
    
    subgraph PS["Sistemas de Prueba"]
        B1[🎯 Groth16]
        B2[📋 Plonk]
        B3[👑 Halo]
        B4[🎯 Bulletproofs]
        B5[🎪 Pinocchio]
        B6[🐠 Marlin]
        B7[💎 Gemini]
        B8[🔊 Sonic]
        B9[🛑 Brakedown]
        B10[⚔️ Spartan]
    end
    
    subgraph EC["Curvas Elípticas"]
        C1[🔵 BLS12-381]
        C2[🔷 BLS12-377]
        C3[🟨 BN254]
        C4[🟢 MNT-298]
        C5[🟣 MNT-753]
        C6[🟠 Jubjub]
        C7[⭐ Secp256k1]
        C8[🎯 Curve25519]
        C9[🔶 BN256]
    end
    
    A --> CG
    B --> PS
    C --> EC
    
    classDef mainNode fill:#2563eb,stroke:#1e40af,stroke-width:3px,color:#fff
    classDef subNode fill:#3b82f6,stroke:#2563eb,stroke-width:2px,color:#fff
    classDef itemNode fill:#dbeafe,stroke:#3b82f6,stroke-width:1px,color:#1e40af
    
    class A,B,C mainNode
    class CG,PS,EC subNode
    class A1,A2,A3,A4,A5,A6,A7,A8,A9,B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,C1,C2,C3,C4,C5,C6,C7,C8,C9 itemNode
```

Estas **bibliotecas** desempeñan un papel crucial al **abstraer las complejidades** del preprocesamiento de manera **modular**, lo que permite a los desarrolladores enfocarse en aspectos de diseño de más alto nivel y promueve la **reutilización de código** en aplicaciones de **ZKP**. Este enfoque en la **modularización** y la **abstracción** mejora la **eficiencia del desarrollo** y fomenta la **innovación** dentro del ámbito de **ZKP** al incentivar la **colaboración** y el **intercambio de conocimiento** entre desarrolladores.



Un aspecto **crucial** es la operación sobre **campos pequeños**, como lo demuestran sistemas como **ethSTARK** y **Plonky2**. A diferencia de los grupos tradicionales de **curvas elípticas**, que requieren tamaños de campo grandes (por ejemplo, **256 bits**) para niveles de seguridad estándar, estos sistemas utilizan campos primos más pequeños (por ejemplo, **64 bits**). Este enfoque aprovecha la eficiencia de la **aritmética en campos pequeños**, resultando en un rendimiento de prueba de **última generación**.

La **flexibilidad** en la selección del campo es otra consideración **crítica**. Estos esquemas suelen utilizar **campos estructurados computacionalmente**, lo que ofrece oportunidades adicionales de **optimización**. Finalmente, estos **frameworks** y **bibliotecas** priorizan el uso de primitivas criptográficas más **económicas**, asegurando implementaciones de **ZKP** rentables y eficientes.


```mermaid
flowchart LR
    subgraph tradicional ["🔒 Enfoque Tradicional"]
        A["📐 Curvas Elípticas<br/>256 bits"]
        B["⚖️ Campos Grandes<br/>Seguridad Estándar"]
        C["🐌 Rendimiento<br/>Limitado"]
    end
    
    subgraph moderno ["⚡ Enfoque Moderno"]
        D["📊 ethSTARK<br/>64 bits"]
        E["🚀 Plonky2<br/>64 bits"]
        F["⚡ Aritmética<br/>Ultra-eficiente"]
        G["🎯 Rendimiento<br/>Última Generación"]
    end
    
    subgraph beneficios ["💡 Beneficios Clave"]
        H["🔄 Flexibilidad<br/>de Campo"]
        I["⚙️ Campos<br/>Estructurados"]
        J["💰 Primitivas<br/>Económicas"]
        K["💲 Implementaciones<br/>Rentables"]
    end
    
    A --> B --> C
    D --> F
    E --> F
    F --> G
    
    H --> I
    I --> J
    J --> K
    
    moderno -.-> beneficios
    
    classDef old fill:#ef4444,stroke:#dc2626,stroke-width:2px,color:#fff,rx:8
    classDef new fill:#06b6d4,stroke:#0891b2,stroke-width:2px,color:#fff,rx:8
    classDef benefit fill:#10b981,stroke:#059669,stroke-width:2px,color:#fff,rx:8
    
    class A,B,C old
    class D,E,F,G new
    class H,I,J,K benefit
    
    style tradicional fill:#fef2f2,stroke:#fca5a5,stroke-width:2px,rx:10
    style moderno fill:#ecfeff,stroke:#67e8f9,stroke-width:2px,rx:10
    style beneficios fill:#d1fae5,stroke:#6ee7b7,stroke-width:2px,rx:10
    
```


Abstraer las operaciones en **campos finitos** es de suma importancia en las pruebas de **conocimiento cero (ZKP)**. La implementación eficiente de **pairings**, multiplicación escalar y multiplicación multi-escalar (**MSM**) sobre curvas elípticas compatibles con **pairing** es esencial para la eficiencia computacional. No todos los cálculos se ajustan a la aritmética módulo **p**, lo que requiere el desarrollo de **circuitos** para operaciones en campos no nativos.

Alternativas compatibles con **SNARK**, como **Poseidon Hash**, **Keccak Hash**, **Pedersen Hash**, **MIMC Hash** y **Ed25519** (firma **EdDSA**), están optimizadas para su uso dentro de **SNARKs**. A pesar de estas optimizaciones, las aplicaciones prácticas a menudo requieren primitivas optimizadas para **CPU** debido a las limitaciones en la aritmética de campos no nativos, lo que incrementa la complejidad y el tiempo de verificación.

```mermaid

flowchart LR
    subgraph core ["🔥 Campos Finitos"]
        A["🔗 Pairings<br>Rápidos"]
        B["✖️ Mult.<br>Escalar"]
        C["📈 MSM<br>Multi-Escalar"]
        D["📏 Curvas<br>Elípticas"]
    end
    
    subgraph challenge ["🚨 Desafíos"]
        E["❌ No Módulo p"]
        F["🛠️ Circuitos<br>Exóticos"]
    end
    
    subgraph snark ["⚡ SNARKs"]
        G["🌊 Poseidon"]
        H["🔢 Keccak"]
        I["🔐 Pedersen"]
        J["🎰 MiMC"]
        K["🖋️ Ed25519"]
    end
    
    subgraph reality ["🌐 En la Práctica"]
        L["💻 Primitivas<br>CPU"]
        M["⚖️ Campos<br>Limitados"]
        N["📊 Más<br>Complejidad"]
        O["⏳ Verificación<br>Lenta"]
    end
    
    %% Flujo dinámico
    A -->|🚀| B -->|🚀| C -->|🚀| D
    E -->|⚡| F
    G -->|🔥| H -->|🔥| I -->|🔥| J -->|🔥| K
    L -->|🛤️| M -->|🛤️| N -->|🛤️| O
    
    %% Conexiones entre subgrafos
    core -->|🔗| challenge
    challenge -->|⚡| snark
    snark -->|💡| reality
    
    %% Estilos dinámicos
    classDef operation fill:#22d3ee,stroke:#0ea5e9,stroke-width:3px,color:#000,rx:12,ry:12
    classDef problem fill:#f87171,stroke:#dc2626,stroke-width:3px,color:#000,rx:12,ry:12
    classDef solution fill:#a78bfa,stroke:#7c3aed,stroke-width:3px,color:#000,rx:12,ry:12
    classDef practical fill:#facc15,stroke:#d97706,stroke-width:3px,color:#000,rx:12,ry:12
    
    class A,B,C,D operation
    class E,F problem
    class G,H,I,J,K solution
    class L,M,N,O practical
    
    %% Estilos de subgrafos
    style core fill:#e0f2fe,stroke:#0ea5e9,stroke-width:3px,rx:20,ry:20
    style challenge fill:#fee2e2,stroke:#f87171,stroke-width:3px,rx:20,ry:20
    style snark fill:#ede9fe,stroke:#a78bfa,stroke-width:3px,rx:20,ry:20
    style reality fill:#fef3c7,stroke:#facc15,stroke-width:3px,rx:20,ry:20

```

#### Aplicaciones

- **Arkworks:** **Arkworks** es un ecosistema en **Rust** diseñado para el desarrollo con **zkSNARKs**, que ofrece un conjunto de **bibliotecas** para simplificar la creación de aplicaciones. Estas bibliotecas implementan componentes esenciales como **campos finitos genéricos** y **restricciones R1CS**, permitiendo integrar funcionalidades de **zkSNARK** de forma fluida. También proporciona interfaces para definir **relaciones** (como **R1CS** o **AIR**) y sistemas de prueba como **Groth16** y **Marlin**. 

[->Pagina web](https://arkworks.rs/)

![arkworks](https://hackmd.io/_uploads/HJPWyklwxe.png)


- **Gnark** es una **biblioteca** que permite a los desarrolladores diseñar **circuitos** utilizando el lenguaje de programación **Go**. Emplea una API versátil y una interfaz de línea de comandos para ejecutar el proceso de **ZKP** de una forma familiar para los desarrolladores.

    Los dos esquemas de prueba que soporta **Gnark** son **Groth16** y **Plonk**. Uno de los enfoques principales de la biblioteca es la **velocidad del prover y el verifier**, ya que ofrece una **API** tanto para el **frontend** como para el **backend** del proceso de prueba.

[->Repositorio](https://github.com/Consensys/gnark)
    
![download (3)](https://hackmd.io/_uploads/S155uJgwlx.png)

- **CirC** es un proyecto dedicado a la infraestructura de **compiladores** para **criptosistemas** y **verificación**. Se enfoca en herramientas criptográficas como **sistemas de prueba**, **computación multipartita** y **cifrado completamente homomórfico**, aplicados comúnmente a cálculos expresados como **sistemas de restricciones aritméticas**.

    El objetivo de **CirC** es ofrecer una infraestructura compartida para construir **compiladores de restricciones**, proporcionando un recurso valioso para múltiples aplicaciones. **Circify** soporta varios frontends, incluyendo **C**, **ZoKrates** (**Z#**) y **Circom**.
    
 [->Repositorio](https://github.com/circify/circ) 
    
![71469713](https://hackmd.io/_uploads/HJhtj1lwlg.jpg)


- **Halo2:** Varias implementaciones del sistema de prueba **Halo2** de **Zcash**, como las de **Axiom** y la **Ethereum Foundation**, ofrecen primitivas fundamentales para escribir **circuitos** de **zero-knowledge proofs (ZKPs)**. El sistema de prueba involucra varias etapas, desde el **commitment** a **polynomials** que codifican los componentes principales del **circuito**, incluyendo asignaciones de **celdas**, valores permutados, productos para **lookup arguments** y permutaciones de **equality constraints**.

[->Repositorio](https://github.com/zcash/halo2) 


### Hardware Aceleración

Históricamente, la velocidad y los requerimientos de memoria para la generación de **pruebas de conocimiento cero (ZKP)** han limitado su aplicabilidad. Los cálculos necesarios dentro de una **prueba de conocimiento cero**, como hashing, multi-scalar multiplications y fast-Fourier transforms, representan una carga para cada caso de uso.

#### Metodología

Para reducir la sobrecarga que requieren las **pruebas de conocimiento cero**, han surgido varios proyectos enfocados en mejorar el rendimiento de las **pruebas de conocimiento cero** y sus posibles implementaciones.


Para reducir la sobrecarga que requieren las **ZKPs**, han surgido varios proyectos enfocados en mejorar el rendimiento de las **ZKPs** y sus posibles implementaciones.

Los principales instrumentos utilizados para esta aceleración en el mundo de **ZK** son los **field programmable gate arrays (FPGAs)**, las **graphics processing units (GPUs)** y los **application-specific integrated circuits (ASICs)**. La mayor parte del tiempo de generación de la **proof** se dedica a las **multi-scalar multiplications (MSMs)**, mientras que los **number theoretic transforms (NTTs)** representan el resto.


```mermaid
flowchart TD
    subgraph tools ["Herramientas"]
        A["FPGAs"]
        B["GPUs"]
        C["ASICs"]
    end
    
    subgraph process ["Crear Prueba ZK"]
        D["MSM"]
        E["NTT"]
    end
    
    subgraph issues ["Problemas"]
        F["MSM: Poco escalable"]
        G["NTT: Datos desordenados"]
    end
    
    subgraph solutions ["Soluciones"]
        H["GPUs: Pippenger"]
        I["FPGAs: Adaptables"]
        J["ASICs: Complejos"]
    end
    
    %% Flujo simple
    A --> D
    B --> D
    C --> D
    A --> E
    B --> E
    C --> E
    
    D --> F
    E --> G
    
    D --> H
    B --> H
    A --> I
    C --> J
    
    %% Conexiones generales
    tools --> process --> issues
    process --> solutions
    
    %% Estilos súper claros
    classDef tool fill:#93c5fd,stroke:#3b82f6,stroke-width:1px,color:#000,rx:8,ry:8
    classDef proc fill:#6ee7b7,stroke:#10b981,stroke-width:1px,color:#000,rx:8,ry:8
    classDef issue fill:#f87171,stroke:#dc2626,stroke-width:1px,color:#000,rx:8,ry:8
    classDef sol fill:#fcd34d,stroke:#f59e0b,stroke-width:1px,color:#000,rx:8,ry:8
    
    class A,B,C tool
    class D,E proc
    class F,G issue
    class H,I,J sol
    
    %% Estilos de subgrafos
    style tools fill:#f0f9ff,stroke:#93c5fd,stroke-width:1px,rx:10,ry:10
    style process fill:#f0fdf4,stroke:#6ee7b7,stroke-width:1px,rx:10,ry:10
    style issues fill:#fef2f2,stroke:#f87171,stroke-width:1px,rx:10,ry:10
    style solutions fill:#fefce8,stroke:#fcd34d,stroke-width:1px,rx:10,ry:10
```


Las **MSMs** pueden ejecutarse en múltiples hilos, permitiendo el procesamiento en paralelo, pero enfrentan problemas de escalabilidad incluso cuando se paralelizan. Las **NTTs** implican un frecuente reordenamiento de datos, lo que dificulta su distribución en clústeres.

Tanto las **MSM** como las **NTT** pueden acelerarse en **GPUs**, especialmente las **MSM** mediante el algoritmo **Pippenger**. Las **FPGAs** ofrecen un hardware programable que puede reconfigurarse múltiples veces, proporcionando mayor flexibilidad que las **GPUs**. Los **ASICs** son personalizados y están permanentemente grabados en silicio, lo que hace que su diseño y fabricación sean complejos y requieran mucho tiempo.

A diferencia de los **ASICs**, las **FPGAs** y **GPUs** son reprogramables, lo que permite su reutilización en varios sistemas de prueba o actualizaciones.

####Aplicaciones

- **Ingonyama:** es una empresa de aceleración de hardware que integra el diseño de chips con matemáticas y algoritmos avanzados para mejorar el rendimiento de la criptografía intensiva en cálculo. Mantienen una biblioteca llamada **ICICLE**, una biblioteca de criptografía para **pruebas de conocimiento cero (ZKP)** que utiliza **GPUs**.

 [->Pagina web](https://www.ingonyama.com/) 
![0_U-IRO_k0Tvu-JOrD](https://hackmd.io/_uploads/S1vKDeeDxe.jpg)


- **Cysic:** es un acelerador de **ZK** enfocado en el desarrollo de **ASICs** y su **zkVM** acelerado. La arquitectura del sistema cuenta con un **executor** encargado de ejecutar programas, hardware para controlar y distribuir segmentos, y un número configurable de chips especializados para generar **pruebas de conocimiento cero (ZKP)** para cada programa de segmento.

 [->Pagina web](https://cysic.xyz/) 

![download (4)](https://hackmd.io/_uploads/Hkj7uggvle.png)

- **Fabric Cryptography:** presenta la **Fabric Verifiable Processing Unit (VPU)**, un procesador diseñado para aplicaciones criptográficas que abarcan desde **ZKP** hasta **FHE**. La **VPU** cuenta con un conjunto de instrucciones personalizado, adaptado para la criptografía de próxima generación, incluyendo **ZKP**, **FHE**, **MPC** y otros algoritmos.

[->Pagina web](https://www.fabriccryptography.com/)

![66b7d416d16b3b093afcdce3_Chip_Expanded@2x](https://hackmd.io/_uploads/SyVqOlgDex.png)

- **Irreducible: ** [64] ofrece **proving as a service** diseñado para la escalabilidad, impulsado por clústeres de servidores acelerados con **FPGA**. **Irreducible** soporta sistemas de prueba populares como **Plonky2** y **Polygon zkEVM**, con planes para soportar sistemas de próxima generación como **Binius** y **Plonky3**. Sus clústeres de servidores acelerados con **FPGA** están diseñados específicamente para cómputo criptográfico a gran escala.

[->Pagina web](https://www.irreducible.com/)

![download (4)](https://hackmd.io/_uploads/rJHbFlgPge.jpg)


## 2. Aplicaciones en Blockchain

### Blockchains de capa 1

La aparición de las **pruebas de conocimiento cero (ZKPs)** ha impulsado el desarrollo de nuevas soluciones de **Capa 1** que priorizan la **privacidad** y la **eficiencia de datos**. Estas **blockchains** integran las **ZKPs** directamente en sus capas base, ofreciendo una doble ventaja: mayor **privacidad** mediante el ocultamiento de transacciones y mejor **escalabilidad** gracias a la compresión de datos.

#### Metodología

LLas **blockchains de Capa 1** utilizan **pruebas de conocimiento cero (ZKPs)** para ocultar detalles clave de las transacciones, como identidades y montos, mediante técnicas como **zk-SNARKs** o **zk-STARKs**. Estas pruebas validan transacciones sin revelar datos sensibles.

Para mejorar la **escalabilidad**, aplican **compresión de estado**, generando **pruebas compactas** que validan múltiples transacciones con menos datos en la cadena. Los nodos generan y verifican **ZKPs**, asegurando privacidad e integridad. Además, el **consenso** se adapta para aceptar solo transacciones validadas con **ZKP**.


#### Aplicaciones

| Blockchain      | Tecnología                          | Propósito                                                                                                                        | Desafíos                                                                                                                                    |
|-----------------|-----------------------------------|---------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
| **ZCash**       | zk-SNARKs, trusted setup          | Ofrecer transacciones completamente privadas en una blockchain, protegiendo el anonimato del usuario.                           | - Trusted setup inicial puede generar dudas.<br>- Complejidad técnica para nuevos usuarios.                                                  |
| **Aleo**        | zk-SNARKs, dApps framework        | Permitir la creación de dApps privadas, con transacciones y cálculos sin revelar datos personales o financieros.                | - Desarrollo complejo por requerir experiencia en criptografía.<br>- Ecosistema aún en expansión, con baja adopción.                       |
| **Mina Protocol** | zk-SNARKs recursivos, blockchain ligera | Crear una blockchain ligera y escalable que pueda verificarse desde cualquier dispositivo sin necesidad de gran almacenamiento. | - Adopción limitada frente a blockchains populares.<br>- Alta complejidad técnica en implementación y mantenimiento de zk-SNARKs recursivos. |


```mermaid
flowchart TD
    subgraph blockchains ["Blockchains L1 con zk-SNARKs"]
        A["ZCash<br>Transacciones Privadas"]
        B["Aleo<br>dApps Privadas"]
        C["Mina Protocol<br>Blockchain Ligera"]
    end
    
    subgraph technology ["Tecnología"]
        D["zk-SNARKs<br>Pruebas Cero Conocimiento"]
    end
    
    subgraph applications ["Aplicaciones"]
        E["ZCash: Transacciones blindadas"]
        F["Aleo: dApps con privacidad"]
        G["Mina: Blockchain de 22 kB"]
    end
    
    subgraph benefits ["Beneficios"]
        H["Privacidad: Datos ocultos"]
        I["Eficiencia: Verificación rápida"]
        J["Escalabilidad: Menos recursos"]
    end
    
    subgraph challenges ["Desafíos"]
        K["ZCash: Configuración confiada"]
        L["Aleo: Complejidad desarrollo"]
        M["Mina: Adopción limitada"]
    end
    
    %% Flujo claro
    A --> D
    B --> D
    C --> D
    
    D --> E
    D --> F
    D --> G
    
    E --> H
    E --> I
    F --> H
    F --> I
    G --> I
    G --> J
    
    A --> K
    B --> L
    C --> M
    
    %% Conexiones generales
    blockchains --> technology --> applications --> benefits
    applications --> challenges
    
    %% Estilos claros y modernos
    classDef blockchain fill:#93c5fd,stroke:#3b82f6,stroke-width:1px,color:#000,rx:8,ry:8
    classDef tech fill:#6ee7b7,stroke:#10b981,stroke-width:1px,color:#000,rx:8,ry:8
    classDef app fill:#f472b6,stroke:#db2777,stroke-width:1px,color:#000,rx:8,ry:8
    classDef benefit fill:#fcd34d,stroke:#f59e0b,stroke-width:1px,color:#000,rx:8,ry:8
    classDef challenge fill:#f87171,stroke:#dc2626,stroke-width:1px,color:#000,rx:8,ry:8
    
    class A,B,C blockchain
    class D tech
    class E,F,G app
    class H,I,J benefit
    class K,L,M challenge
    
    %% Estilos de subgrafos
    style blockchains fill:#f0f9ff,stroke:#93c5fd,stroke-width:1px,rx:10,ry:10
    style technology fill:#f0fdf4,stroke:#6ee7b7,stroke-width:1px,rx:10,ry:10
    style applications fill:#fdf2f8,stroke:#f472b6,stroke-width:1px,rx:10,ry:10
    style benefits fill:#fefce8,stroke:#fcd34d,stroke-width:1px,rx:10,ry:10
    style challenges fill:#fef2f2,stroke:#f87171,stroke-width:1px,rx:10,ry:10
- 
```

### Capa 2 para Escabilidad


Las **ZKP** se pueden usar para la propiedad de **concisión de datos**, especialmente en pruebas de **validez** en **blockchain**.  

En los **zk-rollups**, las **pruebas de conocimiento cero** se utilizan para demostrar de manera concisa la validez de los cambios de **estado** en una **blockchain** de **Capa 1**, sin que los nodos **validadores** de dicha capa tengan que ejecutar esas transacciones.  

Métodología

Este smart contract de Capa 1 contiene y mantiene una raíz de estado, que es la raíz del Merkle tree del estado del rollup, incluyendo los datos correspondientes. Usando la prueba de validez ZK proporcionada por el sequencer, el contrato del rollup verifica que la nueva raíz de estado sea válida y luego reemplaza la raíz antigua por la nueva.  

Esto funciona como una forma económica de almacenar datos on-chain, permitiendo que individuos reconstruyan el estado del rollup usando dichas transacciones comprimidas.  

Los zk-rollups deben generar pruebas de validez para cada transición de estado de las transacciones. Debido a que los opcodes del EVM están diseñados para computaciones de propósito general, probar computaciones EVM en circuitos ZK es demasiado intensivo en recursos y complejo.  

Por consiguiente, es muy difícil asegurar la compatibilidad EVM en zk-rollups, lo que resulta en diferentes diseños arquitectónicos:  

- **zkEVM**: Una zkEVM es una solución que integra pruebas de conocimiento cero en la ejecución de smart contracts EVM, recreando los opcodes existentes del EVM para ser probados en circuitos.  
- **VMs personalizadas**: Algunos enfoques implican crear nuevos lenguajes de alto nivel o intermedios y máquinas virtuales que sean más adecuados para pruebas ZK pero que aún puedan soportar operaciones similares a las del EVM.  

#### Aplicación 

En los **rollups de Capa 2** (que finalizan en Ethereum), el cómputo se realiza fuera de la **Capa 1** y solo los cambios de estado, depósitos y retiros se envían a través del **smart contract** de rollup.   El **sequencer** (desde un servidor único hasta una red descentralizada) ordena las transacciones, crea bloques de Capa 2 y añade las transacciones al contrato de **ZK-rollup** con una prueba de validez **ZK**.  

El contrato verifica esta prueba y actualiza la raíz de estado, permitiendo almacenar datos on-chain de forma económica y posibilitando que cualquiera reconstruya el estado del rollup con las transacciones comprimidas.   El cómputo se descarga casi por completo a la Capa 2, lo que reduce las limitaciones de espacio y procesamiento en Ethereum, que solo valida cambios de estado y mantiene la descentralización y seguridad.  

Los rollups deben proporcionar pruebas de validez para las transiciones de estado en la **Ethereum Virtual Machine (EVM)**, que es Turing-completa. Esto requiere pasos adicionales que la EVM no realiza, ya que en vez de ejecutar directamente el bytecode y publicar resultados, los ZK-rollups generan pruebas de validez para cada transición de estado.

```mermaid
flowchart TD
    subgraph usuario ["Usuario"]
        U[Usuario]
    end
    
    subgraph secuenciador ["Secuenciador"]
        S[Secuenciador<br>Batch Transactions from layer 2 rollup]
    end
    
    subgraph ejecutor_prover ["Ejecutor/Prover"]
        EP[Ejecutor/Prover<br>Servidor]
        EP -->|Prueba de transición de estado| PT[Prueba de transición de estado]
        EP -->|Raíz de estado| RS[Raíz de estado]
    end
    
    subgraph capa1 ["Capa 1"]
        C1[Rollup Contract<br>Almacenar raíces de secuencia]
        C1 --> B[Bloque]
    end
    
    %% Flujos
    U -->|Transacción| S
    S -->|Transacción| EP
    EP -->|Datos de bloque| C1
    C1 -->|Prueba de validez y nueva raíz de estado| PV[Prueba de validez y nueva raíz de estado]
    
    %% Estilos
    classDef user fill:#93c5fd,stroke:#3b82f6,stroke-width:1px,color:#000,rx:8,ry:8
    classDef sequencer fill:#6ee7b7,stroke:#10b981,stroke-width:1px,color:#000,rx:8,ry:8
    classDef prover fill:#f472b6,stroke:#db2777,stroke-width:1px,color:#000,rx:8,ry:8
    classDef layer1 fill:#fcd34d,stroke:#f59e0b,stroke-width:1px,color:#000,rx:8,ry:8
    
    class U user
    class S sequencer
    class EP,PT,RS prover
    class C1,B,PV layer1
    
    %% Estilos de subgrafos
    style usuario fill:#f0f9ff,stroke:#93c5fd,stroke-width:1px,rx:10,ry:10
    style secuenciador fill:#f0fdf4,stroke:#6ee7b7,stroke-width:1px,rx:10,ry:10
    style ejecutor_prover fill:#fdf2f8,stroke:#f472b6,stroke-width:1px,rx:10,ry:10
    style capa1 fill:#fefce8,stroke:#fcd34d,stroke-width:1px,rx:10,ry:10

```

Los **zk-rollups** generan pruebas de validez para cada transición de estado. Probar computaciones del **EVM** en circuitos **ZK** es complejo y costoso.

Por ello, existen dos enfoques:

- **zkEVM**: recrea los **opcodes** del **EVM** para pruebas en circuitos.
- **VMs personalizadas**: nuevas máquinas virtuales y lenguajes más adecuados para pruebas **ZK**, compatibles con operaciones similares al **EVM**.

#### Aplicaciones 

| **Rollup**        | **Tecnología y Propósito**                                       | **Resumen Clave**                                                                               |
| ----------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| **zkSync Era**    | zkEVM basado en ZK-SNARKs, compatible con Solidity/Vyper.        | Escalable, rápido y compatible con EVM. Requiere superar limitaciones del EVM y ganar adopción. |
| **Polygon zkEVM** | ZK-SNARKs con equivalencia total a EVM, sin compilador extra.    | Migración fácil desde Ethereum. Riesgo de confusión por pequeños cambios en opcodes.            |
| **Scroll**        | zkEVM con opcodes modificados, mantiene compatibilidad Solidity. | Flexible y compatible, pero aún en desarrollo y puede generar errores si se ajusta mal.         |
| **Linea**         | zkEVM sin compilador, compatible con Hardhat/Foundry.            | Transición fluida y herramientas conocidas. Puede tener límites por versiones de Solidity.      |
| **StarkNet**      | STARKs con lenguaje Cairo, sin setup confiado.                   | Seguridad cuántica y gran escalabilidad. No usa Solidity; curva de aprendizaje alta.            |
| **Aztec**         | ZK-SNARKs + Noir (DSL), enfoque en privacidad.                   | Permite estados privados/públicos. Alta complejidad inicial y poca adopción aún.                |

### Interoperabilidad entre Blockchains

Con un panorama altamente fragmentado de diferentes tecnologías **blockchain**, que incluye cadenas de **Capa 1** y capas modulares adicionales construidas sobre ellas, ha surgido la necesidad de una **composabilidad fluida entre blockchains**. Incluso en el caso de los **rollups de Capa 2** construidos sobre la misma **Capa 1**, el estado de cada **rollup** es un **silo de datos separado**, lo que genera el mismo problema de **fragmentación**, aun cuando comparten la misma **finalización de transacciones** y **seguridad de consenso**. 

La **composabilidad entre cadenas**, también conocida como **interoperabilidad entre blockchains**, cuenta con muchas **soluciones innovadoras**, incluidas aquellas que utilizan **pruebas de conocimiento cero（ZKP）** para **cómputo verificable y sucinto**.

#### Metodología
Las **pruebas de conocimiento cero**（zero-knowledge proofs）se utilizan para verificar la ocurrencia de un **cambio de estado** o la **ejecución de un bloque** en una cadena hacia otra cadena. Esta propiedad permite a los **desarrolladores de protocolos** coordinar la **lógica de la aplicación** a través de múltiples blockchains, permitiendo a los usuarios realizar **transacciones instantáneas** y transferir **datos entre diferentes redes**. Normalmente, existe un **middleware** que genera las **pruebas de validez** para ser verificadas en la **blockchain receptora**, donde un **contrato inteligente** verifica la prueba y ejecuta la **lógica de aplicación correspondiente**, según las especificaciones de la aplicación.



#### Aplicación 


- El protocolo **zkBridge:** originalmente publicado como investigación académica y luego implementado por **Polyhedra**, opera a través de un diseño modular que separa la lógica específica de la aplicación de la funcionalidad central de retransmisión de encabezados de bloque. 

    Esta red **retransmite encabezados de bloque** de una **blockchain** junto con **pruebas de corrección zk-SNARK** a un **contrato actualizador** en otra **blockchain**. El **contrato actualizador** es responsable de **mantener una lista de encabezados de bloque recientes** de la **cadena emisora**, **verificar las pruebas** presentadas por los **nodos de retransmisión** y **actualizar la lista** en consecuencia.


[Pagina web](https://www.zkbridge.com/)

![download (5)](https://hackmd.io/_uploads/HkoFCblwlx.jpg)


- **Telepathy:** es un protocolo de interoperabilidad que permite el paso arbitrario de mensajes entre **Ethereum** y otras cadenas. Para los desarrolladores que quieren enviar una transacción entre cadenas, llaman al **contrato router de Telepathy** en **Ethereum** y deben esperar hasta que la transacción alcance la finalización. 

    Para verificar que un bloque ha sido finalizado, un componente fuera de la cadena llamado **operador Telepathy** utiliza un **zk-SNARK** que prueba que el encabezado del bloque tiene firmas de un gran porcentaje de validadores de **Ethereum**. Esta prueba se pasa al **contrato light client de Telepathy** en la cadena de destino, que verifica las pruebas y proporciona acceso a los encabezados de bloque de **Ethereum**.

[->Pagina web](https://docs.telepathy.xyz//)

![image](https://hackmd.io/_uploads/H1fokGxDle.png)


### Almacenamiento en Blockchain

El **almacenamiento en blockchain** es esencialmente una forma de guardar **datos** en una **red descentralizada** utilizando las propiedades de la **blockchain**. Para proteger los datos guardados, la **blockchain** usa estructuras de datos como **Merkle trees** y **Merkle Patricia trees**. Sin embargo, a medida que la **cantidad de datos contenida en una prueba** aumenta, también lo hace el **tamaño de la prueba**. 

Como resultado, el **costo de validar dichas pruebas** en la cadena aumenta, haciendo que las **pruebas de inclusión ordinarias** sean económicamente insostenibles en la mayoría de los casos. Ahora se prefiere una opción más **escalable**, en la que la **blockchain** no tiene que almacenar grandes cantidades de datos, sino solo **referencias más pequeñas** a datos almacenados en **plataformas fuera de la cadena**. Las **pruebas de conocimiento cero** hacen esto posible: los **datos y cálculos** pueden almacenarse **fuera de la cadena**.

#### Metodología
Las **pruebas de conocimiento cero** podrían usarse para minimizar el **costo de las actividades** asociadas con la **verificación de la inclusión de datos** en conjuntos de datos masivos y para validar que el procedimiento se completó correctamente. El **prover** realiza el cálculo necesario y genera una **prueba** que demuestra su corrección.  Este cambio de paradigma es crucial porque ofrece una solución práctica para reducir los costos de emplear **pruebas de inclusión** en **contratos inteligentes**.

#### Aplicación

**Herodotus:** presenta un nuevo método llamado **Storage Proofs** para habilitar el acceso a datos en cadena. Es esencialmente un **acumulador en cadena** que utiliza medios criptográficos para mejorar el acceso y la verificación de datos históricos en la blockchain de **Ether**. La solución utiliza las pruebas **STARK** de **StarkWare**. Esto permite a los usuarios validar datos desde cualquier punto en la blockchain de **Ether** sin necesidad de un tercero. 

[Pagina web](https://herodotus.dev/)

![download (6)](https://hackmd.io/_uploads/BJZTzGgvxl.jpg)


- **Filecoin:** ha desplegado una considerable red de **zk-SNARK**, que utiliza el espacio no utilizado de los discos duros de usuarios alrededor del mundo para almacenar archivos. Usando **zk-SNARKs** para generar las pruebas, las pruebas resultantes son pequeñas y el proceso de verificación es rápido (y por lo tanto, barato).


[->Articuló](https://research.protocol.ai/sites/snarks/)

![Screenshot from 2025-07-24 15-13-19](https://hackmd.io/_uploads/Skfe4fgweg.png)

### Smart Contract/Privada Trasacción

Aunque la creación de nuevas **redes blockchain** o **rollups** sirve como solución para las demandas de **privacidad**, también existen enfoques basados en **ZKP** que ofrecen **privacidad selectiva** para ciertas **aplicaciones descentralizadas** (**dApps**) y **transacciones** en **blockchains** existentes y transparentes como **Ethereum**. Estas aplicaciones existen en la **capa de ejecución de contratos inteligentes** de una **blockchain**, donde las **dApps** están diseñadas para utilizar **ZKP** y habilitar **transacciones privadas** en ciertos contextos, como la **mezcla de transacciones**.



#### Metodología

La metodología central en la **privacidad de contratos inteligentes con ZKP** se basa en la **verificación de pruebas en cadena** dentro de un marco de contrato inteligente. La generación de pruebas generalmente ocurre fuera de la cadena debido a su naturaleza computacionalmente intensiva y la necesidad de privacidad en el cálculo o procesamiento de datos sensibles. El contrato evalúa la prueba según las reglas predefinidas del protocolo y luego actúa en consecuencia si se considera válida, ejecutando transacciones u otras acciones específicas del protocolo.

```mermaid

flowchart TD
    subgraph offchain ["Fuera de la Cadena"]
        U[Usuario]
        P[Prueba ZKP]
        U -->|Genera| P
    end
    
    subgraph onchain ["En la Cadena"]
        C[Contrato Inteligente]
        A[Acciones del Protocolo]
        C -->|Ejecuta si válida| A
    end
    
    P -->|Envía| C
    C -->|Verifica| P
    
    %% Estilos
    classDef offchain fill:#f0f9ff,stroke:#93c5fd,stroke-width:1px,rx:10,ry:10
    classDef onchain fill:#f0fdf4,stroke:#6ee7b7,stroke-width:1px,rx:10,ry:10
    classDef action fill:#fefce8,stroke:#fcd34d,stroke-width:1px,rx:10,ry:10
    
    class U,P offchain
    class C onchain
    class A action

```

#### Aplicación
- **Tornado Cash:** emplea **pruebas de conocimiento cero** para habilitar la **privacidad de transacciones** y la **mezcla** en **Ethereum**. Su mecanismo central gira en torno a **depositar Ether** en un **contrato inteligente** y retirarlo de una manera que rompe el vínculo entre el origen y el destino. El protocolo utiliza **zk-SNARKs** para probar la legitimidad de los retiros sin revelar los detalles del depósito original. Los usuarios depositan **Ether**, generando un **compromiso criptográfico** que se añade a un **Merkle tree** dentro del contrato.

![1698950835608](https://hackmd.io/_uploads/HygWXmgveg.jpg)



Para retirar, el usuario genera una **prueba zk-SNARK** que demuestra que posee una hoja en ese árbol sin revelar cuál. Esta prueba, una vez verificada por el **contrato inteligente**, permite el retiro de **Ether** a una nueva dirección, garantizando que se mantenga la **privacidad de la transacción** al ocultar el vínculo entre las direcciones de depósito y retiro. Este método crea efectivamente una **capa de privacidad**, permitiendo a los usuarios transaccionar de forma **anónima** dentro de la **blockchain pública de Ethereum**.

 [->Documentación](https://docs.tornado.ws/)

```mermaid
graph LR
    %% Entrada
    A[👤 Alice<br/>1 ETH] --> TC[🌪️ TORNADO CASH<br/>Pool Mezclador]
    B[👤 Bob<br/>1 ETH] --> TC
    C[👤 Carol<br/>1 ETH] --> TC
    D[👤 David<br/>1 ETH] --> TC
    
    %% Pool central
    TC --> P[💰 POOL<br/>4 ETH mezclados<br/>+ tickets secretos]
    
    %% Salida
    P --> X[👤 Usuario X<br/>retira 1 ETH]
    P --> Y[👤 Usuario Y<br/>retira 1 ETH] 
    P --> Z[👤 Usuario Z<br/>retira 1 ETH]
    P --> W[👤 Usuario W<br/>retira 1 ETH]
    
    %% Privacidad
    TC -.->|Genera| S[🎫 Ticket Secreto<br/>prueba de depósito]
    S -.->|Permite| R[📤 Retiro Anónimo<br/>ZK prueba válida]
    R -.->|Resultado| PRIV[🕵️ IMPOSIBLE rastrear<br/>quién envió a quién]
    
    classDef users fill:#e3f2fd
    classDef tornado fill:#fff3e0  
    classDef pool fill:#e8f5e8
    classDef privacy fill:#fce4ec
    
    class A,B,C,D,X,Y,Z,W users
    class TC tornado
    class P pool
    class S,R,PRIV privacy
```

- **Privacy Pools:** extiende el uso de **zk-SNARKs** en otras soluciones de privacidad como **Zcash** y **Tornado Cash**. En lugar de simplemente generar una **ZKP** para probar que un intento de retiro está vinculado a un depósito específico, los usuarios prueban **pertenencia a un conjunto de asociación**, que es una colección de referencias de transacción representadas como un **Merkle tree**, de donde podrían haberse originado los fondos del usuario. Los usuarios definen su conjunto proporcionando la **raíz de Merkle** como una **entrada pública**. Al retirar fondos, el usuario no prueba directamente un vínculo con una transacción específica.


 [->Pagina web](https://privacypools.com/)

```mermaid
graph TD
    %% Flujo Principal
    U[Usuario] --> D[Depósito]
    U --> W[Retiro]
    
    %% Pool Central
    D --> PP[Privacy Pool<br/>Smart Contract]
    PP --> MR[Merkle Tree<br/>de Depósitos]
    
    %% Zero-Knowledge
    W --> ZK[Prueba ZK]
    ZK --> MP[Prueba de<br/>Membresía]
    ZK --> EP[Prueba de<br/>Exclusión]
    
    %% Association Sets
    ASP[ASP Provider] --> AS[Conjunto de<br/>Asociación]
    AS --> CLEAN[Depósitos<br/>Limpios]
    
    %% Verificación
    MP --> V[Verificador]
    EP --> V
    AS --> V
    V --> OK[✓ Aprobado]
    
    %% Conexiones
    MR -.-> ZK
    CLEAN -.-> MP
    
    classDef main fill:#e3f2fd
    classDef zk fill:#fff3e0
    classDef asp fill:#e8f5e8
    
    class U,D,W,PP,MR main
    class ZK,MP,EP zk
    class ASP,AS,CLEAN asp
    
```



- **Penumbra:** es una red **proof-of-stake totalmente privada** y un **exchange descentralizado** dentro del ecosistema **Cosmos**, que ofrece un enfoque único para la **privacidad de transacciones** y la **interoperabilidad entre blockchains** mediante el uso de **pruebas de conocimiento cero**. **Penumbra** se conecta al ecosistema **Cosmos** a través de **IBC** (el protocolo de comunicación entre blockchains) y mantiene todo el valor en un **pool blindado multi-activo**, inspirado en el diseño **Sapling** de **Zcash**. Esto permite realizar **transacciones privadas** con cualquier activo compatible con **IBC**. Todas las transacciones en **Penumbra** son privadas por defecto, habilitadas por **zk-SNARKs**, que validan la **corrección y legitimidad** de las transacciones, pero ocultan el **remitente**, el **receptor** y el **monto**.

 [->Pagina web](https://dex.penumbra.zone/explore)

```mermaid
graph TB
    %% Otros Blockchains
    COSMOS[🌌 Cosmos<br/>ATOM tokens]
    OSMOSIS[🧪 Osmosis<br/>OSMO tokens] 
    ETHEREUM[⚡ Ethereum<br/>ETH tokens]
    OTHER[🔗 Otras chains<br/>IBC compatible]
    
    %% IBC Bridge
    COSMOS --> IBC[🌉 IBC Bridge<br/>Envía tokens a Penumbra]
    OSMOSIS --> IBC
    ETHEREUM --> IBC  
    OTHER --> IBC
    
    %% Penumbra Core
    IBC --> SHIELD[🛡️ SHIELDING<br/>Tokens se vuelven privados<br/>al entrar a Penumbra]
    SHIELD --> POOL[🏊‍♂️ SHIELDED POOL<br/>Todos los tokens mezclados<br/>COMPLETAMENTE PRIVADOS]
    
    %% Funciones en Penumbra
    POOL --> TRADE[💱 DEX Privado<br/>Swap tokens sin revelar<br/>tu estrategia de trading]
    POOL --> STAKE[🎯 Staking Privado<br/>Gana rewards sin revelar<br/>cuánto tienes]
    POOL --> SEND[💸 Transferencias Privadas<br/>Envía a cualquiera<br/>sin rastro]
    
    %% Salida
    TRADE --> UNSHIELD[📤 UNSHIELDING<br/>Tokens vuelven a ser<br/>públicos al salir]
    STAKE --> UNSHIELD
    SEND --> UNSHIELD
    
    UNSHIELD --> OUT[🏠 De vuelta a tu<br/>blockchain original]
    
    %% Privacidad
    POOL -.->|Todo encriptado| PRIVACY[🕵️ NADIE puede ver:<br/>• Cuánto tienes<br/>• Con quién trades<br/>• Tus estrategias<br/>• Tu historial]
    
    %% ZK Magic
    PRIVACY -.->|Powered by| ZK[✨ Zero-Knowledge<br/>Pruebas generadas<br/>en TU dispositivo]
    
    classDef external fill:#e3f2fd
    classDef bridge fill:#fff3e0
    classDef penumbra fill:#e8f5e8
    classDef functions fill:#f3e5f5
    classDef privacy fill:#fce4ec
    
    class COSMOS,OSMOSIS,ETHEREUM,OTHER,OUT external
    class IBC,SHIELD,UNSHIELD bridge
    class POOL penumbra
    class TRADE,STAKE,SEND functions
    class PRIVACY,ZK privacy

```

### Prueba de Identidad Basada en Blockchain

El usuario puede **probar su pertenencia a un grupo o identidad** sin revelar ninguna información sensible sobre su identidad, combinando así los imperativos de **autenticación** y **privacidad**. Aunque esto puede implementarse fuera del contexto blockchain (como se abordará en la sección “**Prueba de Identidad**” más adelante), existen muchas aplicaciones de **verificación de identidad** que utilizan **contratos inteligentes** y **capas de ejecución blockchain**. Este dominio de aplicación se define como **Prueba de Identidad Basada en Blockchain**, el cual aprovecha los beneficios de la **ZKP** para preservar la **privacidad**.


#### Metodología

La metodología central detrás de los sistemas de **prueba de identidad basada en blockchain** es el uso de **pruebas de conocimiento cero** para permitir que los usuarios prueben su **pertenencia a ciertos grupos de identidad** o la **posesión de credenciales**, sin revelar la información real de su identidad. Esto se logra mediante **compromisos criptográficos** con la información del usuario, manteniéndola en secreto.  

Una **prueba de identidad ZK** que preserva la privacidad puede ser fácilmente **verificada por un contrato inteligente en cadena**, y puede funcionar como un **sistema de credenciales privadas** asegurado por la **blockchain**, abriendo la puerta a una multitud de **aplicaciones descentralizadas**, sin comprometer información sensible.

#### Aplicación

- **Semaphore** es un framework de **señalización con conocimiento cero** en **Ethereum** que permite a los usuarios **emitir señales de apoyo** a cualquier mensaje sin revelar su identidad, más allá de demostrar que están autorizados para hacerlo [88]. Utiliza **Pedersen commitments** para ocultar las identidades en un **Merkle tree incremental** almacenado en cadena.  

```mermaid
graph LR
    %% Paso 1: Crear ID
    A[👤 Tú] --> B[🔑 Creas ID secreta + ID pública]
    
    %% Paso 2: Unirse al grupo
    B --> C[👥 Te unes al GRUPO SEMAPHORE]
    D[👤 Alice] --> C
    E[👤 Bob] --> C
    F[👤 Carol] --> C
    
    %% Paso 3: Lista de miembros
    C --> G[📋 LISTA DE MIEMBROS - Solo IDs públicas]
    
    %% Paso 4: Enviar mensaje
    G --> H[💬 Quieres enviar mensaje anónimo]
    H --> I[✨ Pruebas: SOY MIEMBRO pero NO dices QUIÉN eres]
    
    %% Paso 5: Verificación
    I --> J[🔍 Sistema verifica: Es miembro válido + No ha hablado antes]
    
    %% Paso 6: Resultado
    J --> K[✅ MENSAJE PUBLICADO - Todos ven el mensaje, NADIE sabe quién lo envió]
    
    classDef simple fill:#e3f2fd
    classDef club fill:#fff3e0
    classDef magic fill:#e8f5e8
    classDef result fill:#e1f5fe
    
    class A,B simple
    class C,D,E,F,G club
    class H,I,J magic
    class K result
```


Los usuarios generan **pruebas zk-SNARK** que demuestran que:
- Su identidad (commitment) es válida, existiendo como una hoja del Merkle tree.
- Conocen los secretos detrás del commitment.
- El **nullifier** generado no ha sido usado antes, evitando doble gasto.
- La señal está autorizada mediante verificación de firma **EdDSA** dentro del circuito.

Un **contrato inteligente** gestiona el estado y la lógica: agrega identidades al árbol Merkle, actualiza el mapa de nullifiers y registra señales exitosas. Esto habilita aplicaciones privadas totalmente en cadena, como **votaciones anónimas** y **sistemas de reputación**.

[->Pagina web](https://semaphore.pse.dev/)

![download (8)](https://hackmd.io/_uploads/ByUdAQgPlg.jpg)


- **Galxe Identity:** es un servicio de **identidad autosoberana** centrado en **credenciales verificables** [90]. Aborda el problema de la multiplicidad de identidades digitales al incrustar múltiples **identity commitments** en una sola credencial de usuario, permitiendo a los titulares conectar identidades entre plataformas de forma privada.  

    Los titulares de credenciales pueden usar **ZKP** para demostrar de manera selectiva información específica de su identidad, manteniendo al mismo tiempo un **seudónimo**. Al igual que **Semaphore**, **Galxe** construye los **identity commitments** calculando el **Poseidon hash** de una **identidad secreta privada** y un **nullifier interno privado**.

[->Pagina web](https://www.galxe.com/identity)

![78rUiqSINXv8ZJ7QHgC43dIMGY](https://hackmd.io/_uploads/ryRAy4lvel.png)

### Privacidad en Blockchain Empresarial y Cadenas de Suministro

Las **cadenas de suministro** y las **empresas globales** reconocen cada vez más el potencial transformador de la **tecnología blockchain** para mejorar la **transparencia**, la **trazabilidad**, la **inmutabilidad** y la **responsabilidad**. Sin embargo, esta transición hacia la adopción de blockchain en la cadena de suministro conlleva importantes preocupaciones sobre la **privacidad**.  



```mermaid
graph LR
    %% Concepto Principal
    A[Cadena de Suministro<br/>Privacidad, Cumplimiento y Auditabilidad] --> B[Blockchain]
    A --> C[Pruebas de Conocimiento Cero]
    
    %% Características Blockchain - horizontales
    B --> D[Transparencia]
    B --> E[Trazabilidad]
    B --> F[Descentralización] 
    B --> G[Inmutabilidad]
    B --> H[Automatización]
    
    %% Características Zero-Knowledge - horizontales
    C --> I[Privacidad]
    C --> J[Integridad de Datos]
    C --> K[Anonimato]
    C --> L[Divulgación Selectiva]
    
    classDef main fill:#f9f9f9,stroke:#333,stroke-width:2px
    classDef blockchain fill:#e1f5fe,stroke:#01579b
    classDef zk fill:#f3e5f5,stroke:#4a148c
    classDef features fill:#fff,stroke:#666
    
    class A main
    class B blockchain
    class C zk
    class D,E,F,G,H,I,J,K,L features
    
```

La naturaleza pública e inmutable de las **blockchains abiertas** podría exponer información sensible o propietaria a competidores o al público. Este equilibrio entre la necesidad de transparencia y los requerimientos de privacidad ha llevado a la exploración de **tecnologías que mejoran la privacidad** dentro de marcos blockchain, especialmente para aplicaciones en cadenas de suministro y entornos empresariales.


#### Metodología

La integración de **pruebas de conocimiento cero（ZKP** responde a la necesidad de **privacidad** al permitir que los participantes verifiquen la **autenticidad** y el **cumplimiento** de los productos sin revelar detalles sobre los procesos o información propietaria. Esta tecnología es clave para generar confianza en los **consumidores finales**, demostrando la **calidad y seguridad** de los productos incluso sin transparencia total en los procesos.  

Dado el carácter complejo y global de las cadenas de suministro modernas, se emplean técnicas de **segmentación de datos** y **cifrado** para proteger información sensible del negocio. Este enfoque no solo mejora la eficiencia operativa, sino que también garantiza que la **divulgación de datos** esté gobernada estrictamente por necesidad y consentimiento. Incorporar estas medidas de privacidad avanzadas permite **proteger los intereses del consumidor final** y mantener la **confianza mutua** entre los participantes de la cadena de suministro.


#### Aplicación

- **zk-BeSC:** introduce un marco basado en **blockchain** para la **gestión de cadenas de suministro**, que utiliza **pruebas de conocimiento cero con polinomios** para garantizar la **privacidad durante las transacciones**. Este framework está diseñado para permitir **transacciones confidenciales** entre los participantes de la cadena, preservando la **privacidad de los datos sensibles** mientras mantiene las características de **trazabilidad** e **inmutabilidad** propias de la tecnología blockchain.  

[Lectura](https://ieeexplore.ieee.org/document/10183017)

### Prueba de Reserva
La **prueba de conocimiento cero de Reservas (ZK-PoR)** proporciona un mecanismo **sin necesidad de confianza** para verificar reservas, mejorando la **confianza** y **seguridad** en sistemas financieros descentralizados sin sacrificar la **privacidad**. Esta innovación es especialmente importante para **intercambios y wallets de criptomonedas**, ya que los usuarios necesitan una garantía verificable de que sus activos están seguros sin exponerlos a posibles amenazas.  

#### Metodología

La **metodología detrás de ZK-PoR** implica varios pasos clave para garantizar una **verificación segura y privada** de los activos. Inicialmente, la entidad que posee la reserva construye un **compromiso criptográfico** del activo sin revelar sus detalles, utilizando criptografía para generar una **prueba de posesión**.  

La prueba se basa en un **algoritmo de prueba de conocimiento cero** y luego se transmite al **verificador**. Los **validadores** utilizan el mismo algoritmo criptográfico para **verificar las pruebas** sin conocer las reservas reales, las identidades de los tenedores de activos ni los detalles de las transacciones.


![20250724_1741_Prueba de Reserva_simple_compose_01k0z9fz6nem59ktx4nbsqzhfm (1)](https://hackmd.io/_uploads/S1t2PVgPex.png)


#### Aplicación

- **Provisions:** ofrece una solución innovadora a este desafío mediante el uso de **ZK-PoR**. Esta tecnología permite que un **exchange de Bitcoin**, o cualquier plataforma de criptomonedas, demuestre de forma **transparente** que posee **fondos suficientes** para cubrir todas sus obligaciones con los usuarios, sin revelar los **montos exactos** que mantiene ni las **identidades de los titulares de cuentas**.

[->Lectura](https://eprint.iacr.org/2015/1008)

- **Proven** aprovecha **ZK-PoR** para ofrecer una **plataforma descentralizada** que permite a empresas e instituciones financieras **probar verificablemente** su **liquidez** o **reservas de activos** sin revelar los **valores específicos** de los activos ni comprometer la **confidencialidad** de sus operaciones.

[->Pagina web](https://www.proven.tools/products)

## 3. Aplicaciones fuera de Blockchain

### Prueba de Identidad
Aunque hemos visto muchos protocolos de **prueba de identidad** basados en blockchain, la **verificación de identidad** como una aplicación práctica de las **ZKP (pruebas de conocimiento cero)** va más allá del dominio de la blockchain. Fundamentalmente, esta metodología se basa en la capacidad de **probar una declaración（statement）sobre la identidad**, específicamente **la pertenencia a un conjunto o la verificación de credenciales**, sin revelar ninguna información sensible sobre la identidad.

#### Metodología

Estas técnicas de **verificación de identidad** utilizan **ZKP (pruebas de conocimiento cero)** para validar la identidad de un usuario o su **pertenencia a un grupo**, sin revelar ningún detalle específico o sensible sobre la identidad en sí. Esta metodología es mucho más **pura**, en el sentido de que el único factor común entre las aplicaciones es que la **prueba（proof）** es generada por un **demostrador（prover）** a partir de alguna **credencial de identidad**, y entregada a un **verificador（verifier）**, quien no obtiene ninguna información de identidad más allá de la prueba misma.

#### Aplicación

- **Zero knowledge proofs of identity:** Fue de los primeros artículos sobre **ZKP (pruebas de conocimiento cero)**, publicado por primera vez en **1988**, presenta un novedoso esquema de **identificación** basado en pruebas de conocimiento cero, como una alternativa más eficiente a los esquemas basados en **RSA**. 

```mermaid
graph TB
    subgraph "🏛️ CONFIGURACIÓN INICIAL"
        A[🔑 Centro de Confianza:<br/>Genera n = p × q<br/>p = 17, q = 23<br/>n = 391]
        B[📋 Claves Públicas:<br/>I₁ = 49, I₂ = 64<br/>Disponibles para todos]
        A --> B
    end
    
    subgraph "👩 PEGGY DEMOSTRADOR"
        C[🤫 Secretos Conocidos:<br/>S₁ = 12, S₂ = 18<br/>Solo Peggy los conoce]
        D[🎲 Paso 1 - Compromiso:<br/>Elige R = 15 aleatorio<br/>Calcula X = R² mod n<br/>X = 225 mod 391 = 225]
        E[📨 Envía X = 225<br/>a Victor]
        F[📥 Recibe desafío:<br/>E = E₁, E₂<br/>Por ejemplo E = 1, 0]
        G[🧮 Paso 3 - Respuesta:<br/>Y = R × S₁^E₁ × S₂^E₂<br/>Y = 15 × 12¹ × 18⁰<br/>Y = 15 × 12 = 180]
        H[📤 Envía Y = 180<br/>a Victor]
        
        C --> D
        D --> E
        F --> G
        G --> H
    end
    
    subgraph "👨 VICTOR VERIFICADOR"
        I[🎯 Paso 2 - Desafío:<br/>Genera E aleatorio<br/>E₁ = 1, E₂ = 0<br/>Bits aleatorios]
        J[📤 Envía E = 1, 0<br/>a Peggy]
        K[📥 Recibe Y = 180<br/>de Peggy]
        L[🔍 Paso 4 - Verificación:<br/>Lado izquierdo: Y² mod n<br/>180² mod 391 = 109<br/><br/>Lado derecho: X × I₁^E₁ × I₂^E₂<br/>225 × 49¹ × 64⁰ = 225 × 49 = 109]
        M{🤔 ¿Son iguales?<br/>109 = 109}
        
        I --> J
        K --> L
        L --> M
    end
    
    subgraph "✅ RESULTADO DE RONDA"
        N[🎉 ¡RONDA VÁLIDA!<br/>Victor acepta esta ronda<br/>Peggy demostró conocimiento<br/>sin revelar secretos]
        O[❌ Ronda Inválida<br/>Victor rechaza<br/>Posible intento de engaño]
        
        M -->|Sí| N
        M -->|No| O
    end
    
    subgraph "🔄 PROTOCOLO COMPLETO"
        P[📊 Repetir 3-5 rondas<br/>Cada ronda con nuevo R<br/>y nuevo desafío E]
        Q[🏆 Éxito Final:<br/>Si TODAS las rondas<br/>son válidas<br/>Victor acepta identidad]
        R[🚫 Fallo:<br/>Si CUALQUIER ronda<br/>falla<br/>Victor rechaza]
        
        N --> P
        P --> Q
        O --> R
    end
    
    subgraph "🔒 SEGURIDAD MATEMÁTICA"
        S[💪 Propiedades Garantizadas:<br/>✓ Completitud: Peggy honesta siempre convence<br/>✓ Solidez: Impostor solo tiene suerte 2⁻ᵏᵗ<br/>✓ Conocimiento Cero: Sin filtración de secretos<br/>✓ Eficiencia: Muy rápido computacionalmente]
    end
    
    %% Conexiones principales
    B --> C
    B --> I
    E --> I
    J --> F
    H --> K
    Q --> S
    
    %% Estilos
    style A fill:#ff6b6b,color:#fff
    style B fill:#4ecdc4,color:#fff
    style C fill:#45b7d1,color:#fff
    style D fill:#ffeaa7,color:#000
    style E fill:#dda0dd,color:#fff
    style F fill:#fab1a0,color:#000
    style G fill:#fd79a8,color:#fff
    style H fill:#96ceb4,color:#000
    style I fill:#feca57,color:#000
    style J fill:#dda0dd,color:#fff
    style K fill:#fab1a0,color:#000
    style L fill:#fd79a8,color:#fff
    style M fill:#fdcb6e,color:#000
    style N fill:#00b894,color:#fff
    style O fill:#d63031,color:#fff
    style P fill:#6c5ce7,color:#fff
    style Q fill:#00cec9,color:#fff
    style R fill:#d63031,color:#fff
    style S fill:#2d3436,color:#fff
```  
    
Este trabajo presenta un esquema práctico que garantiza que ningún **adversario avanzado** pueda coludir con un **verificador（verifier）** deshonesto (B, Victor) para crear una **credencial falsificada** y **suplantar la identidad** de A (Peggy, el **demostrador（prover）**). La metodología se basa en **pruebas interactivas de conocimiento cero**, donde A **demuestra su identidad** al **probar que conoce las claves secretas** asociadas a sus **credenciales**, sin revelarlas.

Para ello, A genera una **prueba matemática** que actúa como una **firma digital única**, verificable por el protocolo, asegurando la **autenticidad** de A sin comprometer la **confidencialidad** de sus secretos, incluso frente a un B deshonesto. El protocolo garantiza la **integridad**, asegurando que las pruebas generadas por A **no pueden ser alteradas ni falsificadas** sin invalidar la verificación.

[->Lectura](https://dl.acm.org/doi/pdf/10.1145/28395.28419)

- **zk-creds:** El protocolo aprovecha las **pruebas de conocimiento cero（ZKP）** (específicamente **zk-SNARKs**) para convertir documentos de identidad existentes en **credenciales anónimas**, eliminando así la necesidad de que los emisores de credenciales mantengan **claves de firma**. Este sistema contrasta con los métodos tradicionales, donde los emisores deben **firmar credenciales y documentos de identidad** para su validación. Al integrarse con infraestructuras de identidad existentes, como **identificaciones emitidas por el gobierno** o **diplomas universitarios**.

[->Lectura](https://eprint.iacr.org/2022/878.pdf)


En un mundo donde el contenido generado por **inteligencia artificial** imita cada vez más al creado por humanos, el uso potencial de la **criptografía de conocimiento cero** podría ayudarnos a **verificar que cierto contenido fue producido aplicando un modelo específico a una entrada determinada**, siempre que se construya una representación en forma de **circuito （circuit）de conocimiento cero** para dicho proceso. La propiedad de **conocimiento cero** de estas pruebas permite **ocultar secciones de la entrada o del modelo** si es necesario.

![download (9)](https://hackmd.io/_uploads/S1V9fObwlg.jpg)


El **aprendizaje automático de conocimiento cero（ZKML）** es una herramienta para **proteger la privacidad de los datos** durante el entrenamiento y la inferencia de modelos. Este enfoque permite que el propietario de los datos o del modelo pueda **demostrar la exactitud de un cálculo** (como la **predicción de un modelo de machine learning**) sin revelar ninguna información sobre los datos ni sobre el cálculo en sí.

#### Metodología

En una situación típica de **aprendizaje automático**, un proveedor de servicios de aplicación (el **demostrador（prover）**) desea ofrecer un modelo de machine learning propio al usuario (el **verificador**) mientras mantiene **el modelo en privado**. Los demostradores pueden utilizar **pruebas de conocimiento cero（ZKP）** para **probar que realizaron efectivamente un cálculo utilizando un modelo específico**, sin exponer ni el modelo ni el proceso de cálculo en sí.


#### Aplicaciones

- **EZKL:** Para especificar **demostradores（provers）** y **verificadores（verifiers）**, muchas herramientas de **ZKML** representadas por la biblioteca **EZKL** pueden implementar **descripciones de alto nivel de modelos de aprendizaje automático** u otros programas basados en **gráficas computacionales**. Un demostrador puede **probar que una salida específica fue generada al ejecutar una red neuronal concreta sobre un conjunto de datos determinado**.

![download (5)](https://hackmd.io/_uploads/S14fSd-Pxx.png)
[->Pagina web](https://ezkl.xyz/)

- **Giza:** es una **plataforma de aprendizaje automático** construida sobre **StarkNet** que puede utilizarse para **desplegar y ampliar modelos de machine learning**, así como para resolver los problemas de **interoperabilidad**, **rendimiento** y **transparencia** que enfrentan los modelos de machine learning basados en la nube. Utiliza el formato abierto **ONNX** para mejorar la interoperabilidad. A través de una serie de **operadores comunes** y **formatos de archivo** definidos, los desarrolladores pueden utilizar libremente **TensorFlow**, **PyTorch**, **Scikit-Learn** y otros frameworks y herramientas.

![download (6)](https://hackmd.io/_uploads/ByY2Sd-wlg.png)

[->Pagina web](https://www.gizatech.xyz/)





#### Otras Aplicaciones

Las **pruebas de conocimiento cero（ZKP）** tienen una amplia gama de aplicaciones que van más allá de la tecnología **blockchain**. Su capacidad única para **verificar la exactitud de la información sin revelar los datos en sí** las convierte en una herramienta valiosa en diversos campos tecnológicos.

Estas aplicaciones aprovechan las **ZKP（pruebas de conocimiento cero）** para abordar desafíos en otras áreas clave, incluyendo la **autenticación de imágenes**, los **sistemas de votación descentralizados** y los **procesos seguros entre múltiples partes**, garantizando la **privacidad de los datos** y la **integridad computacional**.

#### Metodología
En particular, nos enfocamos en **cuatro aplicaciones distintas**:  
1) **Autenticación de Imágenes**,  
2) **Sistemas de Votación Electrónica Seguros**,  
3) **Generación de Aleatoriedad y Candados Temporales**, y  
4) **Cómputos Colaborativos**.  

- **PhotoProof:** aborda este desafío al permitir que las imágenes sean **autenticadas incluso después de someterse a transformaciones permitidas**, como **recortes** o **ajustes de color**. Esta aplicación es especialmente significativa en **escenarios legales**, donde la **evidencia fotográfica debe permanecer sin alteraciones**, y en el **periodismo**, donde la **integridad de las imágenes** puede ser crucial para la **formación de la opinión pública**.

[->Lectura](https://ieeexplore.ieee.org/document/7546506/)

- **VeeDo:** aprovecha las **ZKP（pruebas de conocimiento cero）** dentro de los **VDF（Verifiable Delay Functions）** para proporcionar una **fuente confiable de aleatoriedad** resistente a la manipulación, lo que mejora la **imprevisibilidad** y la **equidad** en aplicaciones de blockchain. En los **protocolos criptográficos**, la función de **candado temporal（timelock）** de VeeDo puede utilizarse para **proteger información durante un período predeterminado**, añadiendo una capa adicional de **seguridad a transacciones o procesos sensibles**.

[->Lectura](https://medium.com/starkware/presenting-veedo-e4bbff77c7ae)

- **ZKP2P:** surge como un puente innovador que integra las finanzas tradicionales con las finanzas descentralizadas mediante un marco **sin confianza（trustless）** y centrado en la **privacidad**. 

    En su núcleo, **ZKP2P** utiliza **pruebas de conocimiento cero（ZKP）** para verificar las firmas **DomainKeys Identified Mail（DKIM）** en los correos electrónicos de confirmación de pagos. El protocolo **ZKP2P** está diseñado para ser interoperable con los sistemas de pago **Web2** predominantes, cerrando así una brecha significativa entre las **monedas fiat** y las **criptomonedas**.

[->Página web](https://www.zkp2p.xyz/)

![download (10)](https://hackmd.io/_uploads/ByMxFuZPxg.jpg)

## 4. Conclusión y Trabajo Futuro

En el mundo en rápida evolución de la seguridad y la privacidad digital, las **pruebas de conocimiento cero（ZKP）** han emergido como una herramienta revolucionaria, ofreciendo una forma de compartir **pruebas de integridad computacional** sin revelar la entrada del cálculo. Esta revisión exploró una amplia gama de aplicaciones prácticas y casos de uso de las ZKP, mostrando su papel crucial en el avance de las soluciones criptográficas y en la mejora de la privacidad en las interacciones digitales.

![zk-applications](https://hackmd.io/_uploads/ryNMqOZPel.jpg)


Al concluir nuestra revisión sobre las aplicaciones de las **ZKP**, identificamos algunas direcciones prometedoras para futuras investigaciones que amplíen su uso y aplicabilidad práctica. Los trabajos futuros podrían explorar protocolos de **ZKP ligeros** que sean viables para dispositivos con capacidades computacionales limitadas, permitiendo una comunicación segura y preservadora de la privacidad en el entorno del **Internet de las Cosas（IoT）**. Además, la integración de las **ZKP** con el **machine learning（ML）**, especialmente en el contexto de modelos más grandes y complejos, presenta un espacio para posibles avances significativos.

![download (11)](https://hackmd.io/_uploads/ByaeiuZPll.jpg)

En el ámbito de la **escalabilidad blockchain en Layer-2** utilizando **ZKP（pruebas de conocimiento cero）**, las investigaciones futuras incluyen la mejora de los **tiempos de generación de pruebas SNARK**, con el fin de habilitar la **componibilidad sincrónica universal** entre diferentes **rollups de Layer-2**.  

![3a0321a4-image18](https://hackmd.io/_uploads/rk_YjuZvlg.jpg)

La **universal synchronous composability** permite que distintos rollups accedan y actualicen el mismo **estado universal de la blockchain**, compartiendo un **secuenciador** que publica los cambios de estado en **Layer-1**. Esto permitiría **desfragmentar el ecosistema de rollups de Layer-2** y consolidar tanto la **liquidez** como los **datos de estado blockchain** entre todos los rollups de segunda capa.


[![1_lc5TADw5LvFkj_7Q98tapA](https://hackmd.io/_uploads/ryPv2dbvgg.png)
](https://)

Aunque de esto, aún no existe un sistema de **ZK SNARK** que pruebe la **ejecución válida de un exchange con libro de órdenes privado**. Esto también puede extenderse a los **dark pools**, que son **exchanges de blockchain privatizados** habilitados por **ZKP（pruebas de conocimiento cero）**, los cuales pueden utilizar el modelo de exchange basado en **automated market maker（AMM）**.

![investigacion-y-desarrollo-1](https://hackmd.io/_uploads/Byrv6_ZPgg.jpg)

Se espera que surjan muchos más usos de las **ZKP（pruebas de conocimiento cero）** para el **cumplimiento legal** en **aplicaciones financieras privadas**, la **mitigación de riesgos asociados a la inteligencia artificial**, como los **deepfakes**, y para implementar **mejoras adicionales de privacidad** en el ámbito financiero.  A medida que **avanzamos en nuestras técnicas computacionales**, **exploramos nuevas aplicaciones** y **profundizamos en la comprensión teórica**, las **ZKP** tienen el potencial de **transformar profundamente la forma en que se logra la privacidad y la seguridad en la era digital**.

