Been exploring some of the lesser-known ZK constructions and decided to share some brief facts, so here we go, a thread about Bulletproofs, Halo2, MPC-in-the-head, and more 🧵👇
🛡🔫 Bulletproofs:
- short NIZK that requires no trusted setup
- build with Pedersen commitments
- support proof aggregation
- prover time: O(N∗log(N)) ~30s
- verifier time: O(N) ~1.1s
- proof size: O(log(N)) ~1.3KB
- assumptions: discrete log
✅Bulletproofs - best fit for:
- range proofs (take only 600 bytes)
- inner product proofs
- intermediary checks in MPC protocols
- aggregated and distributed (with many private inputs) proofs
🚫Poor choice for:
- complex arbitrary statements that are verified on-chain
⚜️ Sigma Protocols (+Fiat-Shamir):
- short proof that needs no trusted setup
- require a constant number (3) of public-key operations
- multiple Sigma proofs can be composed together in configurations like A and\or B, eq(A,B), all(n,A)
- assumption: discrete log, honest verifier
✅Sigma protocols - Best fit for:
- discrete log (dlog) proofs
- one-of-many dlogs
- discrete log equality (dleq)
✅ Halo2 - Best fit for:
- arbitrary verifiable computation
- recursive proof composition*
- circuit-optimized hashing based on lookup-based Sinsemilla function
🚫 Poor choice for:
- costly to verify on Ethereum unless KZG-version is used
- recursive proof composition*
🤔 Halo2 - What’s with recursion?
- recursion isn’t yet supported by the original Halo2 (github.com/zcash/halo2/is…)
- currently, it’s only possible with the KZG-based version using github.com/scroll-tech/ha…
- Orbis Labs are working on their accumulation scheme using Tiny-RAM arch
🐭 Plonky2 - Overview:
- combines FRI with PLONK and needs no trusted setup
- optimized for modern processors with SIMD and 64 byte Goldilocks fields
- prover time: O(log N)
- verifier time: O(log N)
- proof size: O(N*log N)
- assumptions: collision-resistant hash function
👀 Plonky2 - More insights:
- allows to choose: fewer rows => fast prover OR fewer columns and constraints => fast verifier
~38x faster than Halo2, ~64x faster than Groth’16 (
Yesterday I made a thread with a "thousand feet view" on some of the alternative ZK schemes, but have shamelessly withheld the most interesting and underrated one, so here we go \\ thread about "MPC-in-the-head" proofs 🧵👇
\1 A quick background about MPC:
- enables parties to carry out distributed computation on their private inputs
- each party produces a transcript (its view)
- important observation #1: if the final result of MPC is wrong, then there’s an inconsistent views somewhere
\2 Background about Secret Sharing: 🤫
- a common abstraction used in MPC to split some secret among multiple parties, such that all of them need to cooperate for using it
- important observation #2: if only a subset of shares is revealed, then the secret remains unknown