Что такое ZK-SNARKs?
Вы, возможно, сталкивались с термином “ZK-SNARK” в обсуждениях о блокчейне, веб3 и других новых технологиях. Но что это такое? Давайте разберем это простыми словами.
ZK-SNARK означает “Доказательство нулевого знания, сжатое, неинтерактивное, аргумент знания.” Это тип криптографического доказательства, который позволяет кому-то доказать, что у него есть определенная информация или знания, не раскрывая при этом саму информацию.
Вот как это работает:
Нулевое знание: Лицо, представляющее доказательство (продавец), может убедить лицо, проверяющее доказательство (верификатор), что утверждение истинно, не раскрывая никаких дополнительных деталей об утверждении. Например, продавец может доказать, что знает секретный пароль, не сообщая верификатору, что это за пароль.
Сжато: Само доказательство очень компактно, обычно всего лишь несколько сотен байт. Это означает, что его можно быстро проверить, даже для сложных утверждений.
Неинтерактивный: Доказатель может самостоятельно сгенерировать доказательство, без каких-либо обменов сообщениями с проверяющим. Проверяющий может затем проверить доказательство в любое время, не нуждаясь в присутствии доказателя.
Аргумент знания: Если утверждение, которое доказывается, истинно, проверяющий гарантированно примет доказательство. Если утверждение ложно, проверяющий отклонит доказательство. Это гарантирует, что доказатель действительно обладает знанием, которое он утверждает.
На практике ZK-SNARKs позволяют реализовать всевозможные мощные приложения, такие как транзакции с защитой конфиденциальности, проверяемые вычисления и многое другое. Они являются ключевым строительным блоком для многих технологий блокчейна и web3. Возможность доказывать вещи, не раскрывая конфиденциальную информацию, имеет множество потенциальных применений в цифровом мире.
Как строятся ZK-SNARK?
Создание системы ZK-SNARK включает три основных компонента:
1. Арифметизация: Первый шаг — представить проблему или вычисление, которое доказатель хочет доказать, таким образом, чтобы это было подходящим для системы ZK-SNARK. Это включает в себя преобразование проблемы в набор полиномиальных уравнений.
Идея заключается в том, что любую программу или алгоритм, независимо от сложности, в конечном итоге можно разбить на серию простых арифметических операций, таких как сложение и умножение. В системе ZK-SNARK эти арифметические операции представлены с использованием «ворот» — аналогично тому, как ЦП компьютера использует логические ворота для выполнения инструкций. Представив проблему как схему из этих арифметических ворот, ее можно перевести в набор полиномиальных уравнений, которые должны быть удовлетворены.
2. Система доказательства: После того, как проблема была арифметизирована, доказатель должен сгенерировать криптографическое доказательство того, что они знают действительное решение полиномиальных уравнений, не раскрывая фактическое решение.
Это делается с использованием специального типа системы доказательства, называемой «Интерактивным Оракульным Доказательством» (IOP). Доказатель и проверяющий участвуют в интерактивном протоколе, где доказатель демонстрирует знание решения, но проверяющий никогда не узнает фактическое решение. Это интерактивное доказательство затем может быть преобразовано в неинтерактивное доказательство с использованием техники, называемой трансформацией Фиата-Шамира.
3. Схема обязательств: Последний компонент — это схема обязательств, которая позволяет доказателю «обязаться» к своему решению таким образом, чтобы это было как связывающим (доказатель не может изменить это позже), так и скрывающим (проверяющий не может увидеть фактическое решение).
Концептуально, вы можете подумать об этом как о том, что доказатель записывает свое решение на листе бумаги, запирает его в коробке и отправляет коробку проверяющему. Проверяющий не может видеть содержимое, но и доказатель не может его изменить. Когда доказатель готов, он предоставляет ключ для открытия коробки, позволяя проверяющему проверить решение.
На практике обязательство реализуется с использованием криптографических техник, таких как шифрование, а не в буквальном физическом виде коробки.
Объединив эти три компонента — арифметизацию, систему доказательства и схему обязательств — системы ZK-SNARK способны создавать сжатые, неинтерактивные доказательства, которые демонстрируют знание решения, не раскрывая само решение. Это основное новшество, которое делает ZK-SNARK такими мощными и полезными в широком круге приложений.
Применение ZK-SNARK
Теперь, когда мы понимаем основные компоненты системы ZK-SNARK, следующий вопрос: Как мы можем фактически использовать эту технологию, чтобы доказать наши собственные идеи или утверждения?
Процесс выглядит примерно так:
Идея: Начните с идеи или проблемы, которую вы хотите доказать.
Программа: Переведите эту идею в компьютерную программу, которая может быть выполнена для решения проблемы.
Схема: Преобразуйте программу в «схему» — сеть простых арифметических операций, которые могут быть представлены как полиномиальные уравнения.
Параметры: Сгенерируйте криптографические параметры, необходимые для системы доказательства ZK-SNARK.
Доказательство: Используя схему и параметры, доказатель может сгенерировать сжатое, неинтерактивное доказательство того, что они знают действительное решение.
Верификация: Проверяющий может затем проверить доказательство, чтобы подтвердить действительность утверждения доказателя, не узнав фактическое решение.
Анатомия типичной системы ZK-SNARK
Итак, как мы можем преодолеть разрыв между обычной компьютерной программой и представлением схемы, требуемым для ZK-SNARK? Существует несколько различных подходов:
Языки описания аппаратуры (HDL): Инструменты, такие как Circom, позволяют вам напрямую программировать схему с использованием языка, похожего на то, как проектируются интегральные схемы. Это дает вам точный контроль над схемой, но требует изучения нового языка специального назначения.
Библиотеки: Фреймворки, такие как Bellman (Rust) и Gadgetlib (C++), предоставляют программные библиотеки, которые позволяют вам строить схемы, используя знакомые языки программирования. Это более доступно для разработчиков, но вам все же нужно понять ограничения на уровне схемы.
Компиляторы: Некоторые новые языки программирования, такие как Zinc, специально разработаны для приложений ZK-SNARK. Они позволяют вам писать высокоуровневый код, который автоматически компилируется до требуемого представления схемы. Это самый удобный подход, но может иметь компромиссы по производительности по сравнению с другими методами.
В конечном итоге выбор подхода зависит от ваших конкретных потребностей и уровня контроля, который вам нужен над представлением схемы. Разработчики с сильным опытом в аппаратном дизайне могут предпочесть маршрут HDL, в то время как те, кто более комфортно чувствует себя с языками общего назначения, могут считать варианты библиотек или компиляторов более доступными.
Независимо от подхода, ключевым моментом является способность перевести вашу идею или проблему в форму, которая может быть эффективно представлена как схема ZK-SNARK. Это открывает возможности ZK-SNARK для доказательства действительности ваших утверждений без раскрытия конфиденциальной информации.
Проверка машинного обучения с помощью ZK-SNARK
Поскольку модели машинного обучения (ML) становятся все более сложными и мощными, возникла новая проблема: как мы можем проверить, что предсказания, сделанные этими моделями, верны, особенно когда модели обслуживаются третьей стороной в сценарии «ML как услуга» (MLaaS)?
Вот где проверяемое машинное обучение (VML) вступает в игру. Идея заключается в том, чтобы использовать ZK-SNARK, чтобы позволить поставщику модели ML доказать потребителю, что модель ведет себя правильно, не раскрывая конфиденциальные детали самой модели.
Итак, как мы можем сгенерировать доказательство ZK-SNARK для модели машинного обучения? Существует несколько различных подходов:
Прямое представление схемы: Самый простой способ — использовать инструменты, которые мы обсуждали ранее, такие как Circom, чтобы перевести модель ML в представление схемы, которое можно использовать для генерации доказательства ZK-SNARK. Однако этот подход может быть довольно неэффективным, поскольку размер схемы и время, необходимое для генерации доказательства, могут быстро увеличиваться по мере усложнения модели.
Специализированные протоколы ZK-SNARK: Чтобы решить проблемы производительности прямого подхода, исследователи разработали протоколы ZK-SNARK, которые специально оптимизированы для случаев использования машинного обучения. Одним из примеров является Halo2, используемый в криптовалюте Zcash. Halo2 включает такие функции, как таблицы поиска и пользовательские ворота, которые делают его гораздо более эффективным для обработки нелинейных операций, распространенных в моделях ML.
Фреймворки, ориентированные на ML: Основываясь на этих специализированных протоколах ZK-SNARK, сейчас существуют такие фреймворки, как EZKL и ZKML, которые предоставляют инструменты более высокого уровня для построения доказательств ZK-SNARK для моделей ML. Эти фреймворки позволяют разработчикам работать напрямую с распространенными форматами моделей ML, такими как PyTorch и TensorFlow Lite, не беспокоясь о представлении схемы на низком уровне.
Гибридные подходы: Другой вариант — объединить сильные стороны различных подходов. Например, язык HDL Circom, хотя и не так оптимизирован для ML, как Halo2, обеспечивает очень быстрое время проверки и короткие доказательства. Библиотека Circomlib-ML предоставляет некоторые предустановленные шаблоны схем для общих операций ML, которые можно использовать в качестве отправной точки.
В конечном итоге выбор подхода будет зависеть от конкретных требований приложения, сложности модели ML и компромиссов между временем генерации доказательства, размером доказательства и производительностью верификации.
Ключевой вывод заключается в том, что ZK-SNARK предоставляют мощный инструмент для проверки поведения моделей машинного обучения, особенно в сценариях, когда модели обслуживаются третьей стороной. Генерируя сжатые, неинтерактивные доказательства, потребитель модели может быть уверен в правильности предсказаний, не раскрывая конфиденциальные детали самой модели.
Ссылки
Для получения дополнительной информации о ZK-SNARK и их применениях в машинном обучении, вот некоторые полезные ресурсы:
MOOC по доказательствам с нулевым разглашением: https://zk-learning.org/
Комплексный онлайн-курс по доказательствам с нулевым разглашением и их построению.
Статья ZKCNN: https://eprint.iacr.org/2021/673
Научная статья, представляющая специализированный протокол ZK-SNARK для проверки моделей сверточных нейронных сетей (CNN).
Сообщество ZKML: https://github.com/zkml-community/awesome-zkml
Курированная коллекция ресурсов, инструментов и проектов, связанных с проверяемым машинным обучением с использованием ZK-SNARK.
Медиум Дэниела Кана: https://medium.com/@danieldkang
Сборник статей Дэниела Кана, исследователя в области ZK-SNARK и их приложений.
Статья Дэниела Кана: https://arxiv.org/abs/2210.08674
Научная статья Дэниела Кана о использовании ZK-SNARK для проверяемого машинного обучения.
