Binius

Binius is a new STARK (a proof system like a SNARK) that works natively over binary fields.

Older SNARKS like Groth16 and PLONK are widely used in practice (here at 0xPARC, our ZK infrastructure rests on Groth16), but they are very costly because they work over large fields. Since Binius works over binary fields, it offers big reductions in prover overhead.

Overview of a SNARK / STARK

A proof system (SNARK or STARK) lets a prover convince a verifier of the truth of some statement, like:

A SNARK or STARK starts with witnesses to the truth of the statement. In our example, the witnesses might include:

Most SNARKs and STARKs have a feature called “zero-knowledge”: the prover can choose which witnesses to make public and which to keep private. In our example, the string “Balance due: $0” and the signature-verification key would be public witnesses: the verifier needs to see them for the proof to have meaning. All other witnesses would be private, so the verifier would not learn anything else about the text of the message.

To product a cryptographic proof, a SNARK/STARK will pass through three steps.

(The difference between a SNARK and a STARK isn’t important to us here, but in case you’re wondering: A SNARK requires a “trusted setup.” In trusted setup, a trusted third party does some randomized math to generate some “public parameters”, and then they forget the random numbers they used to make the parameters. The third party has to be trusted to delete those secret random numbers – if they don’t, they will have a secret back door that they could use to create false proofs. A STARK doesn’t rely on trusted setup, so it is safe against this sort of security vulnerability.)

Overview of Binius

Now that we’ve explained the three pieces of a STARK, we can come back and show how Binius works.