Towards Automated Formal Verification of zkEVMs Using LLM-Guided Constraint Synthesis
O artigo apresenta o VeriSynth, um novo framework que aproveita um pipeline híbrido LLM-SMT para sintetizar automaticamente modelos de verificação executáveis a partir de código Rust zkEVM, alcançando taxas de detecção de bugs superiores a 90% ao superar as limitações de especificações manuais e alucinações de LLMs.
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 o próprio internet como um gigante e global livro de registro digital onde todos podem ver cada transação, mas ninguém sozinho o controla. Este é o mundo da blockchain, e seu residente mais famoso é o Ethereum. Para tornar este sistema mais rápido e barato, desenvolvedores construíram redes de "Camada-2" que realizam o trabalho pesado fora de cena, mostrando apenas os resultados finais para a rede principal. Para provar que esses resultados fora de cena são honestos sem revelar os detalhes secretos, eles usam um truque mágico chamado "Prova de Conhecimento Zero" (Zero-Knowledge Proof). Pense nisso como um mago mostrando a você uma caixa trancada e provando, sem abri-la, que o tesouro dentro dela é exatamente o que ele prometeu.
Mas aqui está a pegadinha: para a mágica funcionar, o livro de feitiços do mago (o código de computador) deve ser perfeito. Se o mago cometer um erro minúsculo no feitiço — como contar a quantidade errada de ouro ou esquecer de atualizar o mapa — a caixa ainda pode parecer trancada e válida, mesmo que esteja vazia ou cheia de moedas falsas. Isso é um pesadelo para a segurança. Para impedir isso, especialistas usam a "verificação formal", um método onde um matemático robô super rigoroso verifica o livro de feitiços linha por linha para garantir que a lógica seja impecável. No entanto, escrever as instruções para esse robô é incrivelmente difícil, como tentar traduzir um manual de videogame complexo escrito em uma linguagem secreta para um livro de matemática que o robô consiga ler.
É aqui que uma nova ferramenta chamada VeriSynth entra em cena. Os pesquisadores por trás dela perceberam que, embora a Inteligência Artificial (IA) seja ótima para escrever código, ela também é propensa a "alucinar" — inventar fatos que parecem reais, mas estão errados. Por isso, eles não apenas pediram à IA para encontrar os bugs. Em vez disso, eles construíram uma equipe onde a IA atua como uma tradutora criativa, transformando o código bagunçado e secreto em um rascunho para o matemático robô, e o robô atua como o juiz rigoroso que diz: "Sim, isto está correto" ou "Não, isto é um absurdo, tente novamente".
O Problema: O Bug Silencioso
No mundo das Máquinas Virtuais Ethereum de Conhecimento Zero (zkEVMs), o código que comanda o espetáculo é escrito em uma linguagem chamada Rust. É poderosa, mas traiçoeira. Às vezes, um desenvolvedor pode acidentalmente escrever uma linha de código que conta o gás (a taxa para uma transação) de forma errada, ou esquece de atualizar um slot de memória. Se isso acontecer, o sistema pode gerar uma prova "válida" para uma transação que está, na verdade, quebrada. É como um caixa de banco que acidentalmente te dá US$ 100 em vez de US$ 10, mas o recibo diz que está tudo perfeito. Como a prova parece válida, o erro passa despercebido, quebrando silenciosamente a segurança de todo o sistema.
A maneira usual de corrigir isso é para humanos escreverem casos de teste detalhados, esperando capturar cada possível erro. Mas os humanos cansam, e não conseguem imaginar cada cenário estranho que um computador possa encontrar. Outra abordagem é usar Modelos de Linguagem de Grande Escala (LLMs) — o mesmo tipo de IA que escreve ensaios ou códigos — para encontrar os bugs. Mas o artigo argumenta que pedir a uma IA para apenas "procurar bugs" é pouco confiável. A IA pode supor que o bug está lá quando não está, ou perdê-lo inteiramente, porque carece da certeza matemática estrita necessária para a segurança.
A Solução: Uma Equipe de Tradutor e Juiz
Os autores deste artigo, Shichen Huang e sua equipe, criaram uma estrutura chamada VeriSynth. Eles tratam o problema como um jogo de "Telefone Sem Fio" de alto risco onde a mensagem deve ser perfeita.
- O Tradutor (O LLM): Primeiro, o sistema quebra o complexo código Rust em pequenos pedaços gerenciáveis, como separar um quebra-cabeça gigante em peças individuais. Ele então pede a uma IA para traduzir cada peça em um "modelo de verificação". Isso não é apenas uma descrição; é um conjunto de regras matemáticas estritas (escritas em uma linguagem chamada Python/Z3) que dizem ao matemático robô exatamente como o código deveria se comportar.
- A Biblioteca de Referência: Para impedir que a IA invente coisas, o VeriSynth fornece a ela uma "folha de cola" de exemplos previamente verificados. É como mostrar à IA uma foto de um conjunto de Lego corretamente montado antes de pedir para ela construir um novo, para que ela saiba como as peças devem parecer.
- O Juiz (O Solucionador SMT): Esta é a parte mais importante. A tradução da IA nunca é confiada imediatamente. Ela é entregue a um matemático robô super rigoroso (um solucionador SMT). O robô verifica a tradução contra as regras. Se a tradção tiver um erro de sintaxe, uma peça faltando ou uma contradição lógica, o robô a rejeita.
- O Auto-Reparo: Se o robô rejeitar a tradução, ele não diz apenas "falha". Ele envia uma mensagem de erro específica de volta para a IA: "Você usou o tamanho errado para este número" ou "Você esqueceu de atualizar a memória". A IA então tenta corrigir o erro e o envia de volta. Esse ciclo continua até que o robô esteja satisfeito.
O Que Eles Descobriram
A equipe testou o VeriSynth em um conjunto de dados personalizado de "bugs" que eles mesmos construíram, contendo 95 exemplos diferentes de códigos com erros ocultos. Esses erros variavam de erros matemáticos simples a questões complexas sobre como o sistema lida com chamadas entre diferentes programas.
Os resultados foram impressionantes:
- O VeriSynth encontrou 87 de 95 bugs, alcançando uma taxa de detecção de 91,6%.
- Em contraste, se eles apenas pedissem à IA para encontrar os bugs sem o juiz robô rigoroso, ela encontraria apenas 44 bugs (46,3%).
- Mesmo se deixassem a IA conversar com o robô e tentar novamente (uma abordagem "conversacional"), ela encontraria apenas 58 bugs (61,1%).
O artigo também comparou o VeriSynth com os métodos de teste do mundo real usados por um grande projeto chamado Scroll. A equipe do Scroll escreveu seus próprios testes para capturar bugs. Seus testes capturaram 55 dos 95 bugs. O VeriSynth capturou 87, o que significa que encontrou 32 bugs adicionais que os testes escritos por humanos perderam.
Por Que Isso Importa
Os pesquisadores enfatizam que isso não se trata de substituir desenvolvedores humanos ou dizer que a IA é perfeita. Em vez disso, trata-se de usar a IA como uma ferramenta poderosa para fazer o trabalho pesado de tradução, mantendo um robô rigoroso e implacável como a autoridade final. O recurso de "auto-reparo" foi a parte mais crítica; sem ele, a taxa de sucesso do sistema caiu para 66,3%, provando que a capacidade de corrigir seus próprios erros é o que faz o sistema funcionar.
O estudo sugere que, ao combinar a criatividade da IA com a lógica estrita dos solucionadores matemáticos, podemos construir uma rede de segurança para o futuro da blockchain que é muito mais forte do que aquilo que os humanos podem construir sozinhos. É um lembrete de que, no mundo da segurança digital, a melhor defesa é uma equipe onde a mente criativa propõe e a lógica estrita decide.
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.