Можно ли реализовать ZKSnarks в экосистеме Ethereum?

Поскольку в Zcash, похоже, завершена реализация ZKSnarks (или почти по крайней мере).

Появились версии JPMorgan Quorum с включенными реализациями ZKsnarks, см.: https://www.coindesk.com/jpmorgan-integrates-zcash-privacy-tech-enterprise-blockchain/

Мы все знаем, что время проверки Snarks не зависит от схемы (не от количества ворот, это правда), но в любом случае проверки узлов будут намного быстрее, чем сейчас, потому что вычисления не будут казнен больше.

Возможности zkSNARKs впечатляют, вы можете проверить правильность вычислений, не выполняя их, и вы даже не узнаете, что было выполнено — только то, что это было сделано правильно.

Как сказано в блоге Ethereum (возможно, с более низким «математическим/теоретическим уровнем»

Я знаю о реализации LibSnark.cpp и других, но я не говорю о том, чтобы поместить все это в SmartContract, я говорю о всех механизмах блокчейна, использующих структуры Snarks для работы с полностью зашифрованными блоками и транзакциями. , а также процесс проверки узлов, реализованный также с проверкой ZkSnarks.

Можно ли будет реализовать эти SNARKS на уровне протокола для проверки всего блокчейна Ethereum? Если это не так, то почему?

Спасибо.

Ответы (3)

Отказ от ответственности : я не криптограф, не математик и не инженер-программист низкого уровня. Пожалуйста, поправьте меня, если какая-либо информация, представленная ниже, неверна.

Очень короткий ответ: да

Краткий ответ: Возможно, но очень сложно сегодня.

Более подробный ответ: основная проблема с Ethereum заключается в том, что, поскольку у вас есть программируемый блокчейн, вам фактически необходимо реализовать виртуальную машину (например, EVM) в качестве арифметической схемы, что сегодня возможно, но совсем не тривиально. Наличие схемы, специализированной для конкретной функции (например, передачи активов), намного проще, поэтому протокол Coda начинается с непрограммируемой цепочки блоков.

Учитывая это, теперь возникает вопрос : что нам нужно, чтобы использовать рекурсивные S(T|N)ARK, чтобы доказать достоверность всей цепочки Ethereum?

Вам нужно построить схему, реализующую машину с произвольным доступом (ОЗУ), т. е. ЦП, который имеет доступ к регистрам памяти. К счастью, такой дизайн был предложен в статье под названием Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture . Майк Хирн опубликовал фантастический пост в 2016 году, описывающий на более высоком уровне, что представляет собой эта маленькая машина фон Неймана zk-snark. В целом, это по-прежнему очень сложная схема, где очень дорого выполнять код. Тем не менее, спасибо за тот факт, что доказательства SNARK являются распараллеливаемыми (например, см. DIZK), есть много возможностей для оптимизации генерации параллельных доказательств, как между машинами, так и внутри аппаратных компонентов, таких как графические процессоры или ASIC SNARK (на момент еще).

Как только у нас будет схема, которая может выполнять произвольные вычисления, нам потребуются языки, которые компилируются в этот код виртуальной машины. В этот момент, я думаю, мы можем кратко проверить всю историю блокчейна Ethereum, разрешив «полные узлы в браузере».

Так как на это уйдет много времени и потребуется много доработок в базовом протоколе, было бы интересно создать такую ​​систему проверки в виде L2-сервиса. По сути, вы могли бы платить людям, чтобы они доказали, что данная цепочка действительна с момента возникновения, что было бы невероятно ценно для легких клиентов. Это не требует хардфорка и может оказаться ценным экспериментом для полного перехода на цепочку на основе SNARK.

Проблема здесь не в осуществимости, что вполне доказано, а в огромных вычислительных затратах (с точки зрения инструкций EVM, а не абсолютных).

Виталик Бутерин призывает сообщество принять эту технику. Возможно, это могло бы помочь, если бы некоторые примитивные функции были добавлены к так называемому «предварительно скомпилированному набору контрактов» Ethereum, где вы можете найти эллиптическое исчисление, основные хэш-функции и так далее.

На данный момент не так просто удержаться в вычислительных ограничениях, заявленных EVM и Ethereum (я говорю о лимите газа и так далее).

Но вычислительная нагрузка связана с генерацией доказательства, которое нужно сделать только один раз, а не с проверкой (которая будет выполняться много раз). Тогда я не понимаю, почему сейчас нельзя использовать.

Можно ли будет реализовать эти SNARKS на уровне протокола для проверки всего блокчейна Ethereum? Если это не так, то почему?

Ответ на этот вопрос может быть только спекулятивным, но вот, попробую.

В конце концов нет необходимости реализовывать это в основной сети. Ignis Plasma очень близко подходит к тому, что вы себе представляете. Взгляните на « https://medium.com/plasma-ignis/presenting-ignis-plasma-of-fire-502fab5a6f17 ». В Ignis они используют ZK-SNARK, чтобы доказать в основной цепочке, что плазменная цепочка выполняет код, согласованный участниками.

В целом, благодаря таким библиотекам, как ZoKRates (и недавно добавленной поддержке sha256), применение ZK-SNARK в Ethereum стало возможным. На нем уже есть PoC по повторной реализации Zcash. См. ЗКДАИ. Однако остаются две основные проблемы: ресурсоемкое вычисление доказательства (сделанное вне сети) и доверенная установка и токсичные отходы. Проверка по цепочке — O(1), однако стоимость газа превышает 1 млн газа, что все еще очень дорого, но может считаться осуществимым. И мы можем ожидать, что ограничения будут раздвинуты в будущем.