Оглавление
Сертификаты Zk-SNARK обычно связываются с монетой Z-Cash. Но с ожиданием Метрополиса (хардфорка Эфириума), эта вещь вызывает все больше вопросов.
Подробнее о хардфорке эфира и EIP (предложение об улучшении, как у биткоина BIP) Ethereum в этой статье
В этой статье мы рассмотрим идею о доказательстве с нулевым разглашением (доказательстве нулевого знания) и ее применении в технологии блокчейн.
Введение
Доказательства нулевого знания появились в 1980-х годах благодаря работе исследователей MIT Шафи Гольдвассер, Сильвио Микали и Чарльза Реккофа. Они работали над проблемами, связанными с системами интерактивных доказательств, где «Доказывающий» обменивается сообщениями с «Проверяющим», который должен убедиться в том, что «Доказывающий» владеет определенным доказательством, не разглашая, что это на самом деле.
Прежде чем они сделали это знаменательное открытие, большинство доказательных систем были основаны на «обоснованности» свойств системы доказательств. Всегда предполагалось, что «Доказывающий» может быть вредоносным сценарием, в котором будет попытка обмануть верификатор («проверяющего»). Эти 3 исследователя перевернули идею с ног на голову.
Существуют различные реальные последствия этой головоломки, и одно из самых известных связано с защитой паролем. Предположим, вы хотите войти на сайт с помощью пароля. Стандартный алгоритм заключается в том, что клиент (вы) пишете свой пароль и отправляете его на сервер, затем сервер сравнивает хэш от вашего пароля с хэшем, который был сохранен в системе. Если значения совпадают, вы можете войти в систему.
Каковы недостатки такой системы?
Сервер имеет версию вашего пароля, так что ваша конфиденциальность во власти сервера («проверяющей стороны» в этом сценарии). Если сервер попадает под атаку, тогда хэш будет украден и может быть разгадан, последствия могут быть ужасными. Чтобы противостоять этим сценариям, необходимы доказательства с нулевым разглашением.
Есть две стороны, когда дело доходит до нулевого доказательства знания (как указано выше), доказывающий и проверяющий, прувер и верификатор. Нулевое знание утверждает, что прувер может доказать верификатору, что он обладает знанием, не сообщая, что скрывается под «знанием».
Простым языком: я говорю: «У меня есть пароль, но не скажу какой», система говорит: «Верю».
Свойства zkSNARKs
Для работы протокол должен удовлетворять определенным параметрам (пусть вас не смущают термины, которые применимы к общению, интерактивные протоколы предполагают обмен данными между сторонами):
- Полнота: если утверждение верно, то легальный (честный) верификатор может быть убежден в этом легальным доказательством.
- Корректность: если прувер лживый, нельзя убедить верификатора.
- Нулевое разглашение (Zero-Knowledge): если утверждение истинно, верификатор не будет знать, что скрывается в этом утверждении.
С более ранними системами проверки нулевого знания была одна большая проблема. Чтобы это работало, проверяющий и доказывающий должны быть в режиме онлайн одновременно. Другими словами, процесс был «интерактивным». Это делало всю систему неэффективной и почти невозможной для масштабирования.
В 1986 году Фиат и Шамир изобрели криптографическую подпись Фиат-Шамир, которой заменили интерактивное доказательство на неинтерактивное. Это помогло всему протоколу работать без какого-либо взаимодействия.
Итак, теперь, когда у нас есть базовое представление о том, что такое доказательство с нулевым разглашением, давайте рассмотрим его пример, прежде чем погрузиться в zkSNARKs и их применение в блокчейне.
Пример Алибабы
В этом примере «доказывающий» (P) говорит «проверяющему» (V), что знает пароль от секретной двери в конце пещеры и хочет доказать это, но не раскрывать секретную фразу.
Вот как это выглядит:
Алибаба спускается по любому из путей А или В, предположим, что он изначально решил пройти путем А и добраться до секретной двери. Когда он это делает, страж ворот стоит у входа и заявляет, что хочет видеть, как Алибаба появляется на пути B (хотя сам страж не знает, какой путь выбрал герой).
Как вы можете догадаться, герой действительно появится на пути B. Но что, если это была простая удача? Что делать, если доказывающий не знал код от двери и сразу выбрал путь В, застрял у двери, а верификатор сказал ему появиться на том пути В, на котором он и стоял изначально?
Итак, чтобы доказать достоверность, эксперимент выполняется несколько раз. Проверка будет появляться на правильном пути каждый раз, и это доказывает проверяющему, что пароль известен другой стороне, даже если никто больше не знает его.
Посмотрим, как три свойства нулевого знания удовлетворяются в этом примере:
Полнота: поскольку утверждение было правдой, честный доказывающий убедил честного верификатора.
Корректность: если бы Алибаба был нечестным, он не смог бы обмануть верификатора, потому что тест проводился несколько раз.
Нулевое разглашение: верификатор так и не узнал, что это за пароль, но был убежден, что Алибаба его знает.
Этот пример вы можете найти в литературе под названием Пещера нулевого разглашения.
Еще пример: найди меня на рисунке
Помните популярную загадку «Найди Уолли»?
Казалось бы, просто смотри и ищи. Но у нас есть два героя, Анна и Борис. Анна уже нашла Уолли, но не хочет подсказывать Борису, при этом хочет доказать, что сделала это быстрее.
Была интересная статья Наор, Наора и Рейнгольда, в которой представлены два варианта решения этой проблемы. Существует «Среднетехнологичное решение» и «Низкотехнологичное решение».
Среднетехнологичное решение
Причина, по которой это решение является «средним», заключается в том, что нашему доказывающему и проверяющему нужен доступ к копи-машине. Во-первых, Анна и Борис сделают фотокопию оригинальной игры. Затем Анна, убедившись, что Карл не смотрит, вырежет Уолли из копии, а затем уничтожит остатки. После этого она может показать, что вырезанного Уолли, тем самым докажет, что она действительно знала, где он был, но не даст узнать, где он находится в оригинале.
С этим решением есть проблемы. Несмотря на то, что он выполняет критерии «нулевого разглашения», он не соответствует критериям «устойчивости». Есть много способов, которыми Анна могла обмануть. У нее мог быть другой Уолли с самого начала.
Решение — тщательное тестирование. Во-первых, Анна и Борис возьмут копию игры и пометят ее на всем листе. После этого Борис сопроводит Анну в комнату, где она будет изолирована и у нее не будет шанса обмануть. Если Анна выйдет с вырезанной фигуркой, тогда Карл может ей поверить. Они могут повторить этот эксперимент несколько раз, и Карл может сравнить различные фигурки Уолли, чтобы еще больше убедиться в справедливости заявления Анны.
Низкотехнологичное решение
Это решение требует простого оборудования. Идея проста. Берется большой картон, в два раза больше размера листа с игрой, на нем вырезается небольшой прямоугольник. Теперь, когда Борис не смотрит, Анна может поместить картон на игру таким образом, чтобы прямоугольник находился прямо над Уолли.
Итак, хотя Борис может получить очень общее представление о том, где Уолли действительно может быть (например, если лист не торчит из-под картона, то Уолли точно не с краю), он не знает точное местоположение. Таким образом, Анна доказала Карлу, что она знает, где Уолли, не раскрывая это точно.
Практическое применение в блокчейне
Почему все бредят о Zcash, который внедрил ZKP, и почему все взволнованы тем, что Ethereum делает то же самое? Прежде чем мы расскажем это, важно прояснить еще одну важную теоретическую концепцию.
Что именно мы доказываем с помощью ZKP? В широком понимании есть два утверждения, которые можно доказать с помощью доказательства с нулевым разглашением:
- доказательства как факты — это объективные истины, которые вы можете доказать через ZKP. Например, «Число X принадлежит группе Y»,
- доказательства знания — это когда вы можете доказать, что обладаете конкретной идеей, но не раскрывать ее значение.
Важно отметить разницу между этими двумя вариантами, потому что они совершенно разные. В мире криптовалюты мы в основном сосредоточены на «доказательстве знания».
Zk-Snarks означает «неинтерактивный аргумент знания с нулевым разглашением». Чтобы понять применение этого протокола, важно знать, как работает интеллектуальный контракт.
Например, А ставит 100 эфиром для Б, который получает их после выполнения задачи. Это осложняется, когда задачи, которые нужно выполнить, являются многоуровневыми и конфиденциальными.
Предположим, вы создали смарт-контракт. Теперь вы получите платеж, если сделаете действия а), б) и в). Что делать, если вы не хотите раскрывать детали, потому что они являются конфиденциальными и секретными для конкурентов?
Zk-Snarks делает так, что доказывает: эти шаги были исполнены согласно условиям смарт-контракта, не раскрывая, что это за действия. Он может просто показать часть процесса, не показывая весь процесс, и доказать, что вы честны.
Как работают ZkSNARKs?
Zk-Snark состоит из 3 алгоритмов: G, P и V.
G является генератором ключей, который принимает инпут «лямбда» (который не должен раскрываться ни при каких обстоятельствах) и программу C. Затем генерируется два общедоступных ключа: ключ проверки pk (для пруфера) и ключ vk (для верификатора). Эти ключи являются доступными для любой из заинтересованных сторон.
P — это тот, кто будет использовать 3 элемента в качестве входных данных. Проверяющий ключ pk, случайный инпут x, который является общедоступным, и заявление, которое нужно доказать, но не рассказывать, что это на самом деле. Назовем этот оператор «w». Алгоритм P порождает доказательство prf такое, что: prf = P (pk, x, w).
Алгоритм верификатора V возвращает логическую переменную. Логическая переменная имеет только два варианта: она может быть TRUE (правда) или может быть FALSE (ложь). Итак, верификатор принимает ключ, инпут X и доказательство prf в качестве входных данных, таких как: V(vk,x,prf). А затем определяет, правда это или ложь.
Теперь о параметре лямбда. Значение «Лямбды» должно быть конфиденциальным, потому что каждый может использовать его для создания поддельных доказательств. Эти поддельные доказательства возвращают значение TRUE независимо от того, действительно ли на самом деле имеет обладатель имеет информацию о секретном утверждении «w» или нет.
ZkSNARKs в криптовалютах
Zcash — это криптовалюта, выпущенная Zerocoin Electic Coin Company 9 сентября 2016 года. Она является первым примером криптовалюты, вступающей с концепциями технологии блокчейн + ZkSnarks. Она предназначена для проведения абсолютно безопасных и защищенных транзакциой для своих пользователей без раскрытия деталей (например, адресов).
Ethereum хочет интегрировать ZkSnarks, когда вступит в фазу Metropolis, и способ, которым они планируют это сделать, — создать альянс с Zcash.
Главный разработчик Zcash, Зукко Уилкокс, выступил с презентацией на DevCon2 в Шанхае, которая пролила свет на будущее такого альянса. По его словам, есть 3 способа интеграции:
Первый метод называется Baby Zoe (Zoe = Zcash на Ethereum). Он добавляет предварительный компилятор zk-snark на Ethereum и заключает мини-контракт с Zcash на Ethereum. Идея состоит в том, чтобы увидеть, может ли система Ethereum создавать DAPP с поддержкой zk-snark поверх своего блокчейна.
Второй метод — интегрировать вычислительную способность Ethereum внутри блока Zcash. Как полагает Уилкокс, самым большим преимуществом Ethereum является его вычислимость, и она хотят узнать, могут ли они интегрировать его в блокчейн zk-snark. Могут ли люди создать DAPPS на блокчейне, сделанном на нулевом доказательстве знаний?
Третий вариант — проект «Алхимия». Это связь и взаимодействие двух цепей, так что между ними можно легко перемещаться. То, как Zcash планирует это сделать, — это повторить BTC Relay. Это проектEthereum, который был написан для создания легкого клиента биткоина внутри Ethereum. Клон от Zcash будет использовать ту же концепцию для создания лайт-клиента Zcash внутри Ethereum.
Если это сработает, тогда у нас будет первая, децентрализованная валютная система в мире, которая облегчит создание децентрализованных приложений с доказательством с нулевым разглашением.
Нет сомнений в том, что введение нулевых доказательств знания будет огромным плюсом для Ethereum. В условиях все более открытого, взаимозависимого и контролируемого мира любая конфиденциальность приветствуется.