Перевод серии статей Мэтта Луонго (Matt Luongo), основателя приложения Found App, об устройстве конфиденциальности в блокчейне.

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

Обычно, в баре, вы небрежно обсуждаете варианты конфиденциальности с другими фанатами криптосферы. Один джентльмен все время рассказывает о надежности Dash, благодаря сервису Private Send. Другой предлагает продать вам наилучшую криптовалюту Monero. Барменша — поклонница Ethereum. Она вообще ​​не заботится о конфиденциальности, потому что она указана в технической документации. Между сервисами-миксерами, кольцевыми подписями и мастернодами, вы удивляетесь, есть ли лучший инструмент для обеспечения конфиденциальности данных и финансовой конфиденциальности.

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

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

Zk-proofs, или как еще говорят “доказательство с нулевым разглашением” — сколькая тема.

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

Zk-proofs — это категория криптографического инструмента со множеством разных вкусов. Как концепция, она не страшна, и стоит потратить лишь немного времени, чтобы понять это.

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

Неизведанная опасность

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

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

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

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

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

Хорошим примером доказательства с нулевым разглашением является криптографический протокол “запрос-ответ”.
Например, ваш друг Зуко (англ. Zooko — основатель и руководитель ZСash, — прим. ред.) пишет вам, что у него есть великолепная пицца, несмотря на его враждебность по отношению к углеводам. Беспокоясь, что его счет был скомпрометирован, вы отправляете ему личное сообщение, прося его зашифровать сообщение “Да, я действительно съел целую пиццу. На ней даже не было мяса!” с его приватным ключом.

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

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

Например, предположим, что когда-то в прошлом, Зуко добровольно зашифровал сообщение “Я люблю мясо”, и злоумышленник имел доступ к зашифрованному и открытому тексту. Злоумышленник, представляясь проверяемым лицом, может использовать это сообщение, в так называемой “повторной атаке” (англ. Replay attack, — прим. ред.).

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

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

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

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

zk-SNARK

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

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

Давайте поговорим о названии. “Zk” означает “нулевое знание” (англ. zero knowledge, — прим. ред.). Удивительно, но в компьютерной науке есть ряд других обозначений для слова “snark”, в том числе автоматическое доказательство и виды графика, а также за пределами информатики, включая воображаемых существ, видеоигр или же саркастическое замечание.

В нашем случае, SNARK означает: лаконичный и неинтерактивный краткий аргумент адаптивного знания.

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

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

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

Это очень утонченный трюк, но есть и некоторые оговорки.

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

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

Однако самым значительным структурным недостатком SNARK является, так называемый: “этап установки”.

Этап установки

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

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

Любая новая задача требует новой настройки.

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

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

Если вы хотите публично использовать определенную схему, используя несколько верификаторов, должна быть “доверенная настройка”.
Вместо того, чтобы один верификатор генерировал (и, в дальнейшем, уничтожил!) секрет, создающий доказательства, группа людей может вместе сгенерировать секрет. Пока один из этих людей честен и уничтожает свою долю в секрете, безопасность настройки гарантирована.
Для более подробного, но чрезвычайно тернистого введения в SNARK, вы можете ознакомиться со статьей Кристиана Лундквиста (Christian Lundkvist): “Вступление к zk-SNARK с примерами”.

Для получения дополнительной информации о математическом аспекте, ознакомьтесь с объяснением ZСash: “zk-SNARK в двух словах” или серией статей Виталика Бутерина (Vitalik Buterin): “Матчасть zk-SNARK”.

ZCash

Мы достаточно глубоко обсудили zk-SNARK, чтобы рассказать о высокопрофильном приложении, на основе этой технологии — ZСash.

ZСash — это криптовалюта, защищающая конфиденциальность, основанная на технологии zk-SNARK. Фактически, она построена на одной конкретной схеме SNARK, верификаторе транзакций ZСash, с собственной надежной настройкой.

Пользователи ZСash могут оформлять транзакции с публичными суммами, отправителями и получателями, как и биткоин. Они также могут публиковать доказательства того, что приватная транзакция соответствует правилам сети ZСash, скрывая отправителя, получателя, а также сумму перевода.

На языке ZСash, такие транзакции называются “защищенными транзакциями” (англ. shielded transactions, — прим. ред.).

В качестве приватной монета, ZСash часто сравнивается с Monero. Тем не менее, эти два проекта используют совершенно разные подходы к вопросу о конфиденциальности.

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

Защищенные транзакции ZСash, в свою очередь, имеют набор анонимности, охватывающий каждую монету, используемую в защищенной транзакции.

Это намного более надежная гарантия конфиденциальности, чем кольцевая подпись. Как говорилось выше, ZСash также наследует и недостатки технологии zk-SNARK.

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

Доверие безопасности ZСash означает доверие к тем участникам, которые не сговорились, и не были вынуждены передать свою долю в сгенерированном тайне.

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

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

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

Ethereum

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

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

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

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

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

Что мы можем сделать с помощью Ethereum, с поддержкой SNARK? Определенные переменные контракта могут быть эффективно защищены от постороннего доступа.

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

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

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

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

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

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

  • Расширенное децентрализованное управление.
  • Автономные организации, не имеющие возможность хранить личную информацию без классификации пользователя, как “секретного владельца”.
  • Автономная торговля несколькими сетевыми биржами, включая проект 0x.
  • Контракты, которые поддерживают единственное “хранение” активов вне сети.

Рассмотрим, например, контракт Ethereum, который, нуждается в единственном содержании биткоин-кошелька.

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

Конфиденциальность публичных блокчейн-сетях, особенно автономная конфиденциальность — вещь сложная.

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