Основные выводы
В ноябре 2022 года Binance выпустила свою систему Proof of Reserves, использующую криптографию дерева Меркла, чтобы позволить пользователям проверять свои активы.
Binance теперь улучшила свое решение, внедрив zk-SNARK, форму доказательства с нулевым разглашением.
Теперь пользователи могут проверить, что общий чистый баланс каждой учетной записи неотрицательен и что все пользовательские активы являются частью заявленного общего чистого баланса пользовательских активов Binance – конфиденциально и безопасно.
Загляните под капот нового решения Binance для подтверждения резервов. Сочетая данные zk-SNARK и дерева Меркла, он дает пользователям новый и улучшенный способ проверки состояния резервов Binance.
В течение последних нескольких месяцев команда разработчиков Binance усердно работала над созданием передовых решений для подтверждения платежеспособности. Такие инструменты стали критически важными для централизованных криптовалютных бирж в условиях кризиса доверия, охватившего отрасль после краха FTX. Средства пользователей, хранящиеся на Binance, обеспечены в соотношении 1:1 плюс резервы, и поиск способа беспрепятственно доказать это общественности стал основной частью плана Binance по восстановлению доверия отрасли.
В ноябре 2022 года мы выпустили нашу систему подтверждения резервов, использующую криптографическую технику дерева Меркла, чтобы позволить пользователям проверять свои активы на Binance. Несмотря на то, что Binance продвигает прозрачность средств пользователей, первоначальная конструкция этого решения имела два недостатка:
Чтобы защитить конфиденциальность пользователей, листовые узлы в доказательстве Меркла представляли собой хеш активов пользователей — таким образом, корень Меркла не мог отражать сумму информации о балансе своих конечных узлов.
Организация, чьи резервы проверялись, потенциально могла добавить отрицательный баланс под фиктивным счетом где-нибудь в дереве, чтобы общая сумма обязательных резервов казалась меньше. На следующей диаграмме из блога Виталика Бутерина показан пример такого вредоносного дерева Меркла (хотя в этом случае корень отражает сумму балансов всех конечных узлов, что может создать проблемы с конфиденциальностью).
Теперь у нас есть решение, которое может исправить эти недостатки и тем самым усилить систему подтверждения резервов Binance. Опираясь на протоколы доказательства с нулевым разглашением, zk-SNARK, мы можем доказать, что:
Все конечные узлы дерева Меркла внесли свой вклад в заявленный Binance общий пользовательский баланс каждого актива.
В дереве Меркла нет пользователя с отрицательным общим чистым балансом (общая стоимость всех активов, которыми владеет пользователь), в долларах США.
Несколько слов об отрицательных балансах и производительности
Поскольку Binance предлагает маржу, крипто-кредиты и продукты для торговли фьючерсами, баланс каждого пользователя каждого криптоактива может состоять из активов и обязательств. Баланс пользователя определенного криптоактива может быть отрицательным, но его общий чистый баланс по всем криптоактивам не должен быть отрицательным (поскольку все кредиты полностью обеспечены).
В этом гипотетическом сценарии предположим, что Алиса внесла 10 000 BUSD на Binance, а затем использовала 4 000 BUSD в качестве залога для заимствования 2 BNB (по курсу 1 BNB = 1 000 BUSD, предполагая, что Binance всегда предоставляет чрезмерное обеспечение). В следующей таблице показан баланс Алисы.
Если затем Алиса обменяет 1 BNB на 1000 BUSD с Бобом (который также внес 10 000 BUSD), их баланс будет выглядеть следующим образом после сопоставления сделки:
В этом случае баланс BNB Алисы будет равен -1, что не является допустимым узлом в дереве Меркла и охватывает только один актив: BNB. Однако, если мы посмотрим на общий чистый баланс, Алиса все еще будет на уровне 10 000.
Еще одна проблема связана с огромным масштабом пользовательской базы Binance. Жизнеспособное решение должно обеспечить подтверждение пользователя и доказательство zk-SNARK для десятков миллионов пользователей, некоторые из которых могут хранить более 300 криптоактивов на нашей платформе.
В целом, мы хотим предоставить доказательства следующих фактов в разумные сроки:
Активы каждого пользователя Binance являются частью нашего заявленного общего баланса пользователя, показанного на снимке. Пользователи могут сверить заявленный нами общий пользовательский баланс с активами, хранящимися на адресах, контролируемых Binance, с помощью обозревателя блокчейна (например, Etherscan для кошельков Ethereum или BscScan для кошельков BNB Chain).
Общий чистый баланс каждого пользователя неотрицательен, что означает, что Binance не создавала фиктивные учетные записи с отрицательным балансом, чтобы искусственно уменьшить размер наших проверенных резервов.
Что такое zk-SNARK?
Прежде чем мы углубимся в детали нашего решения, уместно дать краткий обзор механизма доказательства с нулевым разглашением. Протоколы с нулевым разглашением, такие как zk-SNARK, позволяют одной стороне, проверяющей, продемонстрировать другой стороне, проверяющей, что доказывающая точно выполнила определенные вычисления с определенными входными данными при определенных ограничениях, и все это без раскрытия входных данных. Вычисления могут занять много времени, но лежащий в их основе математический механизм может помочь проверяющему быстро и надежно оценить доказательство.
Доказывающее устройство (Binance) начинает с определения набора ограничений вычислений, которые оно хочет доказать. Ограничения определяются в схемах, которые могут быть выражены на языке программирования более высокого уровня (в нашем случае это раздвоенная версия gnark).
Затем доказывающая программа выполняет сложные вычисления, хэшируя идентификаторы всех пользователей и балансовые отчеты, и генерирует доказательство того, что вычисления соответствуют ограничениям, изложенным ранее. Для этого он использует трассировку вычислений (свидетеля) и общедоступные или частные входные данные.
Верификатор (пользователь) получает доказательство и сверяет его с общедоступными входными данными схемы, чтобы убедиться, что вычисление было выполнено точно с соблюдением всех ограничений. Вычисление проверки занимает чрезвычайно короткое время по сравнению со временем проверки. Если программа доказательства не генерирует доказательство в заранее определенных схемах, она не может предоставить действительные доказательства для прохождения проверки.
Чтобы более глубоко заглянуть под капот zk-SNARK, вы можете обратиться к этой серии статей.
Наше решение
Фундаментальным строительным блоком обновленного решения по подтверждению резервов по-прежнему остается дерево Меркла. Для примера выше это будет выглядеть так:
В дополнение к дереву Меркла мы также поддерживаем глобальное состояние, которое представляет собой список общих чистых остатков каждого актива, которым владеет каждый клиент Binance.
Чтобы доказать наши резервы, мы сгенерируем доказательство zk-SNARK для построения дерева Меркла. Для набора балансов каждого пользователя — конечного узла дерева Меркла — наша схема будет следить за тем, чтобы:
Баланс каждого актива этого пользователя включен в глобальный список состояний, упомянутый выше.
Общий чистый баланс пользователя не является отрицательным.
Изменение корня дерева Меркла действительно после обновления информации этого пользователя до хэша конечного узла.
Пожалуйста, обратитесь к этой технической спецификации и нашему исходному коду схемы (ограничения) для получения подробной информации о реализации.
В каждом случае подтверждения наших резервов мы будем публиковать:
1. Доказательство Меркла: хеши для каждого пользователя (для Алисы, представленной синими узлами на рисунке выше).
2. Доказательства zk-SNARK и публичные входные данные (хэш списка общих чистых балансов каждого актива и корня Меркла) схемы для всех пользователей.
Проверив доказательство Меркла, пользователи могут убедиться, что их балансовый отчет включен в корень дерева Меркла. Проверив доказательство zk-SNARK, пользователи могут убедиться, что построение дерева Меркла соответствует ограничениям, определенным в схеме.
Безопасность этого решения во многом зависит от настройки ключа подтверждения и ключа проверки. Мы работаем над децентрализованной настройкой ключей. Когда дело доходит до существующих децентрализованных церемоний доверенной установки, церемония Ethereum представляет собой хороший пример. Мы очень близки к созданию решения MPC, которое сделает установку надежной.
Производительность
Учитывая количество пользователей Binance, чьи балансы должны быть включены, невозможно получить единое доказательство построения дерева Меркла, которое охватывало бы всех пользователей одновременно. Решением этой проблемы является разделение пользователей на группы по 864 человека в каждой, чтобы иметь схему меньшего размера и параллельные процедуры проверки.
Предположим, что для пакета, содержащего 864 пользователя, каждый из которых владеет 350 различными активами, баланс каждого актива находится в диапазоне [0, 2^64-1]. При использовании 32-ядерного сервера емкостью 128 ГБ время генерации доказательства zk составляет около 110 секунд, а время проверки доказательства — менее 1 миллисекунды.
Binance запустит 1000 пруверов одновременно, чтобы сгенерировать доказательства для всех аккаунтов за 2 часа. Стоимость этого проверочного сервера за один час составляет около 0,56 долларов США, поэтому общая стоимость создания всех доказательств zk, охватывающих всех пользователей, составит около 1000 долларов США.
Заключение
Мы предоставим первую версию доказательства для пользователей, созданную этим новым решением, в последующем объявлении о подтверждении резервов. Кроме того, мы открыли исходный код нашего процессора пользовательских данных, средства проверки, схемы и верификатора, чтобы каждая централизованная биржа, опирающаяся на ту же модель, что и мы, могла легко генерировать доказательства для своих пользователей и активов.
Мы надеемся, что это поможет вывести прозрачность индустрии цифровых активов на новый уровень. Мы также работаем над реализацией решения, упомянутого в блоге Виталика, для повышения производительности, что позволит нам предоставлять доказательства чаще и с меньшими затратами.
Поскольку это первая версия zk-SNARK, мы с нетерпением ждем отзывов сообщества, чтобы продолжать совершенствовать систему.
Код и дополнительная литература
Наш исходный код
Доказательство резервов Binance: что такое дерево Меркла
Binance Academy – Повышение прозрачности криптовалют с помощью доказательства с нулевым разглашением
Блог Виталика: Безопасная CEX: доказательство платежеспособности и не только



