
When you need to prove your age online, you typically upload your ID. That document then gets:
Your government ID is one of your most sensitive documents. Yet you're sharing it just to prove one single bit of information — for example, "yes, I am over 21."
Think of it this way:
What you NEED to prove: "I am over 21" ← 1 bit of information
What you ACTUALLY share: Full name, address,
date of birth, ID number,
photo, expiry date... ← Dozens of sensitive details
High-profile data breaches have repeatedly exposed government IDs that people shared for routine checks. This isn't an accident — it's the predictable result of a broken system.
Governments are now mandating ID-based verification:
App developers face a painful choice:
"Can we prove something about a credential without ever revealing the credential itself?"
Imagine you want to prove you're old enough to enter a bar. Today's system is like handing the bouncer your wallet — they look at your ID, but also see your address, your full name, and everything else.
The ideal system would be like this:
The bouncer asks a question. You answer only "yes" or "no." The bouncer is mathematically certain you're telling the truth — but learns nothing else.
This is exactly what Zero-Knowledge Proofs (ZKPs) make possible.
A ZKP is a cryptographic method that lets you prove a statement is true without revealing why it's true or what data supports it.
| Property | Meaning |
|---|---|
| Completeness | If the claim is true, an honest prover can always convince the verifier |
| Soundness | A dishonest prover cannot fake a valid proof |
| Zero-Knowledge | The verifier learns nothing beyond the fact that the claim is true |
Traditional: Show ID → Verifier sees everything
ZKP: Prove claim → Verifier learns only "yes, claim is true"
In Vega's case:
Prior ZKP systems had serious drawbacks:
Vega solves all of these.
Vega didn't emerge from nothing. It combines four prior research contributions:
NeutronNova → Folds many SHA-256 steps into one
Spartan → Proves the folded result efficiently
NovaBlindFold → Adds zero-knowledge with minimal overhead
To prove something from a credential, the system must:
Signature verification would normally be the expensive part. But Vega is clever — it works in a mathematical field where signature arithmetic is native and cheap. So hashing becomes the bottleneck.
SHA-256 processes data in 64-byte blocks, applying the same compression function repeatedly:
Block 1 → Compress → Intermediate digest 1
Block 2 → Compress → Intermediate digest 2
...
Block 30 → Compress → Final hash
A typical mobile driver's license requires 30 blocks.
The straightforward circuit approach: unroll all 30 iterations into one giant circuit.
Problem: The circuit size grows with credential length. This is slow, produces large proofs, and leaks information about credential size.
Instead of one giant circuit:
Naive: [Block1 + Block2 + ... + Block30] → One huge circuit
Vega: [Block1] → Step circuit instance 1
[Block2] → Step circuit instance 2
...
[Block30] → Step circuit instance 30
NeutronNova folds all 30 instances → ONE instance
Spartan proves just ONE step + ONE core circuit
Result: The proving key only needs to describe one step and one core — it stays small regardless of credential length.
Vega splits work into two phases:
Credential loaded
↓
Split into "step circuits" (SHA-256 blocks) and "core circuit" (signature, age check)
↓
Commit reusable data → Cache it
This expensive work is done once and stored.
Re-randomize cached commitments (for privacy)
↓
Fold all SHA-256 step instances via NeutronNova
↓
Prove folded step + core circuit via Spartan
↓
Apply NovaBlindFold for zero-knowledge
↓
Final ZK proof: 108 KB, generated in 92 ms
A user might present their credential to:
Each time, the credential hasn't changed. Only the session nonce (a fresh random value from the verifier) and possibly the date change.
By caching the expensive precomputed work, subsequent presentations skip most of the heavy lifting.
A mobile driver's license is encoded in CBOR (Concise Binary Object Representation) — a structured binary format. Building a full CBOR parser as a circuit would be:
The credential is signed by a trusted issuer. So we already know it's well-formed. We don't need to parse it — we just need to reach in and grab specific fields.
Vega treats the credential as a byte-addressable lookup table:
Prover says: "The device public key starts at byte 847"
"Here are the bytes"
Circuit checks:
✓ Do these bytes match the authenticated credential?
✓ Is the correct CBOR prefix at the start of the field?
(prevents claiming the wrong field)
✓ Are the addresses contiguous?
(prevents splicing bytes from unrelated locations)
Result: An entire parser replaced by a handful of lookups.
Credentials vary in length. If the circuit size varied with the credential, that would leak information about the credential.
Solution: Build a table of all intermediate SHA-256 digests. The core circuit picks the correct one using a private index. If the prover picks the wrong entry, the issuer's signature check fails — so cheating is impossible.
A proof system must be zero-knowledge: the verifier should learn nothing beyond the specific claim being proved.
Standard approaches to achieve this are:
Step 1: Commit to every message the prover sends using hiding cryptographic commitments
Instead of sending: actual_value
The prover sends: commit(actual_value, random_blinding_factor)
The verifier sees commitments, not values.
Step 2: Prove the hidden values would pass the verifier's checks
The verifier only performs a logarithmic number of operations — so the constraint system expressing those checks is tiny (just a few hundred constraints).
Step 3: Apply NovaBlindFold
Fold this small constraint system with a random instance via Nova's folding scheme. This hides the underlying data.
Key insight: The zero-knowledge overhead scales with this small constraint system — not with the full secret data. This is why it's cheap.
A ZKP proves facts about a credential. But what stops someone who steals a credential from generating valid proofs?
Or in an AI agent world: what stops an unauthorized agent from presenting proofs on someone's behalf?
Every proof is cryptographically tied to the holder's physical device:
1. Verifier sends a fresh session nonce (random value)
2. The user's device signs the nonce with its private key
(stored in the phone's secure element — never leaves hardware)
3. The circuit:
- Extracts the device public key from the credential (via lookup)
- Verifies the device signature over the session nonce hash
Result:
If you present your credential to Website A and Website B, and both proofs look the same, those services could collude to track you.
Before each proof, the precomputed commitments are refreshed with new randomness:
Presentation 1: commit(data, random_1) → Proof A
Presentation 2: commit(data, random_2) → Proof B
Proof A and Proof B are cryptographically unlinkable — even though they prove the same fact about the same credential.
This is cheaper than recomputing everything from scratch, and it ensures two proofs about the same credential cannot be linked.
| Metric | Typical mDL | Small credential |
|---|---|---|
| Proof generation time | 92 ms | 62 ms |
| Proof size | 108 KB | 83 KB |
| Verification time | 23 ms | 17 ms |
| Prover key size | 464 KB | — |
| Trusted setup required | ❌ None | ❌ None |
User taps "Present Credential"
↓
92 milliseconds later...
↓
Proof is done. Service learns only the requested fact.
Credential never left the phone.
464 KB fits comfortably on any phone. 92 ms is imperceptible to a human user.
As autonomous AI agents act on behalf of people (booking travel, entering agreements, accessing services), they'll need to prove facts about the humans they represent:
Agent says: "My principal is over 18"
"My principal is a licensed physician"
With Vega:
Decentralized systems need real-world identity signals (KYC, accredited investor status, jurisdiction). Today this requires:
Current: Upload documents → Centralized intermediary → On-chain attestation
(User loses privacy twice: to intermediary AND on-chain)
With ZKP: Prove fact from government credential → On-chain verifier receives only proof
(No intermediary sees credential; re-randomization prevents linkability)
The techniques work for any credential with:
This includes mobile driver's licenses, EU Digital Identity Wallets, and future formats not yet designed.
PROBLEM:
Proving one fact requires sharing everything
SOLUTION: Zero-Knowledge Proofs
Prove a claim without revealing supporting data
VEGA'S INNOVATIONS:
1. Fold-and-reuse → Speed through NeutronNova folding
2. Lookup tables → No parser needed; length-hiding
3. NovaBlindFold → Cheap zero-knowledge
4. Re-randomization → Unlinkable presentations
5. Device binding → Tied to physical hardware
RESULT:
92 ms · 108 KB proof · No trusted setup
Credential never leaves the device
Works with real-world formats (mDL, EUDI)
Ready for AI agent world
The fundamental shift Vega represents:
From a world where proving a fact about yourself requires giving up your identity → to one where cryptography lets you keep it.