Uma prova de conhecimento zero (ZKP) é um método criptográfico que permite que uma parte, chamada de provador, convença outra parte, o verificador, de que uma afirmação é verdadeira sem revelar qualquer informação além da verdade da própria afirmação. Em termos técnicos, uma ZKP satisfaz três propriedades principais: completude, solidez e conhecimento zero. A completude garante que provadores honestos possam sempre convencer o verificador se a afirmação for verdadeira. A solidez garante que provadores desonestos não possam enganar o verificador para aceitar uma afirmação falsa. O conhecimento zero significa que o verificador não aprende nada além da validade da reivindicação.
Este conceito não é apenas teórico. As provas de zero conhecimento já estão sendo usadas em sistemas criptográficos modernos para verificar identidades, validar transações e impor políticas sem revelar dados privados. Elas são especialmente adequadas para aplicações de blockchain, onde privacidade e descentralização são fundamentais.
Blockchains públicos como Ethereum e Bitcoin operam com o princípio da total transparência. Cada nó na rede deve re-executar cada transação para validá-la. Embora esse modelo garanta segurança e consenso, ele vem à custa de escalabilidade e privacidade. Provas de conhecimento zero abordam ambas as limitações.
Para privacidade, ZKPs permitem que os usuários provem algo — por exemplo, que uma transação é válida — sem expor o conteúdo da transação. Isso possibilita transações confidenciais e lógica de contrato inteligente privada, mantendo a verificabilidade pública. Para escalabilidade, ZKPs comprimem a computação em uma prova sucinta. Essa prova pode ser verificada rapidamente na blockchain, mesmo que a computação original tenha sido cara e demorada. Em vez de executar toda a lógica em cada nó, apenas a prova precisa ser verificada. Isso reduz drasticamente os custos de gás e melhora a capacidade de processamento.
A tecnologia de zero-knowledge torna possível escalar blockchains sem sacrificar a confiança e construir aplicações privadas sem introduzir intermediários centralizados. À medida que os blockchains se tornam mais complexos e são adotados para uso mainstream, essas capacidades se tornam essenciais.
Os contratos inteligentes transformaram as blockchains em plataformas programáveis. Eles permitem que os desenvolvedores criem aplicações descentralizadas que executam automaticamente a lógica com base em regras predefinidas. No entanto, os contratos inteligentes são limitados pelos limites computacionais da própria blockchain. Eles devem ser executados em cadeia, onde cada operação é cara e pública.
À medida que as aplicações descentralizadas crescem em complexidade, essas limitações se tornam mais problemáticas. Realizar grandes cálculos ou acessar vastos conjuntos de dados na blockchain é impraticável. Ao mesmo tempo, os usuários exigem cada vez mais privacidade, que os contratos inteligentes padrão não podem fornecer.
Para resolver isso, os desenvolvedores começaram a mover a computação para fora da cadeia, preservando a confiança por meio de provas criptográficas. É aqui que as provas de conhecimento zero entram em cena. Em vez de executar toda a lógica na cadeia, a computação pesada é realizada fora da cadeia, e apenas uma prova sucinta do resultado é enviada para a blockchain. Isso mantém a blockchain segura e verificável, ao mesmo tempo em que melhora drasticamente o desempenho e a confidencialidade.
Essa transição da lógica on-chain para a verificação off-chain marca uma mudança significativa na arquitetura blockchain. Ela permite que aplicações escalem além dos limites da Ethereum Virtual Machine e suporte novos casos de uso que de outra forma seriam impossíveis.
O coprocessador de zero-knowledge é um sistema off-chain especializado que realiza cálculos e gera provas criptográficas de sua correção. Ao contrário dos contratos inteligentes, que são executados diretamente na blockchain, um coprocessador ZK opera externamente. Ele processa entradas, executa um cálculo usando um zkVM ou um circuito personalizado e produz uma prova de zero-knowledge. Essa prova pode então ser enviada on-chain para provar que o cálculo foi executado corretamente.
A ideia de um coprocessador é emprestada do hardware de computador. Em sistemas tradicionais, um coprocessador é um processador separado usado para lidar com tarefas específicas, como gráficos ou aritmética de ponto flutuante. Da mesma forma, um coprocessador ZK descarrega lógica complexa da blockchain, permitindo que a cadeia principal se concentre na verificação em vez da execução.
Os coprocessadores ZK introduzem um ambiente de execução modular. Os desenvolvedores podem construir lógica em runtimes especializados fora da cadeia, executar grandes ou computações privadas lá e, em seguida, enviar o resultado verificado de volta para qualquer blockchain. Essa modularidade permite a composabilidade entre cadeias, melhora o desempenho e suporta um design de aplicativo mais flexível.
Na arquitetura moderna de blockchain, os coprocessadores ZK ocupam uma camada intermediária entre contratos inteligentes on-chain e fontes externas de dados ou computação. Na base, você tem a própria blockchain, que registra o estado, impõe regras e verifica provas. Acima disso estão os contratos inteligentes, que definem a lógica de interface pública da aplicação e aceitam entradas de usuários ou de outros contratos.
Os coprocessadores ZK operam ao lado ou abaixo desses contratos inteligentes. Eles recebem entradas — muitas vezes na forma de calldata ou mensagens assinadas — do usuário ou contrato, executam a lógica fora da cadeia e geram uma prova de conhecimento zero. A prova é enviada de volta ao contrato inteligente, que a verifica usando uma chave de verificador. Se válida, o contrato atualiza seu estado ou aciona uma resposta.
Esta arquitetura é cada vez mais modular. Um coprocessador pode atender a múltiplos contratos ou aplicações. Da mesma forma, um contrato pode trabalhar com múltiplos coprocessadores. O sistema também é extensível entre cadeias. Um coprocessador ZK pode calcular uma prova para dados em uma cadeia e submetê-la a outra, possibilitando a interoperabilidade entre cadeias com fortes garantias.