SNARK vs STARK — 全面对比
SNARK / STARK 全维度对比(setup, size, time, assumption, post-quantum, ecosystem)
日期: 2026-12-06 方向: 零知识证明 / ZK理论 阶段: Phase 4 - ZK基础理论 (Day 209-222) 标签: #ZK #SNARK #STARK #对比
今日目标
| 类型 | 内容 |
|---|---|
| 学习 | SNARK / STARK 全维度对比(setup, size, time, assumption, post-quantum, ecosystem) |
| 实操 | 写综合对比报告 |
| 产出 | snark_stark.md — 决策矩阵、量化数据、应用建议 |
一、TL;DR 决策表
| 选 SNARK 当... | 选 STARK 当... |
|---|---|
| 链上 verify gas 关键 | 大 trace(如 zkVM 整 block) |
| Proof 越小越好(移动/L1) | 后量子是必须 |
| 客户端 verify 算力小 | 不想做 trusted setup ceremony |
| 已有 EVM precompile (BN254) | recursion 是核心需求 |
| 小电路(特定隐私协议) | 不想锁定到 ECC 假设 |
二、量化对比表
设电路约束数 $N = 10^6$(约 SHA256 × 1000 次)。
| 维度 | Groth16 | PlonK | Halo2 | STARK | Bulletproofs |
|---|---|---|---|---|---|
| Setup | per-circuit MPC | universal MPC | none | none | none |
| SRS size | $O(N)$ | $O(N)$ univ | none | none | none |
| Proof size | 192 B | ~400 B | 3-10 KB | 50-200 KB | $O(\log N)$ ~1 KB |
| Prover time | ~10 s | ~12 s | ~15 s | ~5 s (small field) | ~20 s |
| Verifier time | ~3 ms (3 pairings) | ~10 ms | 50-200 ms | 5-50 ms | $O(N)$ ~1 s |
| On-chain gas (EVM) | ~200K | ~300K | ~600K | ~400K (StarkNet on L1) | $O(N)$ 不实用 |
| Crypto assumption | KEA + GGM | KEA + KZG | DL only (IPA) | hash CR only | DL only |
| Post-quantum | ❌ | ❌ | ❌ | ✅ | ❌ |
| Recursion | 难 | 中 | 好 | 好 | 难 |
| Field | BN254/BLS12 | BN254/BLS12 | Pasta/BN254 | Goldilocks/M31 | secp/BN254 |
注:Prover time 因实现差异大;以上是 reasonable production 数字。Risc Zero (STARK) 在并发硬件下可比 SNARK 快 10x。
三、Setup 详细对比
3.1 Groth16 — Per-circuit Trusted Setup
Phase 1 (universal): Powers of Tau MPC
Powers of Tau ceremony 输出 {[τ^i]_1, [τ^i]_2}_{i=0..N}
Phase 2 (per circuit):
每电路一次 MPC: 加 α, β, γ, δ + 电路 selector commitments
每改电路重做 Phase 2 MPC(耗时数周协调)。
3.2 PlonK — Universal Setup
Phase 1: Powers of Tau (与 Groth16 共享)
Phase 2 per circuit: 仅本地计算 selector commitments (无 MPC)
新电路只需本地编译,无须新 ceremony。
3.3 Halo2 / STARK — Transparent
无任何 ceremony;setup = 选 hash function(Poseidon)+ FFT domain 参数。完全公开可验证。
四、Proof Size 详细对比
| 系统 | Proof 内容 | Size 估算 |
|---|---|---|
| Groth16 | $A \in G_1, B \in G_2, C \in G_1$ | 48 + 96 + 48 = 192 B |
| PlonK | 9 G1 commits + ~7 field evals | $9 \cdot 48 + 7 \cdot 32 \approx$ 656 B |
| Halo2 | many commits + IPA (log n) | $\sim 4-10 \text{ KB}$ |
| STARK | Merkle commits + FRI queries | $\lambda \log^2 n \cdot 32$ B ≈ 50-200 KB |
| Bulletproofs | $2 \log n$ G1 + 5 field | $\sim 1 \text{ KB}$ |
| Nova (folded) | accumulator (Pedersen) | $\sim 10 \text{ KB}$ + 后续 SNARK |
五、Prover / Verifier 时间
5.1 Prover
Groth16 / PlonK (BLS12-381):
- FFT: O(N log N), N = 1M → ~5 s
- MSM (multi-scalar mul): O(N), N = 1M → ~5 s
- 总: ~10-15 s
STARK (Goldilocks 64-bit):
- FFT 在 64-bit field 比 256-bit 快 ~16x → ~1 s
- Merkle tree: O(N) hash → ~3 s (Poseidon 较慢; Blake3 ~0.3s)
- 总: ~5 s
Risc Zero (RISC-V trace):
- 高度并发 GPU 加速 → 可比 SNARK 快 5-10x for same N
5.2 Verifier
| 系统 | 工作 | 时间 |
|---|---|---|
| Groth16 | 3 pairings | ~3 ms |
| PlonK | ~6 pairings + few muls | ~10 ms |
| Halo2 | IPA verify O(N) (single proof) | ~100-200 ms |
| Halo2 + accumulation | folded $O(\log N)$ | ~10-30 ms |
| STARK | Merkle verify + FRI fold check | ~5-50 ms |
| Bulletproofs | $O(N)$ scalar ops | $\sim 1$ s |
六、链上 Gas 实测(EVM, BN254/BLS12 precompile)
| 系统 | On-chain Verify Gas | 备注 |
|---|---|---|
| Groth16 | ~200K | 3 pairings precompile (BN254 alt_bn128) |
| PlonK | ~300K | 多 pairings + opening |
| Halo2 (BN254 fork) | ~600K-1M | IPA → no precompile, MSM 慢 |
| STARK on L1 | ~400K | Merkle path verify + FRI checks |
| Recursive SNARK (final) | ~200K | 嵌套 → 内层多, 外层 Groth16 |
重要:StarkNet 的 STARK 在 L1 上由 SHARP prover 聚合多个 STARK proof,最终用 STARK verifier contract(自定义 EVM 合约 ~5M gas/proof)验证。
七、加密假设详解
7.1 SNARK 系列假设
- DL (Discrete Log):基础
- q-SDH / q-PKE:KZG, Groth16 用
- KEA / Knowledge of Exponent:保证 prover "真知道" witness
- GGM (Generic Group Model):理想化群(用于 Groth16 proof)
- ROM:Fiat-Shamir 部分
→ 量子破(Shor 解 DL)
7.2 STARK 假设
- CR-Hash (Collision Resistance):Merkle 安全
- ROM:FS challenge
→ 量子安全 (Grover only $\sqrt{N}$ speedup on hash, 200-bit hash → 100-bit post-Q)
八、Recursion 难度
8.1 SNARK Recursion
需要在曲线 $E$ 的 scalar field 内验证 $E$ 上的 EC ops → non-native arithmetic(用 base field 模拟),开销 ~50x。
PlonK + cycle of curves(如 BN254/Grumpkin 半 cycle,或 Pasta full cycle)部分缓解。
8.2 Halo2 / STARK Recursion
Halo2: cycle of curves + IPA accumulation → 天然支持。 STARK: 验证电路全是 hash + small field arith → 极其友好。
实践中:
- Mina = 全 recursion SNARK(Pickles + Pasta cycle)
- Nova = SNARK 的轻量 folding(每步 amortized O(N),最后用 Spartan/Groth16 finalize)
- StarkNet = SHARP recursive aggregator
- Risc Zero = STARK fold via small field
九、生态与工具
| 系统 | 主要工具链 | DSL |
|---|---|---|
| Groth16 | snarkjs, libsnark, arkworks-rs | Circom |
| PlonK | barretenberg (Aztec), ezkl | Noir, Cairo |
| Halo2 | halo2 (ECC), boojum (Matter Labs) | Halo2-DSL, Rust |
| STARK | winterfell, stwo, stark101 | Cairo (StarkNet), AirAssembly |
| Risc Zero | risc0 | Rust (compiles to RISC-V) |
| Plonky2 | plonky2 | (Rust direct) |
| Nova | nova-rs, supernova | Rust |
十、用例对应
| 用例 | 推荐 |
|---|---|
| 隐私支付 (Tornado Cash) | Groth16(小 proof, 200K gas, 单电路) |
| L2 zk-rollup (zkSync, Scroll) | Halo2 / PlonK + 终态 Groth16 |
| STARK rollup (StarkNet) | STARK + on-chain STARK verifier |
| zkVM (RISC-V execution) | Risc Zero (STARK), SP1 |
| anonymous credential (Sui zkLogin) | Groth16 (Sui 用 BN254) |
| succinct light client | Halo2 / Plonky2 |
| post-quantum critical | STARK |
| client-side proving (mobile) | small field STARK / Halo2 |
十一、协议关系图(决策树)
需要 ZK proof
│
┌────────┴─────────┐
setup OK? 透明 only?
│ │
┌────────┼────────┐ ┌────┴─────┐
│ │ │ │ │
per-circuit univ. no no setup, post-Q
│ │ │ pairing OK? 必须
Groth16 PlonK Halo2/STARK │ │
Halo2 STARK
│ │ │
Tornado Aztec zkSync /
Filecoin Polygon Scroll
Zcash zkEVM
十二、Hybrid 方案
实际生产系统经常混合:
12.1 STARK + Groth16
StarkNet on L1: trace 用 STARK 证(prover 快),最终用 Groth16 包装(小 proof, 链上 gas 低)。
12.2 Plonky2 = STARK + PlonK
Polygon Zero 的 Plonky2: 内层 STARK(小 field 快 prover),外层 PlonK(small proof)。
12.3 Linea (Consensys)
L2 用 PlonK 风格 + 部分 STARK ideas。最终在 L1 用 BN254 verify。
12.4 Risc Zero
inner STARK + outer Groth16("compress proof")。
十三、决策矩阵
| 优先级 | Groth16 | PlonK | Halo2 | STARK |
|---|---|---|---|---|
| Smallest proof | ★★★ | ★★ | ★ | ☆ |
| Fastest verify | ★★★ | ★★ | ★ | ★★ |
| No setup | ☆ | ★ | ★★★ | ★★★ |
| Post-quantum | ☆ | ☆ | ☆ | ★★★ |
| Recursion ease | ☆ | ★ | ★★★ | ★★★ |
| Custom gates | ☆ | ★★★ | ★★★ | ★★ |
| Lookup support | ☆ | ★★ | ★★★ | ★★ |
| Mature tooling | ★★★ | ★★★ | ★★ | ★★ |
| EVM-native verify | ★★★ | ★★ | ★ | ★ (custom) |
十四、面试题
Q1: 为什么 Tornado Cash 选 Groth16 而不是 STARK?
A1: (1) Proof 必须 ≤ 1 KB(用户 tx 数据成本);STARK 50 KB 不可行;(2) 链上 verify gas 优先(200K vs 5M);(3) 单一固定电路(混币逻辑),per-circuit MPC 接受;(4) 量子威胁不紧迫(短期 mixer)。STARK 适合 zkVM 而非小固定电路。
Q2: 为什么 StarkNet 选 STARK 而非 PlonK?
A2: (1) Cairo VM 是通用计算 trace,AIR 比 R1CS 高效得多(重复 step 共享 transition constraint);(2) 后量子作为长期承诺;(3) 无 trusted setup → 链治理简化;(4) StarkWare 团队(Eli Ben-Sasson 是 STARK paper 作者)专长于 STARK。代价:on-chain verifier ~5M gas,由 SHARP 摊销到多 batch。
Q3: 比较 Halo2 和 PlonK 在 zkSync 选型中的考虑?
A3: zkSync 选 Halo2(boojum):(1) 无 trusted setup → 升级电路无 ceremony;(2) recursion 天然好(cycle of curves)→ 多 block 聚合;(3) IPA 替代 KZG,long-term 不依赖 KZG SRS。代价:proof 略大、链上 gas 高 ~3x。链上最终可用 Groth16 wrapper 减 gas。
Q4: 后量子时代,现有 SNARK 系统怎么办?
A4: (1) 短期:迁移到 STARK / lattice-based SNARK (e.g., LatticeFold);(2) 中期:研究 hash-only SNARK(如 Brakedown / Ligero);(3) 长期:FRI + Fast small fields(Goldilocks, BabyBear, M31)的 STARK 是稳妥选择。EC SNARK 在量子计算成熟前都不安全。
Q5: Recursion 在哪些场景必需?
A5: (1) zk-rollup 多 block 聚合:每 block 一个 proof, 终态聚合成单 proof 链上提交;(2) incremental verifiable computation (IVC):长 trace 分步证(Nova 的核心);(3) proof composition (PCD):多 prover 协作生成最终 proof;(4) 逐步 zkVM:每条 instruction 一个 proof,fold。Halo2/STARK/Nova 都为此优化。
十五、明日预告
Day 220 — Polynomial IOP(PIOP)抽象:理解 SNARK/STARK 共同的"理论核心",深入 Sumcheck protocol。