Как работают ZK-proofs и zkEVM?
Данная статья является сборником с википедии, ютуба, статей от Jarrod Watts.,форквлога, прочтением научных робот от HAL open sience и др.
Пост сделан в образовательных целях для СНГ сибил атакеров, чтобы они хоть немного понимали принцип работы сетей в которых они пытаются получить токен.
1. Вступление
1.2 Что такое Zero-knowledge?
3. Что составляет доказательство ZK?
4. Интерактивные доказательства ZK
5.Неинтерактивные ZK-доказательства
5.1 Что такое ZKP?
6.1 Что такое CRS и как он работает?
Вступление
Как бы ни была прекрасна идея публичного блокчейна без права доступа, без обеспечения конфиденциальности данных будущее, насыщенное Web 3.0, может выглядеть как антиутопия, в которой каждая транзакция оставляет чёткий след, позволяющий общественности узнать о вас всё.
Общедоступные записи транзакций хороши в качестве верифицируемых доказательств деятельности, но любой человек может покопаться в них, связать платёж с платежом, привязать вашу реальную личность к ончейн-следам и использовать их против вас.
Аналогичным образом, отсутствие масштабируемости может серьёзно затормозить перспективы принятия блокчейна.
Проблема масштабируемости лежит в основе большинства инноваций блокчейна, которые наблюдали в последние пару лет. Без ущерба для децентрализации текущее состояние технологии блокчейн просто не может поддерживать приложения, которые достигнут массового принятия.
Что такое Zero-knowledge?
Zero-knowledge (ZK) - доказательства с нулевым знанием, лежат в основе самых последних инноваций в web3. Они уже используются в таких продуктах, как zkEVM, ZkSync, Scroll и др, для обеспечения верифицируемой масштабируемости Ethereum и Polygon ID для подтверждения вашей личности без раскрытия персональных данных.
Кратко: ZK-доказательства позволяют доказать что-то, не без раскрытия самой вещи. Это имеет несколько реальных применений, например, проверка возраста без предоставления полной информации о правах/паспорте.
Как работает ZK Proof?
Чтобы доказать истинность утверждения, не раскрывая самого утверждения, необходимо участие двух сторон:
- Доказатель(Prover): человек, пытающийся что-то доказать
- Верификатор(Verifier): лицо, пытающееся подтвердить, что утверждение является "реальным".
Иногда в процессе участвует третья сторона - эмитент, который выдает проверяющему сертификат (например, лицензию), которому проверяющий доверяет как источнику информации.
Рассмотрим пример... Я хочу купить пиво и доказать продавцу, что мне больше 18 лет, не показывая при этом информацию в паспорте. В данной ситуации существуют:
- Доказатель(the Holder): Я, человек, пытающийся доказать, что я совершеннолетний.
- Верификатор(the Verifier): Продавец, пытающийся проверить, достиг ли я совершеннолетия.
- Эмитент(the Issuer): государство, которое выдает мне паспорт; документ, которому продавщица доверяет и что может подтвердить мой возраст.
Как правило, для подтверждения того, что мне уже исполнилось 18 лет, необходимо показать всего первую страничку паспорта (чего я делать не хочу).
Применим это к Спанч Бобу. Спанч Боб хочет доказать, что его на самом деле зовут Спанч Боб, но для этого ему нужно предоставить свою полную лицензию проверяющему.
Его лицензия содержит конфиденциальную информацию, такую как его дата рождения, адрес, пол и многое другое; все это не обязательно для подтверждения его имени; но, увы, другого выхода у него нет.
Было бы намного лучше, если бы Спанч Боб смог доказать свое имя, или если бы я мог каким-то образом доказать, что мне больше 18 лет, без необходимости передавать так много конфиденциальной информации.
Это яркий пример того, как доказательства ZK представляют реальную ценность для мира. С доказательствами ZK я теперь могу доказать часть своей личности верификатору, не предоставляя никаких аспектов моей личности или каких-либо подтверждающих документов, подтверждающих этот факт.
Таким образом, я никогда не передаю конфиденциальную личную информацию третьей стороне для хранения в базе данных; уязвимых для атак и утечек; то, чем мы в настоящее время рискуем почти каждый раз, когда регистрируемся на веб-сайте.
Все это звучит великолепно. Но как доказать что-то, не раскрывая ничего об этом? Для этого мы можем углубиться в то, что такое доказательства ZK.
Что составляет доказательство ZK?
Итак, мы хотим что-то доказать, не раскрывая, откуда мы это знаем или что это за вещь вообще. Как это возможно?
Прежде чем мы сможем ответить на этот вопрос, доказательства ZK можно разделить на две большие категории:
Те, которые нас интересуют в web3, являются неинтерактивными, но давайте кратко остановимся на том, что такое "интерактивность" в контексте ZK.
- Свидетель(the witness) - в фунцкии Zk-rollup относится к криптографическому доказательству, которое позволяет убедиться в правильности выполнения операций во вторичной цепи (rollup chain) без раскрытия конкретных данных.
- Проверяющий(the prover) - это сторона, которая имеет определенную информацию и хочет убедить другую сторону в верности какого-либо утверждения, связанного с этой информацией. Процесс доказательства требует от доказателя создания специального доказательства, которое может быть проверено другой стороной без раскрытия самой информации.
- Проверяющий (the verifier ) - это сторона, которая принимает доказательство от доказателя и проверяет его на корректность. Проверяющий не должен знать исходных данных или информации, но он может быть уверен в том, что утверждение верно на основе проверенного доказательства.
Интерактивные доказательства ZK
Для наглядности стоит использовать пример с Шерлоком (справа) и Ватсоном (слева).
У Шерлока есть две сферы, которые являются одинаковыми по форме и цвету. С правой стороны у Шерлока синяя и красная сферы, с левой стороны находится Ватсон, который не различает цвета поскольку является дальтоником.
При этом Шерлок может доказать Ватсону что Ватсон может их различать с помощью ZK-доказательств при этом не раскрывая ему информацию о цвете сфер.
Для примера возьмем следующее действие.
Ватсон берёт сферы у Шерлока и перекладывает их себе за спину в таком же порядке, после чего выбирает одно из следующих действий:
1) Оставить их на том же месте (у себя за спиной, при этом для него сферы по прежнему остаются бесцветными)
2) Или же поменять их местами друг с другом любое количество раз
На что Шерлок после любой из двух манипуляций со сферами (действие или бездействие) должен дать ответ Ватсону, поменял ли Ватсон сферы местами или нет.
Шерлок отвечает что Ватсон "поменял" или "не поменял" цвета сфер и это будет являться правильным ответом в зависимости от действий Ватсона, но при этом Шерлок по прежнему не раскрыл Ватсону цвета данных сфер.
Конечно Ватсону может повезти, поэтому действие с перемешиванием сфер или бездействием повторяется много раз и ни один ответ Шерлока из N количества повторений цикла не раскрывает информацию о сферах. То есть это означает что Шерлок может различать цвета с высокой точностью и ни один из ответов Шерлока не раскрывает цвет сфер для Ватсона.
Правильно ли видит цвета Шерлок?
ZK-доказательства это весомый атрибут в проведении транзакции и необходимо быть аккуратным и точным чтобы убедить третью сторону в том что Шерлок может видеть цвета.
Соответствует ли протокол использующий технологию ZK требованию точности и достоверности ответов Шерлока?
Допустим что Ватсон записывает все свои действия, а так же ответы Шерлока на камеру
Видеозапись не способна убедить нас в том что Шерлок может различать цвета или делает это правильно.
Шерлок и Ватсон могли заранее договориться до записи видео в каком порядке менять сферы после того как они решили доказать нам достоверность слов Шерлока о цвете сфер.
Мы никогда не сможем сказать была ли это подлинная запись о том что Шерлок может различать цвета или же они заранее договорились о подделке.
Хотя этот процесс работает, он требует много раундов связи между проверяющим и проверяемым, что неэффективно и не очень хорошо работает в контексте блокчейн.
Интерактивные доказательства имеют и еще одно существенное ограничение: даже после того как верификатор удовлетворен, доказательство будет недоступно для независимой проверки, то есть доверять ему может только тот, кто его проверил, а не кто-либо другой.
По этим причинам были созданы неинтерактивные ZK-доказательства.
Более детально можно ознакомиться посмотрев видео от кофаундера зксинка.
Неинтерактивные ZK-доказательства
Неинтерактивные ZK-доказательства требуют только одного раунда передачи данных от проверяющего(verifier) к проверяемому(prover). Доказатель использует алгоритм для вычисления ZK-доказательства и отправляет его верификатору, который также использует другой алгоритм для его проверки.
Ещё одним преимуществом неинтерактивных ZK-доказательств является то, что они доступны для проверки всем желающим, то есть они не просто доказаны с точки зрения проверяющего, а доступны для проверки всеми желающими, что подходит для блокчейна.
Что это за "алгоритмы", которые способны доказывать информацию и проверять доказательства?
Ответ: зависит от ситуации. Их достаточно много, но в контексте блокчейна обычно используются две системы ZKP:
Что такое ZKP?
ZKP (расшифровывается как zero-knowledge proof) позволяет одной стороне проверить утверждение о том, что транзакция действительна или верна, без необходимости нести дополнительную информацию о транзакции.
Благодаря им криптография нашла способ доказать подлинность транзакции без раскрытия конфиденциальной информации. Технологии ZKP могли не только обеспечить действительно приватные транзакции, но и помочь таким сетям, как Ethereum, масштабироваться.
Что такое ZK-SNARK?
ZK-SNARK значит Zero-Knowledge Succinct Non-Interactive Argument of Knowledge и обозначает краткий неинтерактивный аргумент знания с нулевым разглашением. Доказательство Zk-SNARK уже используются в Zcash, платежной системе JP Morgan Chase, основанной на блокчейн, и в качестве способа безопасной аутентификации клиентов на серверах.
- ZK: Эта пара (букв) расшифровывается как «нулевое знание», означая, что zk-SNARK не предоставляет никакой дополнительной информации, кроме достоверности утверждений отправителя. Любая информация, описывающая характер транзакции (транзакций), её участников и обмениваемую ценность, скрыта от верификатора.
- Лаконичность: они небольшие по размеру и быстро проверяются верификатором. Все, от генерации доказательства до представления и проверки, происходит в рамках одной транзакции.
- Неинтерактивность: об этом мы говорили ранее. Требуется только один раунд обмена данными между проверяющим и верификатором.
- Аргумент(Аргумент знания): Теоретически, крайне маловероятно "обмануть" систему.
- Знания: Его нельзя построить без доступа к секретной информации (свидетелю).
В них используется криптографический примитив, называемый эллиптической кривой (elliptic curve pairing) как метод создания и проверки этих доказательств.
Важно отметить, что на этапе начальной настройки ZK-SNARK, проверяющий и верификатор должны договориться об использовании "общего ключа", известного как Common Reference String (CRS). Любой человек, имеющий доступ к этому общему ключу, может проверить доказательства.
Именно этот общий ключ и делает возможным использование ZK-SNARK, хотя это, пожалуй, самый большой их недостаток, поскольку он создает так называемое "надёжное окружение" (trusted environment) .
Значения, используемые для создания CRS, которые иногда называют "токсичными отходами", должны быть уничтожены после создания общего ключа.
В противном случае вся система подвергается риску, поскольку недобросовестные проверяющие смогут вычислить ложные доказательства. Следовательно, пользователи должны верить, что исходные значения уничтожены.
Следует также отметить, что ZK SNARK не являются "квантоустойчивыми"
Это означает, что в будущем они будут уязвимы для атак квантовых компьютеров, хотя в перспективе их можно будет модернизировать, сделав квантово-устойчивыми.
Что такое CRS и как он работает?
- Создание CRS: Сначала система создает Common Reference String, который содержит математические параметры. Эти параметры будут использованы для создания нулевых доказательств(ZKP) в будущем.
- Создание роллапов: Участники начинают совершать маленькие транзакции между собой. Вместо того чтобы каждая транзакция записывалась на основной блокчейн, они собирают много транзакций вместе в пакеты, называемые роллапами. То есть сами ролапы в экосистеме ZK выступают как контейнеры для переноски транзакий.
- Создание нулевых доказательств: Перед тем как отправить роллап на основной блокчейн, участники создают нулевые доказательства, используя параметры из CRS. Эти доказательства подтверждают, что все транзакции в роллапе верны и соблюдают правила, но не раскрывают детали самих транзакций.
- Проверка на основном блокчейне: Роллапы, вместе с нулевыми доказательствами, отправляются на основной блокчейн для проверки. Другие участники блокчейна могут использовать параметры из общего CRS, чтобы быстро и легко проверить доказательства и убедиться, что роллапы корректны.
- Масштабируемость и конфиденциальность: Таким образом, благодаря использованию CRS и нулевых доказательств, система может обрабатывать много транзакций эффективно и безопасно. При этом конфиденциальность транзакций сохраняется, так как роллапы не раскрывают детали сделанных операций.
Что такое ZK-STARK?
Первые работы с подробным описанием STARK были опубликованы в 2018 году Эли Бен-Сассоном, Иддо Бентовым, Йиноном Хореши и Михаилом Рябцевым. Будучи еще одним типом неинтерактивного доказательства с нулевым знанием, zk-STARK менее популярны, чем их аналоги zkSNARK, в основном потому, что это более новая модель.
ZK-STARK означает Zero-Knowledge Scalable Transparent Argument of Knowledge, представляет собой "краткий прозрачный аргумент знания, с нулевым разглашением".
ZK-SNARK добились значительных успехов, в становлении и адаптации, ZK-STARK теперь рекламируются как новая и улучшенная версия протокола, устраняющая многие из предыдущих недостатков ZK-SNARK.
- ZK: Как и в случае с «ZK-SNARKs», это также означает «zero-knowledge», подразумевая, что они доказывают транзакции или взаимодействия без раскрытия какой-либо базовой информации, за исключением того, что они являются правильными и подлинными.
- Scalable(масштабируемость): эти ZKP направлены на повышение масштабируемости блокчейна. ZK-STARKs позволяют разработчикам выполнять вычисления и хранить данные вне цепи, увеличивая масштабируемость экспоненциально(1). Доказательства с нулевым знанием подтверждают эти действия оффчейн, которые затем представляются в режиме онлайн для проверки заинтересованными сторонами.
- Transparent(прозрачность): и это качество является одним из наиболее существенных отличий между zk-STARK и zk-SNARK. Они используют общедоступную случайность для генерации параметров, устраняя необходимость в доверенной установке.
- Аргумент «Аргумент знания»: подразумевает то же самое, что и в zk-SNARKs, но использует другой подход к вычислениям. Они используют хэш-функции, устойчивые к коллизиям(2), что фактически устраняет необходимость в доверенных установках.
1)Экспоненциальность - это если каждый день вы добавляете в два раза больше книг, чем в предыдущий день (вы покупаете 1 книгу, завтра две, послезавтра 4 и так далее) то количество книг будет увеличиваться экспоненциально.
2)Коллизия - это ситуация, когда две разные вещи случайно оказываются одинаковыми или имеют одинаковые характеристики.
Допустим, у вас и у вашего друга есть разные ключи от замков, но по какой-то случайности эти ключи такие же или таким образом работают, что они могут открыть оба замка. Это была бы коллизия ключей.
Технология zkSTARK является более новой, чем zk-SNARKs, и пионером в её разработке была компания Starkware с решениями rollup. Используя zk-STARKs, можно вычислить несколько тысяч транзакций в партиях вне цепи и представить единственное доказательство zkSTARK для подтверждения достоверности транзакций в цепи.
Различия между Stark и Snark
ZK-STARKS являются более новыми, чем ZK-SNARK, и Виталик называет их "более новым, более блестящим кузеном"! Итак, вкратце:
Прозрачность
ZK-SNARK нуждаются в начальной доверенной фазе настройки для генерирования случайности, необходимой для создания доказательств с нулевым знанием. Эти параметры обычно хранятся в руках небольшой группы для их защиты. Если параметры попадут в чужие руки, недобросовестные участники могут использовать их для создания ложных доказательств.
ZK-STARK используют другой подход, применяя устойчивую к столкновениям криптографию, чтобы устранить необходимость в частных церемониях генерации параметров. Без доверенных установок параметры генерации случайности являются общедоступными, что ограничивает централизацию и повышает прозрачность.
Безопасность
ZK-SNARK используют начальную настройку для генерации параметров и, в соответствии со своей настройкой, являются вычислительно надёжными. Однако их вычислительная надёжность предполагает, что проверяющие имеют ограниченную вычислительную мощность.
Однако, когда проверяющий использует неограниченное количество вычислительной мощности, он с-может, например, воспользоваться определённым алгоритмом, который может выполнять чрезвычайно быстрые параллельные вычисления целочисленной факторизации, которые могут быть использованы для извлечения закрытого ключа из открытого ключа. Другими словами, они смогут взламывать системы доказательств. Таким образом, ZK-SNARK теоретически уязвимы для атак квантовых вычислений, поэтому не являются квантово-устойчивыми.
ZK-STARK не нуждаются в начальной доверенной установке, выбирая вместо этого устойчивый к столкновениям подход. Таким образом, они не требуют больших вычислительных затрат, как zk-SNARK, устраняя угрозу быть скомпрометированными неограниченной вычислительной мощностью квантовых вычислений. Поэтому они находятся выше по шкале квантовой устойчивости.
Масштабируемость
ZK-SNARK имеют меньший размер по сравнению с ZK-STARK, но их вычислительные потребности заставляют их медленнее генерировать доказательства по сравнению с другим вариантом. ZK-SNARK потребляют меньше газа, чем ZK-STARK, и проверяют доказательства быстрее из-за разницы в размере.
Хотя может показаться, что ZK-SNARK более масштабируемы из-за более быстрой проверки доказательств, ZK-STARK быстрее генерируют доказательства и быстрее масштабируются, потребляя меньше газа благодаря использованию вычислений и хранения — оффчейн. Однако в периоды низкой пропускной способности (создаётся мало доказательств) проверка доказательств занимает гораздо больше времени.
Структура
ZK-SNARKs построены на эллиптических кривых, которые повышают безопасность и конфиденциальность, исходя из предположения, что найти логарифм случайного элемента эллиптической кривой относительно публичной базовой точки невозможно.
zk-STARKs, с другой стороны, использует иную криптографию — устойчивые к коллизиям хэш-функции — для обеспечения масштабируемости и безопасности.
zk-SNARKs
zk-SNARKs являются более популярными из двух основных неинтерактивных доказательств нулевого знания. Несколько проектов в крипто-пространстве сегодня используют их для повышения масштабируемости и конфиденциальности.
zk-SNARKs быстро генерируют и проверяют ZKp, и протоколы, повышающие конфиденциальность, широко их используют. С помощью zk-SNARK блокчейн с поддержкой конфиденциальности может скрывать транзакции от посторонних глаз, позволяя пользователям предоставлять доказательства нулевого знания вместо обычных записей о транзакциях.
Некоторые протоколы конфиденциальности, такие как протокол Panther, имеют встроенные механизмы выборочного раскрытия информации, которые позволяют пользователям делиться информацией, защищенной блокчейном, с доверенными третьими лицами.
zk-SNARKs также могут быть адаптированы для проверки личности, позволяя пользователям проходить требования KYC и AML, не подвергая риску свою конфиденциальную информацию.
Используя zk-SNARKs, эти протоколы могут позволить пользователям предоставлять вместо документов подтверждение своей личности с нулевым уровнем знаний, подтверждая, что у них есть необходимые данные для проверки, не раскрывая никакой дополнительной информации.
zk-SNARKs также были приняты для обеспечения конфиденциальности в децентрализованных финансах, играх, ZK-роллапах и владении активами.
zk-STARKs
Известно, что zk-STARKs лучше масштабируются, чем zk-SNARKs. Поэтому они были приняты решениями для масштабирования блокчейна, такими как ZK-rollups и Layer-2 blockchain. С их помощью эти протоколы вычисляют транзакции и хранят данные вне сети, а затем представляют доказательства нулевого знания на сети для обновления состояния сети.
Как работает zkEVM?
Теперь, когда рассмотрели о том, как работают доказательства с нулевым знанием и о двух распространенных формах ZKP, встречающихся в мире web3, давайте рассмотрим одну из недавних инноваций, основанных на ZKP, - виртуальную машину zkEVM (zero-knowledge Ethereum Virtual Machine).
zkEVM бывают разных видов, о чем Виталик рассказал в своем блоге в статье "The different types of ZK-EVMs". В данной статье я буду рассматривать именно ZK-EVM Polygon.
Цель создания zkEVM - улучшить масштабируемость блокчейна Ethereum, оставаясь при этом безопасным, децентрализованным и совместимым с EVM.
Детали сложны, но основные принципы совпадают с тем, что мы обсуждали до сих пор. Как и во всех системах ZKP, здесь есть:
1.Доказатель(Prover): Генерирует доказательства достоверности, представляющие истинность пакета транзакций, представленных пользователями.
- Во-первых, он создает множество доказательств ZK-STARK.
- Он связывает ZK-STARK воедино с помощью рекурсии STARK, для создания одного ZK-STARK.
- Этот ZK-STARK большой, поэтому он проходит через компонент CIRCOM, который выходит на построитель SNARK.
- Как следует из названия, построитель SNARK генерирует доказательство достоверности ZK-SNARK, что позволяет снизить затраты на газ с 5М до 350К.
2.Верификатор: Смарт-контракт PolygonZkEVM, развернутый на Ethereum, является верификатором ZK-proof.
Подведение итогов
В целом, ZK-Rollups представляют собой многообещающую технологию, которая может значительно изменить пейзаж блокчейнов и принести масштабируемость и конфиденциальность в различные области. Однако как и с любыми технологическими разработками, важно продолжать исследования, разработки и обеспечивать безопасность для успешной реализации и расширения их использования.