← Latest papers
💻 computer science

Formally Verifying Noir Zero Knowledge Programs with NAVe

This paper presents NAVe, an open-source formal verifier that uses SMT-LIB and the cvc5 solver to formally verify the correctness and proper constraints of Noir zero-knowledge programs by translating their ACIR intermediate representation into finite field polynomial equations.

Original authors: Pedro Antonino, Namrata Jain

Published 2026-01-15
📖 4 min read☕ Coffee break read

Original authors: Pedro Antonino, Namrata Jain

Original paper licensed under CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). This is an AI-generated explanation of the paper below. It is not written or endorsed by the authors. For technical accuracy, refer to the original paper. Read full disclaimer

Imagine you are building a high-security vault. You want to prove to a bank manager that you know the combination to the vault without actually telling them what the combination is. This is the magic of Zero-Knowledge (ZK) proofs.

However, building these vaults is tricky. The "blueprints" for these proofs are complex mathematical puzzles called arithmetic circuits. If a single line of the blueprint is wrong, the vault might be insecure, or the proof might fail.

This paper introduces a new tool called NAVe (Noir Acir Verifier) designed to check these blueprints for errors before they are ever used. Here is how it works, explained simply:

1. The Problem: The "Secret Recipe" vs. The "Cookbook"

The authors focus on a programming language called Noir. Think of Noir as a high-level cookbook that makes it easy to write recipes for these vaults.

  • The Cook (Developer): Writes a recipe in easy-to-read Noir.
  • The Translator (Compiler): Turns that recipe into a strict, low-level instruction manual called ACIR. This manual is a list of math equations that the computer must solve to prove the vault is secure.
  • The Danger: Sometimes, the translator makes a mistake, or the cook forgets to include a crucial step. In the world of ZK, this is called being "under-constrained." It's like writing a recipe that says "add salt" but forgetting to say how much. The result might be edible, but it's not the dish you intended.

2. The Solution: The "Math Detective" (NAVe)

The authors created NAVe, a formal verifier. Think of NAVe as a super-smart math detective that reads the low-level instruction manual (ACIR) and checks if the math actually adds up to what the cook intended.

NAVe uses a powerful logic engine (called an SMT solver) to ask questions like:

  • "If I put in a secret number, does the math always result in the correct public proof?"
  • "Is there any way to trick the system with a fake number?"

If the math is broken, NAVe doesn't just say "Error." It acts like a detective finding a clue: it shows the developer exactly which number they could have used to break the system. This helps them fix the blueprint immediately.

3. Two Ways to Solve the Puzzle

The paper describes two different ways NAVe translates the math puzzles to solve them:

  1. The Integer Way: It treats the numbers like regular whole numbers (1, 2, 3...) and checks the math using standard arithmetic rules.
  2. The Finite Field Way: It treats the numbers as if they are on a circular clock (where after a certain number, you wrap back to zero). This is how the actual ZK proofs work.

The authors found that neither method is perfect for every situation. Sometimes the "Integer" detective is faster; other times, the "Finite Field" detective is better. They suggest using both detectives at the same time to get the best results.

4. The "Unconstrained" Trap

A unique feature of Noir is "unconstrained code." Imagine a part of the recipe where the chef is allowed to guess the ingredients without being checked. This is useful for speed, but dangerous if the chef guesses wrong.

  • The Risk: A developer might write code that looks like it checks the ingredients, but because it's in the "unconstrained" section, the computer doesn't actually force the check.
  • NAVe's Job: NAVe specifically looks for these "ghost checks." It verifies that even if a developer uses the "guessing" section, they have added a separate, strict rule (an assert) to make sure the guess was actually correct.

5. What They Found

The authors tested NAVe on a variety of existing Noir programs:

  • It Works: NAVe successfully caught errors in programs where the math didn't match the intent.
  • The Bottleneck: They discovered that checking "range constraints" (making sure a number fits within a specific number of bits, like checking if a number is between 0 and 255) is very hard for the math detective. It sometimes takes a long time or gets stuck.
  • The Future: They plan to build better "shortcuts" (abstractions) to help the detective solve these tricky range puzzles faster.

Summary

In short, NAVe is a safety net for developers building privacy-preserving applications. It translates their code into a strict mathematical language and uses a powerful solver to ensure that the code does exactly what it claims to do, catching subtle bugs that could otherwise lead to security failures. It's like having a rigorous inspector check the structural integrity of a bridge before anyone is allowed to drive over it.

Drowning in papers in your field?

Get daily digests of the most novel papers matching your research keywords — with technical summaries, in your language.

Try Digest →