← Últimos artigos
💻 computer science

Formally Verifying Noir Zero Knowledge Programs with NAVe

Este artigo apresenta o NAVe, um verificador formal de código aberto que utiliza SMT-LIB e o solver cvc5 para verificar formalmente a correção e as restrições adequadas de programas de conhecimento zero Noir, traduzindo sua representação intermediária ACIR em equações polinomiais de corpo finito.

Autores originais: Pedro Antonino, Namrata Jain

Publicado 2026-01-15
📖 5 min de leitura🧠 Leitura aprofundada

Autores originais: Pedro Antonino, Namrata Jain

Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

Imagine que você está construindo um cofre de alta segurança. Você quer provar a um gerente de banco que conhece a combinação do cofre sem, de fato, dizer a ele qual é a combinação. Isso é a magia das provas de Conhecimento Zero (Zero-Knowledge ou ZK).

No entanto, construir esses cofres é complicado. Os "projetos" para essas provas são quebra-cabeças matemáticos complexos chamados circuitos aritméticos. Se uma única linha do projeto estiver errada, o cofre pode ficar inseguro ou a prova pode falhar.

Este artigo apresenta uma nova ferramenta chamada NAVe (Noir Acir Verifier), projetada para verificar esses projetos em busca de erros antes mesmo de serem usados. Veja como funciona, explicado de forma simples:

1. O Problema: A "Receita Secreta" vs. O "Livro de Receitas"

Os autores focam em uma linguagem de programação chamada Noir. Pense no Noir como um livro de receitas de alto nível que torna fácil escrever receitas para esses cofres.

  • O Cozinheiro (Desenvolvedor): Escreve uma receita em um Noir de fácil leitura.
  • O Tradutor (Compilador): Transforma essa receita em um manual de instruções de baixo nível chamado ACIR. Este manual é uma lista de equações matemáticas que o computador deve resolver para provar que o cofre é seguro.
  • O Perigo: Às vezes, o tradutor comete um erro, ou o cozinheiro esquece de incluir um passo crucial. No mundo de ZK, isso é chamado de ser "sub-restrito" (under-constrained). É como escrever uma receita que diz "adicione sal", mas esquece de dizer quanto. O resultado pode até ser comestível, mas não é o prato que você pretendia.

2. A Solução: O "Detetive Matemático" (NAVe)

Os autores criaram o NAVe, um verificador formal. Pense no NAVe como um detetive matemático superinteligente que lê o manual de instruções de baixo nível (ACIR) e verifica se a matemática realmente condiz com o que o cozinheiro pretendia.

O NAVe usa um poderoso motor de lógica (chamado solver SMT) para fazer perguntas como:

  • "Se eu inserir um número secreto, a matemática sempre resultará na prova pública correta?"
  • "Existe alguma maneira de enganar o sistema com um número falso?"

Se a matemática estiver quebrada, o NAVe não apenas diz "Erro". Ele age como um detetive encontrando uma pista: ele mostra ao desenvolvedor exatamente qual número eles poderiam ter usado para quebrar o sistema. Isso os ajuda a corrigir o projeto imediatamente.

3. Duas Maneiras de Resolver o Quebra-Cabeça

O artigo descreve duas maneiras diferentes de o NAVe traduzir os quebra-cabeças matemáticos para resolvê-los:

  1. O Jeito dos Inteiros: Ele trata os números como números inteiros comuns (1, 2, 3...) e verifica a matemática usando regras aritméticas padrão.
  2. O Jeito do Campo Finito (Finite Field): Ele trata os números como se estivessem em um relógio circular (onde, após um certo número, você volta ao zero). É assim que as provas ZK reais funcionam.

Os autores descobriram que nenhum dos métodos é perfeito para todas as situações. Às vezes, o detetive "Inteiro" é mais rápido; outras vezes, o detetive "Campo Finito" é melhor. Eles sugerem usar ambos os detetives ao mesmo tempo para obter o melhor resultado.

4. A Armadilha "Não Restrita"

Um recurso único do Noir é o "código não restrito" (unconstrained code). Imagine uma parte da receita onde o chef tem permissão para adivinhar os ingredientes sem ser verificado. Isso é útil para velocidade, mas perigoso se o chef adivinhar errado.

  • O Risco: Um desenvolvedor pode escrever um código que parece verificar os ingredientes, mas como está na seção "não restrita", o computador não força a verificação de fato.
  • O Trabalho do NAVe: O NAVe procura especificamente por essas "verificações fantasmas". Ele verifica se, mesmo que um desenvolvedor use a seção de "adivinhação", ele adicionou uma regra rigorosa separada (um assert) para garantir que a adivinhação estava realmente correta.

5. O Que Eles Descobriram

Os autores testaram o NAVe em uma variedade de programas Noir existentes:

  • Funciona: O NAVe detectou com sucesso erros em programas onde a matemática não correspondia à intenção.
  • O Gargalo: Eles descobriram que verificar "restrições de intervalo" (range constraints — garantir que um número caiba dentro de um número específico de bits, como verificar se um número está entre 0 e 255) é muito difícil para o detetive matemático. Às vezes, leva muito tempo ou fica travado.
  • O Futuro: Eles planejam construir melhores "atalhos" (abstrações) para ajudar o detetive a resolver esses quebra-cabeças de intervalo complicados mais rapidamente.

Resumo

Em suma, o NAVe é uma rede de segurança para desenvolvedores que constroem aplicações que preservam a privacidade. Ele traduz o código deles em uma linguagem matemática rigorosa e usa um solver poderoso para garantir que o código faça exatamente o que afirma fazer, capturando bugs sutis que poderiam levar a falhas de segurança. É como ter um inspetor rigoroso verificando a integridade estrutural de uma ponte antes que qualquer pessoa tenha permissão para dirigir sobre ela.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →