Главная
Статьи
Повышение прозрачности криптовалют с помощью доказательств с нулевым разглашением

Повышение прозрачности криптовалют с помощью доказательств с нулевым разглашением

Продвинутый
Опубликовано Feb 10, 2023Обновлено Jan 5, 2024
10m

Осторожно! Много текста.

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

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

Введение

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

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

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

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

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

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

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

Для получения подробной информации ознакомьтесь со статьей Что такое доказательство с нулевым разглашением (ZKP) и как оно влияет на блокчейн.

Зачем использовать доказательства с нулевым разглашением?

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

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

В этих и других примерах доказательства с нулевым разглашением используют алгоритмы, которые принимают входные данные и возвращают результат «истина» или «ложь». 

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

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

  1. Полнота данных. Если утверждение истинно, верификатор будет убежден предоставленным доказательством без необходимости в какой-либо дополнительной информации или проверки.

  2. Достоверность. Если же утверждение ложно, то верификатора не удастся убедить предоставленным доказательством.

  3. Нулевое разглашение. Если утверждение истинно, то верификатор не узнает никакой прочей информации, кроме того, что утверждение истинно.

Что такое zk-SNARK

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

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

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

Что такое дерево Меркла?

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

Хэш-функции

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

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

Например, мы можем взять содержание 100 книг и ввести их в хеш-функцию SHA-256. В результате мы получим нечто подобное:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

Если изменить хотя бы один символ входных данных (тех 100 книг), то хеш станет совершенно другим, например таким:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

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

Деревья Меркла в пространстве криптовалют

При хранении данных о транзакциях в блокчейне каждая новая транзакция проходит через хеш-функцию, которая генерирует уникальные хеш-значения. Предположим, у нас есть восемь транзакций (от A до H), которые мы хешируем по отдельности, чтобы получить их хеши. Именно это называется листовыми нодами Меркла. На изображении ниже представлено уникальное хеш-значение каждой буквы: hA для A, hB для B, hC для C и так далее.

Затем мы берем пары хешей, объединяем их и получаем новый хеш. Например, хеши hA и hB, хешированные вместе, дадут новый хеш hAB — ветвь Меркла. Обратите внимание, что при каждой генерации нового хеша он имеет фиксированную длину и размер в соответствии с используемой хеш-функцией.

Теперь у нас есть данные двух транзакций (например, A и B), объединенные в один хеш (hAB). Обратите внимание, что в случае изменения какой-либо информации из A или B, итоговый хеш hAB будет совершенно другим.

Далее мы продолжаем процесс объединения новых пар хешей для повторного хеширования (как показано на рисунке ниже). Мы хешируем hAB с hCD, чтобы получить уникальный хеш hABCD, и делаем то же самое с hEF и hGH, чтобы получить hEFGH. В итоге у нас останется единый хеш, представляющий собой хешированные хеши всех предыдущих транзакций. Другими словами, хешированный результат hABCDEFGH включает всю информацию, которая была до него.

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

Ограничения деревьев Меркла

Вернемся к нашему примеру с резервами CEX. CEX нужно доказать, что все активы пользователей обеспечены в соотношении 1:1. С этой целью биржа создает дерево Меркла, в котором хешируются ID пользователей и их чистые активы (за вычетом активов и обязательств) на уровне токенов. После получения хеша (и подписания для подтверждения права собственности на предоставленный корень Меркла) у отдельного пользователя не будет возможности проверить действительность дерева Меркла без доступа к входным данным.

Иногда биржа может не включать некоторые входные данные. Помимо этого, она может создавать поддельные аккаунты с отрицательным балансом, чтобы изменить общую сумму обязательств. Например, сумма активов пользователей может составлять $1 000 000, но биржа искусственно создает аккаунт с балансом -$500 000. В результате итоговая сумма резервов составит всего $500 000.

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

Биржи могут рассмотреть вариант использования доверенного аудитора со стороны. Аудитор проверяет отдельные аккаунты и резервы, чтобы убедиться в достоверности предоставленного корня Меркла. Однако в этом случае пользователям приходится полагаться на авторитет аудитора и доверять данным аудита. Если же мы можем доверять данным, то полагаться на третью сторону не придется.

Объединение zk-SNARK с деревьями Меркла

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

Используя zk-SNARK, криптобиржа может доказать, что все балансы листовых нод дерева Меркла (балансы аккаунтов пользователей) включены в заявленный биржей общий баланс пользовательских активов. Каждый пользователь может без труда проверить включение своей листовой ноды в резервы биржи. zk-SNARK также гарантирует, что любое сгенерированное дерево Меркла не содержит пользователей с отрицательным балансом чистых активов (то есть данные не сфальсифицированы, и все займы имеют избыточное обеспечение). Помимо этого, используется расчет глобального состояния Binance — список общего чистого баланса каждого актива, которым владеет каждый пользователь Binance.

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

Для каждого набора с балансом пользователя (листовая нода дерева Меркле) наша схема гарантирует, что:

  1. Балансы активов пользователя будут включены в расчет суммы общих чистых балансов пользователей Binance.

  2. Общий чистый баланс пользователя больше или равен нулю.

  3. Изменение корня дерева Меркла является действительным (т. е. не используется поддельная информация) после обновления информации пользователя в хеше листовой ноды.

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

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

При каждой отправке результатов проверки сведений о хранении активов биржа будет публиковать:

1. Доказательство Меркла для каждого пользователя.

2. Доказательство zk-SNARK и публичные входные данные (хеш списка общего чистого баланса активов и корня Меркла) схемы для всех пользователей.

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

В заключение

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

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

Рекомендуемая литература