Verifier получает ответ «правило выполнено», но не исходный секрет

У обычной проверки есть простой путь: показать входные данные и дать второй стороне повторить вычисление. Zero-knowledge protocol ставит более узкую задачу. Prover убеждает verifier, что знает witness, который удовлетворяет формальному relation, при этом proof не должен раскрыть сам witness сверх того, что уже следует из истинности statement.

Четыре части одного ZK-доказательства
ЧастьЧто этоПример без привязки к продукту
StatementУтверждение, которое нужно проверитьСуществует secret value, чей hash равен публичному H
WitnessСекретные данные proverСамо значение, из которого получается H
Circuit или relationФормальные правила допустимого вычисленияПосчитать hash и сравнить его с H
ProofКриптографический объект для verifierПодтверждение, что witness удовлетворяет relation
Public inputsОткрытые значения, связанные с proofH, версия circuit или state roots
Четыре части одного ZK-доказательства
Часть
Statement
Что это
Утверждение, которое нужно проверить
Пример без привязки к продукту
Существует secret value, чей hash равен публичному H
Часть
Witness
Что это
Секретные данные prover
Пример без привязки к продукту
Само значение, из которого получается H
Часть
Circuit или relation
Что это
Формальные правила допустимого вычисления
Пример без привязки к продукту
Посчитать hash и сравнить его с H
Часть
Proof
Что это
Криптографический объект для verifier
Пример без привязки к продукту
Подтверждение, что witness удовлетворяет relation
Часть
Public inputs
Что это
Открытые значения, связанные с proof
Пример без привязки к продукту
H, версия circuit или state roots

Важная точность: proof не доказывает бытовую фразу сам по себе. Он подтверждает конкретную математическую relation. Если circuit проверяет только возраст не меньше 18 лет, корректный proof не подтверждает имя, гражданство или подлинность исходного документа — если проверка этих фактов не включена в систему отдельно.

У хорошей proof system три разных обещания

Свойства проверяются по разным сценариям

  1. Честный prover с правильным witness проходит проверку

    Если statement истинно и protocol выполнен корректно, verifier должен принять proof.

  2. Ложное statement нельзя убедительно доказать

    Злоумышленник без подходящего witness не должен создавать accepted proof, кроме пренебрежимо малой вероятности в заданной security model.

  3. Proof не раскрывает witness

    Verifier узнаёт допустимый результат проверки, а не secret inputs, использованные prover.

Эти свойства нельзя заменять друг другом. System может хорошо скрывать witness, но проверять неправильный circuit. Корректный validity proof может подтверждать computation без какой-либо цели скрыть все transaction details. А приватное соединение с сервером не становится zero-knowledge proof только потому, что данные зашифрованы при передаче.

Prover использует скрытый witness и circuit, отправляет proof и public inputs verifier, который возвращает принять или отклонить
Verifier проверяет proof против public inputs и правил circuit; secret witness остаётся на стороне prover.Редакционная схема onchain.uz

Главная вычислительная работа обычно достаётся prover

Перед доказательством обычную программу представляют в форме, подходящей выбранной proof system. Prover выполняет computation, собирает witness и создаёт proof. Verifier затем проверяет гораздо более компактный объект. Именно асимметрия между дорогим proving и сравнительно дешёвым verification делает ZK полезным для блокчейна: много вычислений можно выполнить вне L1, а on-chain contract проверит их результат.

Что стоит ресурсов на разных стадиях
СтадияОсновная работаПрактическое ограничение
Circuit designФормализовать допустимые inputs и computationОшибка или неполное правило будут доказуемо исполняться именно так
Witness generationПодготовить private и public inputsДанные должны соответствовать точной версии circuit
ProvingПостроить cryptographic proofВремя, память, hardware и latency могут быть значительными
VerificationПроверить proof и public inputsСтоимость зависит от proof system и verification environment
Data publicationСделать нужные данные доступнымиProof of validity не гарантирует, что state можно восстановить без data
Что стоит ресурсов на разных стадиях
Стадия
Circuit design
Основная работа
Формализовать допустимые inputs и computation
Практическое ограничение
Ошибка или неполное правило будут доказуемо исполняться именно так
Стадия
Witness generation
Основная работа
Подготовить private и public inputs
Практическое ограничение
Данные должны соответствовать точной версии circuit
Стадия
Proving
Основная работа
Построить cryptographic proof
Практическое ограничение
Время, память, hardware и latency могут быть значительными
Стадия
Verification
Основная работа
Проверить proof и public inputs
Практическое ограничение
Стоимость зависит от proof system и verification environment
Стадия
Data publication
Основная работа
Сделать нужные данные доступными
Практическое ограничение
Proof of validity не гарантирует, что state можно восстановить без data

SNARK и STARK — семейства с разными инженерными компромиссами

Сравнение на уровне понятий, а не рейтинг всех реализаций
Свойствоzk-SNARKzk-STARK
НазваниеSuccinct Non-Interactive Argument of KnowledgeScalable Transparent Argument of Knowledge
Размер proofОбычно компактный в распространённых constructionsОбычно крупнее SNARK proof
SetupЧасть schemes использует common reference string или trusted setupTransparent schemes избегают trusted setup через публичную randomness
Криптографическая основаЗависит от конкретной constructionЧасто hash-based design
ВыборОпределяется circuit, verifier cost, prover stack и security assumptionsОпределяется теми же системными ограничениями
Сравнение на уровне понятий, а не рейтинг всех реализаций
Свойство
Название
zk-SNARK
Succinct Non-Interactive Argument of Knowledge
zk-STARK
Scalable Transparent Argument of Knowledge
Свойство
Размер proof
zk-SNARK
Обычно компактный в распространённых constructions
zk-STARK
Обычно крупнее SNARK proof
Свойство
Setup
zk-SNARK
Часть schemes использует common reference string или trusted setup
zk-STARK
Transparent schemes избегают trusted setup через публичную randomness
Свойство
Криптографическая основа
zk-SNARK
Зависит от конкретной construction
zk-STARK
Часто hash-based design
Свойство
Выбор
zk-SNARK
Определяется circuit, verifier cost, prover stack и security assumptions
zk-STARK
Определяется теми же системными ограничениями

Аббревиатура не сообщает всю security model. Современные SNARK constructions могут отличаться setup, recursion и assumptions; слово STARK тоже не описывает конкретную реализацию prover. Сравнивать нужно точную proof system и версию, процедуру parameter generation, реализацию verifier, audit и возможность обновить circuit.

Trusted setup не означает, что один участник постоянно видит secret transactions. Речь идёт о создании public parameters: в некоторых schemes компрометация секретной randomness setup могла бы нарушить soundness. Multi-party ceremony снижает риск при условии, что хотя бы один участник честно уничтожил свою часть entropy. Другие constructions используют transparent setup и принимают иной набор trade-offs.

ZK может защищать witness и всё равно оставлять пользователя узнаваемым

Что может остаться публичным рядом с proof

  • адрес account или contract, который отправил transaction;
  • время, сеть, gas payer и block inclusion;
  • public inputs, включая roots, commitments или nullifiers;
  • размеры и частота операций, если их не скрывает protocol design;
  • deposit и withdrawal paths между прозрачными и защищёнными частями системы;
  • данные, добровольно раскрытые интерфейсу, issuer или prover service.

Zcash показывает применение zk-SNARK в shielded transaction: сеть может проверить соблюдение consensus rules без раскрытия защищённых деталей в обычной форме. Но это свойство всей payment construction, а не любого proof. Если dapp доказывает правильность вычисления публичного swap, сам swap не становится приватным только из-за ZK-verifier.

В ZK-rollup proof подтверждает переход state, а Ethereum хранит точку проверки

Operator собирает batch L2 transactions, применяет их к предыдущему state и получает новый state root. Proving circuit проверяет последовательность переходов: signatures, nonce, balances и другие правила конкретного rollup. Затем L1 verifier contract принимает validity proof вместе с public inputs, среди которых могут быть pre-state root, post-state root и batch commitment.

Proof и data availability отвечают на разные вопросы
ВопросValidity proofДоступные transaction data
Правильно ли вычислен новый root?Подтверждает relation между inputs и результатомПозволяют независимо воспроизвести computation
Можно ли восстановить account state?Одного proof может быть недостаточноНужны данные, определённые protocol
Скрыты ли действия пользователя?Зависит от circuit и public inputsПубликация может оставлять details открытыми или сжатыми
Кто может продолжить chain при отказе operator?Proof подтверждает уже доказанный переходRecovery зависит от доступности data и escape mechanics
Proof и data availability отвечают на разные вопросы
Вопрос
Правильно ли вычислен новый root?
Validity proof
Подтверждает relation между inputs и результатом
Доступные transaction data
Позволяют независимо воспроизвести computation
Вопрос
Можно ли восстановить account state?
Validity proof
Одного proof может быть недостаточно
Доступные transaction data
Нужны данные, определённые protocol
Вопрос
Скрыты ли действия пользователя?
Validity proof
Зависит от circuit и public inputs
Доступные transaction data
Публикация может оставлять details открытыми или сжатыми
Вопрос
Кто может продолжить chain при отказе operator?
Validity proof
Proof подтверждает уже доказанный переход
Доступные transaction data
Recovery зависит от доступности data и escape mechanics

Поэтому validity rollup и validium нельзя объединять словом ZK. Оба могут использовать validity proofs, но отличаются местом data availability. Точно так же быстрый вывод после proof verification не говорит, сколько времени заняли batch formation, proving, submission и L1 inclusion до этой стадии.

У обещания «работает на ZK» должно быть пять конкретных ответов

  • Какое exact statement доказывается и какие проверки входят в circuit?
  • Что является private witness, а что публикуется как public input или calldata?
  • Какая proof system и версия используются, нужен ли setup и кто управлял ceremony?
  • Где работает verifier, кто может обновить его code и есть ли audit этой реализации?
  • Где доступны данные для восстановления state и что происходит при отказе prover или operator?

Ответ «мы не раскрываем алгоритм» противоречит самой идее проверяемой системы, если пользователю невозможно установить relation, verifier и security assumptions. При этом открытый verifier ещё не доказывает правильность данных до circuit: issuer, oracle или identity provider остаются отдельными источниками доверия.

Лучше думать не «ZK скрывает всё», а «какую часть утверждения можно проверить отдельно»

Zero-knowledge proof разделяет знание и проверку: одна сторона использует witness, другая получает математически ограниченный ответ. Эта конструкция полезна для privacy, масштабирования, identity и доказуемых вычислений, но каждый продукт выбирает свой statement и public boundary. Сила ZK начинается с точности этого выбора — и заканчивается там, где circuit больше ничего не проверяет.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. Ethereum.org — zero-knowledge proofs Ethereum Foundation · Проверено 15 августа 2026 г. в 00:34 GMT+5
  2. Ethereum.org — zero-knowledge rollups Ethereum Foundation · Проверено 15 августа 2026 г. в 00:34 GMT+5
  3. Ethereum.org — scaling Ethereum Foundation · Проверено 15 августа 2026 г. в 00:34 GMT+5
  4. Zcash — what are zk-SNARKs Electric Coin Company / Zcash · Проверено 15 августа 2026 г. в 00:34 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.