Доказательства с нулевым разглашением, Zcash и Ethereum.

Grigorij First
Keep Network Russia
10 min readJul 9, 2020

--

3 эпизод серии Конфиденциальность в блокчейне.

Фото: David Straight.

В третьей части этой серии Мэтт Луонго сосредоточится на доказательствах с нулевым разглашением, краеугольном камне для большей финансовой безопасности и конфиденциальности данных в криптовалютах, включая Zcash и Ethereum.

В баре вы случайно обсуждаете варианты конфиденциальности со своими коллегами-постоянными посетителями. Один джентльмен безгранично верит PrivateSend Dash. Другой парень предлагает вам использовать прекрасный Monero. Бармен — поклонник Эфира — она не беспокоится о конфиденциальности, потому что это «есть в роуд-мапе». Среди миксеров, кольцевых сигнатур и мастер-узлов вы вслух задаетесь вопросом, а есть ли лучший инструмент для обеспечения конфиденциальности данных и финансов.

В конце бара худой, слегка лысеющий мужчина выглядит так, будто хочет присоединиться к разговору. Вы замечаете и улыбаетесь. Человек нервно наклоняется к вам, и глотая слова тихим голосом говорит…

«… Доказательства с нулевым разглашением».

Доказательства с нулевым разглашением

Доказательства с нулевым знанием — неудобная тема.

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

Доказательства с нулевым разглашением являются категорией криптографических инструментов со множеством различных разновидностей. Как концепция, она не столь страшна, и стоит потратить лишь немного времени, чтобы понять.

Как и большинство вещей, в теме есть слои, которые можно открыть и изучить. Небольшая аналогия может иметь большое значение для понимания того, что такое доказательства с нулевым знанием и на что они способны.

Опасный незнакомец

Фото: Paul Garaizar.

Представьте, что вы встретили кого-то на улице, и он утверждают, что знает вашу маму — она в больнице, и вам нужно сесть в машину прямо сейчас, чтобы навестить ее. Вы в растерянности. Вы беспокоитесь о своей матери, но к настоящему времени вы должны чувствовать также опасения и к этому незнакомцу.

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

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

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

Запрос / ответ

Хорошим примером общего доказательства с нулевым разглашением является криптографический протокол запроса-ответа.

Ваш друг Зуко пишет в Твиттере, что у него только что была замечательная пицца, несмотря на его долгую и публичную нелюбовь к углеводам. Обеспокоенный тем, что его учетная запись была взломана, вы отправляете личное сообщение, прося его зашифровать(1) сообщение «Да, я действительно только что съел всю пиццу. На ней не было даже мяса!» своим закрытым ключом. Если зашифрованный текст, который он отправляет обратно, можно расшифровать с помощью его известного открытого ключа, вы знаете, что он все еще имеет доступ к своей учетной записи Twitter(2).

Важным моментом в этом примере является факт того, что бы вы, как верефицирующий, выбрали сообщение. Если проверяющий выбрал сообщение, а учетная запись Зука была скомпрометирована, злоумышленник мог использовать любое прошлое сообщение, которое Зуко зашифровал с помощью своего личного ключа, доступного для злоумышленника. Например, предположим, что в прошлом Зуко зашифровал сообщение «Я люблю мясо», и у злоумышленника был доступ к зашифрованному и незашифрованному текстам. Злоумышленник, как проверяющий, может использовать это сообщение, дублируя ответ верифицирующему в так называемой атаке ответа.

Таким образом, если Зуко никогда не шифровал именно это сообщение, вы можете быть уверены, что всё в порядке. На практике вы также должны включить в сообщение данное время или очередь запроса или случайное число, чтобы убедиться, что оно уникально — или, ещё лучше, использовать алгоритм подписи, который сделает это для вас лучше ассиметричного шифрования.

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

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

zk-SNARK-и

Льюис Кэрролл написала книгу «Охота на Снарка» в 1876 году, придумав термин для своего воображаемого существа.

Когда люди в криптовалютном пространстве говорят «доказательства с нулевым разглашением», они обычно подразумевают определенный тип доказательства — zk-SNARK.

Математика, лежащая в основе zk-SNARK, сложна для понимания, но если вы не реализуете их, не атакуете их или не слишком параноидальны, чтобы поверить на слово криптографу, вы можете пропустить математику и сосредоточиться на том, что они делают.

Давайте поговорим об имени. «zk» означает нулевое знание. Удивительно, но в компьютерных науках есть ряд других «снарков», в том числе доказательство теорем и типы графиков. Также есть «снарки» и за пределами компьютерной науки, в том числе воображаемые существа, видеоигры и саркастические замечания.

SNARK, который мы обсуждаем означает краткий неинтерактивный адаптивный параметр знания(3).

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

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

Наконец, «адаптивный параметр знания» относится к доказательству знания некоторых вычислений.

Что именно это значит? Представьте, что ваш учитель математики в начальной школе дает вам сложную арифметическую задачу. Вместо того, чтобы давать ответ (и показывать свою работу!), Zk-SNARK-и позволяют вам доказать, что вы знаете ответ, не раскрывая его.

Это изящный трюк, но есть некоторые оговорки.

SNARK-и являются ресурсоемкими. Как мы увидим при обсуждении Zcash, некоторые из используемых вычислений усложняют определенные варианты использования, в том числе использование мобильных устройств и устройств с низким энергопотреблением, хотя недавний прогресс в этой области обнадеживает.

Существует также проблема потери доступа к секрету. SNARK позволяет пользователю доказать, что у него есть доступ к секрету, но ответственность за сохранность и доступность секрета лежит на пользователе. Мы обсудим это ограничение более подробно, когда будем обсуждать SNARK на Ethereum.

Однако наиболее существенным структурным недостатком SNARK является, так называемая, фаза настройки.

Фаза настройки

Для каждого типа проблемы, которую вы хотите решить с помощью SNARK, существует предварительный этап коммуникации, называемый фазой настройки. На этом этапе схема или вычисление, которое вы хотите доказать фиксируются. Из-за этого ограничения SNARK не годятся для выполнения произвольных Тьюринг полных умных контрактов. Таким образом, каждый новый контракт требует нового этапа настройки.

Чтобы сделать это более понятным, скажем так: каждая задача, которую ставит учитель математики, требует отдельной фазы настройки. Может быть одна для сложения, а другая для умножения. После того, как вы завершили этап настройки между вами и вашим учителем, для добавления очередной задачи, её не нужно повторять. Любые новые виды задач требуют новой фазы настройки.

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

Если вы хотите использовать определенную схему публично, с более чем одним верифицирующим, должна иметь место доверенная фаза настройки. Вместо одного верифицирующего, генерирующего (и, надеемся, уничтожающего!) секрет изготовления доказательства, группа людей может создать секрет вместе. До тех пор пока хотя бы один из этих людей честен и уничтожает свою долю секрета, безопасность настройки гарантирована.

Для более подробного, но в то же время удивительно доступного введения в SNARK-и, посмотрите «Введение в zk-SNARKs с примерами» Кристиана Лундквиста. Чтобы узнать больше о математике, посмотрите объяснение Zcash, «zkSNARK-и в двух словах» или сериал Виталика Бутерина «Zk-SNARK-и: под капотом».

Zcash

Zcash разработан «Zcash Electric Coin Company». Фото: Fré Sonneveld.

Мы обсудили zk-SNARK более чем достаточно, чтобы рассказать о его наиболее популярном использовании — Zcash.

Zcash — это криптовалюта, сохраняющая конфиденциальность на основе zk-SNARK. Фактически, он построен на одной конкретной схеме SNARK, верификаторе транзакций Zcash, с его собственной требующей доверия настройкой. Пользователи Zcash могут публиковать транзакции с открытыми суммами, отправителями и получателями, точно так же, как и в сети биткоин. Они также могут опубликовать доказательство того, что приватная транзакция соответствует правилам сети Zcash, скрывая отправителя, получателя и сумму. На языке Zcash они называются защищёнными транзакциями.

В качестве конфиденциальной монеты Zcash часто сравнивают с Monero. Однако два этих проекта используют совершенно разные подходы к конфиденциальности.

В то время как кольцевые подписи Monero предлагают правдоподобное отрицание для каждой транзакции, размер набора анонимности является фиксированным — рекорд для большинства участников одной кольцевой подписи — для Monero составляет 4500.

Защищённые транзакции Zcash в свою очередь, имеют набор анонимности, охватывающий каждую монету, используемую в защищённых транзакциях. Это принципиально более сильная гарантия конфиденциальности, чем те, которые предлагаются кольцевыми подписями.

Однако, как обсуждалось выше, Zcash также наследует недостатки zk-SNARK.

Сгоревшие останки одного из компьютеров, участвующей в доверенной настройке Zcash. Фото: Peter Todd.

Чтобы создать валюту, группа криптографов и известные члены сообщества собрались на сложной церемонии первоначальной настройки. Доверие безопасности Zcash означает, что эти участники не сговорились и не были вынуждены передать свою долю сгенерированного секрета. Если доли секрета действительно выживут, любой, у кого есть доступ, сможет произвести поддельные монеты, хотя при этом, злоумышленник всё же не сможет разоблачить транзакции. Питер Тодд, эксперт по безопасности, активно участвующий в сети биткоин, поделился своим отчетом о своем участии в церемонии. Это стоит прочитать.

Характеристики производительности SNARK также означают, что приватные транзакции не могут быть рассчитаны на менее мощных устройствах, таких как популярный аппаратный кошелек Ledger nano s.

Команда Zcash добилась больших успехов в производительности с момента своего первого выпуска. После обновления сети Sapling пользователи получили значительное улучшение производительности.

Ethereum

Copyright © Ethereum 2015

До сих пор в этой серии мы вели разговор о финансовой конфиденциальности. Zcash является высококлассным приложением в финансовом пространстве, но доказательства с нулевым разглашением также являются отличным инструментом для обеспечения конфиденциальности данных.

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

Сегодняшние контракты на Ethereum, которые должны поддерживать конфиденциальность данных, полагаются на безопасные записи. Эти простые схемы позволяют пользователю зафиксировать секретное значение, опубликовав свой хэш в блокчейне, позже раскрыв секрет, либо в блокчейне, либо вне цепочки.

К сожалению, сами по себе эти конструкции хеша / раскрытия невероятно ограничены. Они используются в азартных играх и простом обмене цифровыми активами, но не достаточно функциональны, чтобы обеспечить более широкое использование личных данных.

В обновлении протокола Ethereum, Metropolis, разработчики умных контрактов получат новый инструмент конфиденциальности — возможность эффективной проверки zk-SNARK в цепочке. (форк уже состоялся, прим. переводчика)

Что мы можем сделать с Ethereum с поддержкой SNARKs? Некоторые переменные контракта могут быть эффективно сделаны приватными. Вместо того, чтобы хранить секретную информацию в цепочке, она может храниться у пользователей, которые доказывают, что они ведут себя по правилам договора, используя SNARK. Каждое из этих применений требует своих собственных доверенных настроек, но как только схема создана, её можно легко клонировать.

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

До тех пор пока данные вашего контракта 1-к-1 соответствуют таковым у пользователя, а так же пользователям можно доверять доступ к секрету, zk-SNARK является отличным решением.

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

Конфиденциальность без пользователей

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

Существуют и другие ценные способы использования личных данных в Ethereum как для пользователей, так и для предприятий. Несколько идей, которые было бы сложно или невозможно реализовать на Ethereum:

  • Расширенное децентрализованное управление. Автономные организации не могут хранить личную информацию без делегирования пользователю функции «владельца секрета».
  • Автономная торговля на некоторых биржах, включая проект 0x.
  • Контракты, которые поддерживают одностороннее «хранение» внебиржевых активов. Для примера, контракт Ethereum, который требует одностороннего хранения биткоин-кошелька.
  • Делегированный доступ к личной информации, медицинской документации или другой частной информации. SNARK не позволяют управлять доступом к личным данным любого рода, требуя, чтобы пользователи обменивались частной информацией вне сети.

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

[1] Да, можно просто использовать подпись. Попробуйте объяснить атаки воспроизведения с помощью подписи на доступном языке — вы должны объяснить детерминированные подписи, что немало для этого и без того многословного поста.

[2] Или, другой сценарий: хакер получил доступ как к учетной записи Twitter, так и к закрытому ключу. Хлоп.

[3] Как первоначально описано в Bitansky et al.

Узнайте больше

Больше информации о Keep Network:

Источник: https://blog.keep.network/zero-knowledge-proofs-zcash-and-ethereum-f6d89fa7cba8

--

--