Криптография
ZK-SNARK'и и ZK-STARK'и
Zcash позволяет перевести Bitcoin-эквивалент полностью анонимно - отправитель, получатель и сумма скрыты. Под капотом 192 байта математического доказательства и 2 мс верификации.
- Zcash Sapling: Groth16 делает каждую shielded транзакцию доказательством знания spending key - 192 байта, 2 мс проверки
- zkSync Era и Polygon zkEVM: PLONK-based rollups обрабатывают тысячи Ethereum транзакций с одним доказательством на L1
- StarkNet: Cairo VM + STARKs без trusted setup - L2 с математически верифицируемой правильностью каждого блока
- Ethereum KZG Ceremony 2023: 140,000 участников создали SRS для EIP-4844 blob transactions - data availability для L2
Trusted Setup и структурированная строковая ссылка (SRS)
SNARK (Succinct Non-interactive ARgument of Knowledge) требует предварительной процедуры setup, генерирующей публичные параметры (Common Reference String, CRS). Setup создаёт зашифрованные степени секрета tau: [tau^0]_G, [tau^1]_G, ..., [tau^n]_G. Если tau известен противнику - он может создать фальшивые доказательства. Секрет tau называют 'toxic waste' - он должен быть уничтожен после setup.
Circuit-specific vs universal setup: Groth16 требует отдельный trusted setup для каждой схемы (circuit). PLONK и Marlin используют universal SRS - один setup для любых схем до определённого размера. Transparent setup (без trusted setup): STARKs и Bulletproofs используют только публично верифицируемую случайность (хэши) - не требуют ceremony. Ethereum использует KZG polynomial commitments с Ethereum KZG ceremony 2023: 140,000+ участников - крупнейшая в истории.
Почему 'toxic waste' в trusted setup критичен для безопасности SNARK?
Groth16 - самый компактный SNARK
Groth16 (Jens Groth, 2016) - SNARK с наименьшим размером доказательства: всего 3 группных элемента (192 байта для BN254). Верификация: 3 pairing операции - константное время независимо от сложности схемы. Используется в Zcash Sapling, Filecoin, Celo. Недостаток: circuit-specific setup - каждая новая схема требует новой ceremony.
Circom - язык для написания арифметических схем (circuits). Схема описывает вычисление как систему ограничений над конечным полем. snarkjs - JavaScript библиотека для Groth16 и PLONK. Zcash Sapling shielded transaction: доказательство того что sender знает spending key и сумма входов = сумма выходов (баланс), без раскрытия адресов и сумм. Размер доказательства 192 байта, верификация ~2 мс.
Почему Groth16 предпочтителен для случаев когда одна схема используется миллионы раз (как Zcash транзакции)?
PLONK и universal SNARKs
PLONK (Permutations over Lagrange-bases for Oecumenical Non-interactive arguments of Knowledge, 2019) - universal SNARK: один trusted setup (SRS) работает для любых схем до максимального размера. При изменении схемы достаточно пересчитать verifying key - новая ceremony не нужна. PLONK использует polynomial IOP (Interactive Oracle Proof) + KZG polynomial commitments. Ethereum rollups (zkSync, Polygon zkEVM) используют PLONK-вариации.
KZG (Kate-Zaverucha-Goldberg) polynomial commitments - основа PLONK и Ethereum blob transactions (EIP-4844). Позволяет коммититься к полиному и затем открывать его значение в точке с маленьким proof. KZG proof: 1 групповой элемент (48 байт). Ethereum KZG ceremony 2023: 140,000 участников создали SRS для 4096 значений - используется для blob storage (data availability для L2).
В чём главное преимущество PLONK перед Groth16 для разработчиков приложений?
STARKs и Bulletproofs - без trusted setup
STARKs (Scalable Transparent ARguments of Knowledge, Eli Ben-Sasson 2018) не требуют trusted setup - используют только хэши (публично верифицируемая случайность). Устойчивы к квантовым компьютерам (не используют pairing или ECC). Недостаток: большой размер доказательства (10-100 кБ против 192 байт Groth16). StarkNet и StarkWare используют STARKs. Доказательства ETH2 attestations верифицируются через STARKs.
Cairo VM - язык программирования для STARK-схем StarkWare. Позволяет компилировать произвольные программы в STARKs. StarkNet - Ethereum L2 на STARKs: 100,000+ TPS теоретически. Доказательство пакета из 1000 транзакций Ethereum: ~2 минуты генерации STARK, верификация на Ethereum L1 - ~10 мс (один STARK верификатор контракт). Recursive STARKs: доказательство о правильности другого доказательства - масштабирование без линейного роста размера.
Почему STARKs привлекательны для долгосрочных систем несмотря на больший размер доказательства?
Пространство ZK доказательств
- Groth16: наименьший proof (192 байта), быстрая верификация, но circuit-specific setup - идеален для фиксированных схем с миллионами использований
- PLONK: universal setup, developer-friendly, proof ~500 байт - Ethereum L2 экосистема
- STARKs: без trusted setup, post-quantum, proof 10-100 кБ - долгосрочная безопасность, StarkNet
- Bulletproofs: без trusted setup, range proofs в Monero - компактные доказательства для конкретных задач
Связанные темы
ZK-SNARK'и объединяют продвинутую математику: билинейные спаривания, полиномиальные обязательства и интерактивные доказательства
- ZKP основы — Schnorr protocol и Fiat-Shamir - теоретическая основа всех SNARK/STARK систем
- Продвинутая ECC — Билинейные спаривания из BLS-темы используются в Groth16 и PLONK верификации
- Блокчейн криптография — ZK rollups используют SNARKs/STARKs для масштабирования Ethereum
Вопросы для размышления
- Если STARKs не требуют trusted setup и устойчивы к квантовым компьютерам, почему Groth16 всё ещё широко используется в продакшне (Zcash, Filecoin) вместо полного перехода на STARKs?