Блокчейн
KZG Commitments и полиномы
Ethereum обрабатывает транзакции rollup'ов - Arbitrum, Optimism, Base - но хранить все их данные на L1 невыносимо дорого. В марте 2024 один апгрейд (EIP-4844) снизил стоимость в 100 раз. В его основе - математическая конструкция, позволяющая сжать 128 КБ данных в 48-байтный «отпечаток» с возможностью проверки любого фрагмента. Эта конструкция - KZG commitment, и для её безопасности 140,000 человек из 177 стран приняли участие в крупнейшей криптографической церемонии в истории.
- **EIP-4844 (proto-danksharding)** - blob transactions с KZG commitments снизили стоимость L2-транзакций в 10-100 раз с марта 2024
- **Ethereum KZG Ceremony** - 140,000+ участников сгенерировали trusted setup параметры для всей экосистемы, используя лавовые лампы, радиоактивный распад и атмосферный шум
- **Data Availability Sampling** - KZG позволяет валидаторам проверять доступность данных, скачивая лишь несколько случайных точек вместо всего blob'а
Предварительные знания
Polynomial Commitments: отпечаток формулы
В уроке про commitment schemes мы узнали, как зафиксировать **одно значение** - спрятать его, а потом доказать, что не подменил. Но что если нужно зафиксировать **целую функцию** - полином - и потом доказывать значения в отдельных точках, не раскрывая сам полином?
**Polynomial commitment** - это криптографический «отпечаток» полинома. Ты публикуешь commitment `C`, а потом можешь доказать, что `f(z) = y` для любой точки `z`, предоставив короткое доказательство `π`. Верификатор проверяет proof, не зная самого полинома.
Зачем это блокчейну? Полиномы могут **кодировать данные**. Представим 4096 значений данных rollup'а как точки на графике полинома. Вместо хранения всех 4096 значений достаточно хранить один commitment - **48 байт**. А если кто-то сомневается в конкретном значении, ему предъявляется proof - тоже **48 байт**.
**Связь с erasure coding:** полином степени `d` однозначно определяется `d+1` точкой. Если мы знаем значения полинома в достаточном количестве точек, можно **восстановить** все остальные значения. Это основа **data availability sampling** - можно проверить доступность данных, запросив лишь несколько случайных точек.
Rollup публикует polynomial commitment размером 48 байт для 4096 значений данных. Что позволяет сделать evaluation proof?
KZG: commitment на эллиптических кривых
**KZG** (Kate-Zaverucha-Goldberg, 2010) - конкретная схема polynomial commitment, построенная на **эллиптических кривых** и **bilinear pairings**. Это та самая схема, которую выбрал Ethereum для proto-danksharding (EIP-4844).
Ключевая идея: вместо вычисления полинома `f(x)` с числами, мы вычисляем его **на точках эллиптической кривой**. Помним из урока про ECC: операции с точками кривой - «однонаправленные». Зная `f(s)·G` (точку на кривой), невозможно восстановить ни `f(s)`, ни секретное значение `s`.
Почему **bilinear pairing** - ключевой ингредиент? Pairing `e(A, B)` - специальная функция, которая позволяет «умножить» две точки кривой и получить элемент в целевой группе. Это единственный известный способ проверить полиномиальное соотношение «в зашифрованном виде» - не зная ни `s`, ни самого полинома.
**Размеры в Ethereum (BLS12-381):** commitment = **48 байт**, proof = **48 байт**, верификация = **2 pairing operations** (~1 мс). Для сравнения: Merkle proof для тех же данных - ~1 КБ, а FRI proof (в STARKs) - ~50 КБ.
Верификатор KZG proof выполняет проверку через bilinear pairing. Какой ключевой факт он при этом использует?
Trusted Setup: церемония уничтожения секрета
KZG требует секретное значение `s` для генерации публичных параметров `[G, s·G, s²·G, ...]`. Если кто-то знает `s`, он может создать **поддельные proofs** - доказать, что `f(z) = y` для любого `y`, даже если это неправда. Как убедиться, что `s` действительно уничтожен?
Ответ: **MPC ceremony** (Multi-Party Computation). Множество участников по очереди добавляют свою случайность. Итоговый секрет `s` не знает **никто** - он существовал только «внутри» протокола и был уничтожен по частям.
**Ethereum KZG Ceremony** (2023) стала крупнейшей trusted setup ceremony в истории криптографии. Более **140,000 участников** из 177 стран внесли свою случайность. Участвовать мог **любой** - через браузер, CLI или даже специальные hardware-устройства.
Креативные источники случайности
Как участники церемонии Ethereum генерировали свою энтропию
Участники соревновались в креативности генерации случайности: - Движения мыши по хаотической траектории - Показания датчика радиоактивного распада - Запись атмосферного шума с антенны - Данные с лавовых ламп (как Cloudflare) - Хеш случайного блока Bitcoin в момент участия Чем непредсказуемее источник - тем лучше. Даже если 139,999 участников были агентами злоумышленника, достаточно одного честного участника с хорошим источником случайности.
**Toxic waste** - это не метафора. Если кто-то сохранил свой секрет `τᵢ` И все остальные участники тоже скомпрометированы, атакующий может восстановить `s` и создавать невалидные proofs. Название «toxic waste» подчёркивает: эти данные **должны быть уничтожены**, как радиоактивные отходы.
**Альтернативы trusted setup:** STARKs и FRI-based schemes не требуют trusted setup вовсе (transparent setup). Но их proofs значительно больше (~50 КБ vs 48 байт у KZG). Это классический trade-off: простота setup vs размер proof.
В Ethereum KZG Ceremony участвовали более 140,000 человек. Сколько из них должны быть нечестными, чтобы скомпрометировать систему?
Danksharding: KZG масштабирует Ethereum
Зачем Ethereum столько усилий вкладывал в KZG ceremony? Ради **danksharding** - фундаментального апгрейда масштабируемости, названного в честь исследователя Данкрада Файста (Dankrad Feist). KZG commitments - ключевой криптографический примитив этого плана.
**Проблема:** rollup'ы (Arbitrum, Optimism, zkSync) публикуют данные транзакций в Ethereum L1 для доступности. Эти данные записываются в `calldata` - дорогое хранилище, которое остаётся в блокчейне **навсегда**. Rollup'ы тратят ~90% газа на публикацию данных.
**Blob** - это «блоб» (Binary Large Object) размером 128 КБ, содержащий данные rollup'а. Каждый blob интерпретируется как **полином** степени 4095 (4096 коэффициентов), и к нему вычисляется **KZG commitment**. Этот commitment записывается в блок, а сам blob хранится отдельно и **удаляется через ~18 дней** - он не нужен навечно, только для оспаривания fraud proofs.
**Data Availability Sampling (DAS)** - следующий шаг в full danksharding. Вместо того чтобы каждый валидатор скачивал все blob'ы, каждый запрашивает лишь **несколько случайных точек** и проверяет их через KZG proofs. Благодаря свойствам erasure coding полиномов, если 50%+ точек доступны, данные **гарантированно восстановимы**. Это позволяет масштабировать количество blob'ов без увеличения нагрузки на отдельный валидатор.
**Результат EIP-4844:** после активации в марте 2024 стоимость публикации данных для rollup'ов снизилась в **10-100 раз**. Транзакции на L2 (Arbitrum, Optimism, Base) подешевели до долей цента. Full danksharding обещает ещё одно снижение на порядок.
KZG commitment - это просто компактный хеш данных, аналог Merkle Root, но меньше по размеру
KZG commitment принципиально отличается от хеша: он позволяет создавать **evaluation proofs** - доказательства значений полинома в конкретных точках, без раскрытия остальных данных. Merkle proof доказывает включение элемента, а KZG proof доказывает значение функции. Это алгебраическая структура, а не hash-based, и именно поэтому она поддерживает erasure coding и data availability sampling.
Хеш-функция - «чёрный ящик»: вход → выход, никакой алгебры. Polynomial commitment сохраняет алгебраическую структуру полинома: линейность, делимость, интерполяцию. Это позволяет строить proofs, невозможные с обычными хешами - например, доказать, что данные можно восстановить из неполного набора точек.
EIP-4844 ввёл blob transactions. Почему blob'ы хранятся только ~18 дней, а не навсегда, как обычные данные блокчейна?
Ключевые идеи
- **Polynomial commitment** - криптографический «отпечаток» полинома (48 байт), позволяющий доказывать значения в отдельных точках без раскрытия самого полинома. Данные кодируются как точки на графике полинома, что даёт erasure coding «бесплатно»
- **KZG scheme** использует эллиптические кривые и bilinear pairings: `C = f(s)·G`, proof `π = q(s)·G`, верификация через pairing за O(1). Proof - **48 байт** независимо от объёма данных
- **Trusted setup** (Powers of Tau) требует уничтожения секрета `s`. MPC ceremony с 140,000+ участниками гарантирует безопасность при условии «1-of-N honest» - достаточно **одного** честного участника
- **EIP-4844** ввёл blob transactions - помните 128 КБ данных, сжатых в 48-байтный «отпечаток»? Именно KZG позволил rollup'ам хранить данные в отдельных blob'ах (с удалением через 18 дней), снизив стоимость L2-транзакций в 10-100 раз. Full danksharding с Data Availability Sampling - следующий шаг
Связанные темы
KZG commitments связывают криптографию эллиптических кривых с масштабированием блокчейна:
- Эллиптические кривые (ECC) — KZG использует точки кривой BLS12-381 и bilinear pairings для commitment и verification
- Commitment Schemes — KZG - частный случай polynomial commitment scheme с hiding и binding свойствами
- Хеш-структуры: Patricia, Verkle Trees — Verkle Trees заменяют Merkle proofs на polynomial commitments (KZG/IPA) для компактных state proofs
- Data Availability — KZG commitments - основа Data Availability Sampling в full danksharding
Вопросы для размышления
- KZG требует trusted setup, а STARKs - нет (transparent setup). Почему Ethereum всё равно выбрал KZG для EIP-4844, несмотря на необходимость церемонии?
- Если blob'ы удаляются через 18 дней, как новая нода может синхронизировать историческое состояние rollup'а? Кто хранит эти данные после удаления?
- Data Availability Sampling позволяет каждому валидатору проверять лишь несколько случайных точек. Что произойдёт, если злоумышленник спрячет именно те точки, которые никто не запросил?
Связанные уроки
- bc-08-commitment — Commitment schemes - фундамент KZG
- bc-54-zk-intro — KZG - ключевой примитив ZK proof систем
- bc-55-zk-snark — KZG commitments используются в PLONK/SNARK
- bc-57-plonk — PLONK строится поверх KZG polynomial commitments
- calc-16-taylor — Полиномы как функции - алгебраическая аналогия
- aa-03-homomorphisms — Homomorphic binding в KZG через групповые свойства
- crypto-34-zkp-basics