Привет! Представляю вашему вниманию перевод статей блога ZCash, в которых рассказывается о механизме работы системы доказательств с нулевым разглашением SNARKs, применяемых в криптовалюте ZCash (и не только).
Предыдущие статьи:
Часть 1: Объяснение SNARKs. Гомоморфное скрытие и слепое вычисление полиномов (перевод)
Часть 2: Объяснение SNARKs. Знание о принятом коэффициенте и достоверное слепое вычисление полиномов (перевод)
Вступление от переводчика
Начиная заключительную часть перевода, хочу сказать, что мы живем в воистину удивительное время. Время, когда высшая математика имеет возможность практически сразу быть задействованной в разработке программного обеспечения и мы можем наблюдать «в действии» результаты работы математиков технологических институтов в продвинутых вещах, основанных на блокчейнах и обменах данными.
Ну что же, не буду задерживать далее вашего внимания, давайте перейдем к самому интересному…
От вычислений к многочленам
В предыдущих статьях мы разработали определенный механизм для работы с многочленами. В этой части мы узнаем, как преобразовать те утверждения, которые мы хотим доказать и проверить, на языке многочленов. Идея использования многочленов таким образом начинается с новаторской работы 1991 года Лунда, Фортвона, Карлоффа и Нисана (Carsten Lund, Lance Fortnow, Howard Karloff — University of Chicago AND Noam Nisan — Hebrew University).
В 2013 году выходит еще одна еще одна прорывная работа Дженнаро, Джентри, Парно и Райковой (Rosario Gennaro, Craig Gentry, Bryan Parno, Mariana Raykova). Эта работа определила чрезвычайно удобные преобразования вычислений в полиномы, называемые Квадратичной Арифметической Программой (КАП — Quadratic Arithmetic Program (QAP)). КАП стали основой в современных конструкциях zk-SNARK, в частности тех, которые используются в криптовалюте ZCash.
В первой части статьи будут объяснены преобразования вычислений в КАП на примере. Даже если сосредоточиться на небольшом примере, а не на общем определении, вам придется потратить достаточно времени, чтобы понять его для начала. Поэтому будьте готовы к определенным умственным усилиям :)
Предположим, что Алиса хочет доказать Бобу, что знает, такие, что . Первый шаг — представление вычисления с в виде арифметической схемы.
Арифметические схемы
Арифметическая схема состоит из вычисляемых арифметических операций, называемых переходами, таких как сложение и умножение, с соединениями между ними. В нашем случае схема выглядит так:
Соединители снизу — это входные параметры, а верхнее выходное соединение — это результат вычисления всей схемы для данных входных параметров.
Как видно на рисунке, соединители и переходы схемы обозначены определенным образом. Эти правила будут необходимы для следующего шага, а именно перевода схемы в КАП:
- Когда один и тот же исходящий соединитель переходит в более чем один переход, считается, что он один и тот же соединитель — например, в примере.
- Принимается, что у блоков умножения есть ровно два входа, которые называются левым и правым соединителями.
- Соединители, идущие от сложения к умножения или сложению не помечаются. Считается, что входные параметры переходов сложения идут напрямую в переход умножения. В примере считается, что и являются входами
Допустимым набором присваивания для схемы, является присваивание значений для помеченных переходов, где выходное значение каждого перехода умножения является результатом произведением соответствующих входов.
Итак, для нашей схемы допустимый набор присваивания имеет вид: где и
Следуя данной терминологии, Алиса хочет доказать, что она знает допустимый набор присваивания такой, что . Следующим шагом будет перевод этого утверждение в полином с использованием КАП.
Приведение в КАП
Каждый переход умножения нужно соотнести с элементом поля: будет соотнесен с и с . Назовем точки {1, 2} нашими целевыми точками. Теперь нам нужно определить набор «левых соединительных многочленов» , «правых соединительных многочленов» и «выходные соединительные многочлены» .
Основной идеей данного действия состоит в том, чтобы значения многочленов были равны нулю во всех целевых точках, кроме целевой точки перехода умножения, в котором они задействованы.
Говоря конкретно, поскольку соответственно, левый, правый и выходной соединители , можно определить , так как многочлен равен одному в точке 1 соответствующий и равен нулю в точке 2 соответствующий .
Заметим, что и оба являются правыми входами . Поэтому аналогично определяем , так как равен одному в целевой точке 2 соответствующей и ноль в другой целевой точке.
Обозначим все остальные полиномы как нулевые многочлены.
При фиксированных значениях они используются в качестве коэффициентов для определения левых, правых и выходных «суммарных» многочленов. То есть, можно определить:
$inline$L : = Σ^5_{i = 1}c_i⋅L_i, R : = Σ^5_{i = 1}c_i⋅R_i, O : = Σ^5_{i = 1}c_i⋅O_i$inline$
Затем определяем многочлен
Теперь, после всех этих определений, можно сформировать центральное определение: является допустимым набором присваивания схемы тогда и только тогда, когда P принимает нулевое значение во всех целевых точках.
Давайте убедимся в этом, используя наш пример. Предположим, что были определены как указано выше, с некоторым . Давайте вычислим все эти многочлены в целевой точке 1:
Из всех только отлична от нуля в точке 1. Итак, . Аналогично получаем и .
Следовательно, . Аналогичный можно получить .
Другими словами, P обращается в нуль в целевых точках тогда и только тогда, когда является допустимым набором присваивания.
Теперь будем использовать следующий алгебраический факт: для многочлена P и точки , имеем тогда и только тогда, когда многочлен делит P без остатка, т.е. для некоторого многочлена H.
Определив целевой многочлен таким образом: , получаем, что T делит P тогда и только тогда, когда является допустимым набором присваивания.
Исходя из вышесказанного, определим КАП следующим образом:
Квадратичная арифметическая программа Q порядка d и размером m состоит из многочленов и целевого многочлена T порядка d.
Набор присваивания удовлетворяет Q если, определяя $inline$L : = Σ^m_{i = 1}c_i ⋅ L_i, R : = Σ^m_{i = 1}c_i⋅ R_i, O : = Σ^m_{i = 1}c_i⋅ O_i$inline$ и , существует T, который делит без остатка P.
Следуя этой терминологии, Алиса хочет доказать, что знает набор присваивания , удовлетворяющий КАП, определенной выше, где ,
Подведем итог данной части. Мы увидели, как утверждение типа «Я знаю, такие, что » можно перевести в эквивалентное утверждение о многочленах, использующих КАП. Далее мы рассмотрим эффективный протокол для подтверждения знания о допустимом наборе присваивания КАП.
Выше мы попытались дать достаточно короткий пример приведения в КАП. Также рекомендуем отличный пост Виталика Бутерина для более подробной информации о преобразовании программы в КАП.
Протокол Пиноккио
Ранее мы показали, что утверждение, которое Алиса хочет доказать Бобу, может быть преобразовано в эквивалентную форму на «языке полиномов», называемом Квадратичной Арифметической Программой (КАП).
В этой части мы расскажем, как Алиса может отправить достаточно короткое доказательство Бобу, показав, что у нее есть допустимый набор присваивания для КАП. Мы будем использовать Протокол Пиноккио, разработанный Парно, Хауэлл, Джентри и Райковой (Bryan Parno, Jon Howell, Craig Gentry, Mariana Raykova).
Как было дано выше, Алиса хочет доказать, что у нее есть допустимый набор присваивания, который обладает некоторыми дополнительными ограничениями, например . Но мы не будем учитывать это здесь и для простоты покажем, как просто доказать знание некоторого допустимого набора присваивания.
Если у Алисы есть допустимый набор присваивания, это означает, что если определить как описано выше, то существует некий многочлен H такой, что . В частности, для любого мы имеем .
Предположим теперь, что у Алисы нет допустимого набора присваивания, но она также определяет из некоторого недопустимого набора . Тогда можно быть уверенными, что T не делит P. Это означает, что для любого полинома H порядком не выше d, P и будут разными многочленами. Заметим, что P и здесь имеют порядок не выше .
Для доказательства мы воспользуемся известной леммой Шварца-Зиппеля, которая утверждает, что два различных многочлена степени не выше могут пересекаться не более в точек . Таким образом, если p намного больше вероятность того, что для случайного выбора ничтожна.
На основании этого можно создать следующий эскиз протокола, чтобы проверить, обладает ли Алиса допустимым набором присваивания:
- Алиса выбирает полиномы порядка не выше d.
- Боб выбирает случайную точку и вычисляет скрытие .
- Алиса посылает Бобу скрытие для этих полиномов в точке s, а именно .
- Боб проверяет, выполняется ли требуемое равенство в точке s. То есть он проверяет
Повторяясь снова, если у Алисы нет допустимого набора присваивания, она в итоге будет использовать полиномы, с которыми не будет выполняться требуемое равенство для большинства случайно выбранных s. Поэтому Боб с большой вероятностью отклонит ответ Алисы, независимо от выбранного s.
Давайте подумаем, есть ли у нас инструменты для реализации этого эскиза? Важным моментом является выбор Алисой полиномов, которые она будет использовать, при этом не зная s. Но это именно та проблема, которую мы решили в достоверном слепом вычислении полиномов, описанном в предыдущей статье.
Учитывая это, осталось еще четыре основных момента, которые необходимо решить, чтобы превратить этот эскиз в zk-SNARK. Два первых мы рассмотрим в рамках данной статье, а два остальных в заключительной статье.
Достоверность того, что Алиса выбирает свои полиномы, согласно набору присваивания
Важный момент: если у Алисы нет допустимого набора присваивания, это не означает, что она не может найти любые многочлены порядком не выше d, для которых . Это просто означает, что она не может найти такие многочлены, где и были «получены из набора присваивания»; а именно, что $inline$L : = Σ^m_{i = 1}c_i⋅ L_i, R : = Σ^m_{i = 1}c_i⋅ R_i, O : = Σ^m_{i = 1}c_i⋅ O_i$inline$ для набора .
Протокол выше только гарантирует, что она использует некоторые многочлены нужного порядка, но не гарантирует, что они были созданы из допустимого набора присваивания. Формальное доказательство несколько заковыристое, поэтому мы приведем примерное решение.
Давайте совместим многочлены в один многочлен F следующим образом:
Смысл умножения R на и O на в том, чтобы «не смешивать» коэффициенты в F. Коэффициенты в F соответствуют L, следующие коэффициентов соответствуют R, а последние коэффициентов соответствуют O.
Объединим полиномы в определении КАП аналогичным образом, определяя для каждого многочлен чьи первые коэффициенты являются коэффициентами , а затем коэффициенты и затем . То есть для каждого мы определяем многочлен:
Заметим, что когда мы суммируем два , то и «суммируются отдельно». Например, .
В более общем случае предположим, что у нас есть для некоторого набора . Тогда мы также получаем $inline$L = Σ^m_{i=1}c_i⋅ L_i, R = Σ^m_{i=1}c_i⋅ R_i, O = Σ^m_{i=1}c_i⋅ O_i$inline$ для тех же самых коэффициентов . Другими словами, если F является линейной комбинацией это означает, что были действительно созданы из набора.
Поэтому Боб попросит Алису доказать ему, что F является линейной комбинацией от . Это делается аналогично протоколу для достоверного вычисления:
Боб выбирает случайный , и отправляет Алисе скрытия $inline$E( β⋅ F_1(s )) , ... , E( β⋅ F_m(s) )$inline$. Затем он просит Алису отправить ему скрытие . Если ей это удается, расширенная версия Знания о Принятом Коэффициенте предполагает, что она знает, как создать F, являющуюся линейной комбинацией от .
Добавление части «нулевого разглашения» — скрытие набора присваивания
В zk-SNARK Алиса хочет скрыть всю информацию о своем наборе присваивании. Однако скрытия предоставляют некоторую информацию о наборе.
Например, с учетом некоторого другого удовлетворяющего набора присваивания Боб может вычислить соответствующие и скрытия . Если они отличаются от ответа Алисы, он может понять, что не набор присваивания Алисы.
Чтобы избежать такой утечки информации о ее наборе, Алиса скрывает свой набор, добавив «случайное Т-смещение» для каждого многочлена, т.е. выбирает случайные $inline$δ_1, δ_2, δ_3∈ F^*_p$inline$, и определяет $inline$L_z: = L + δ_1⋅ T, R_z: = R + δ_2⋅ T, O_z: = O + δ3⋅ T$inline$.
Предположим, что были получены из удовлетворяющего набора присваивания. Следовательно для некоторого многочлена H. Поскольку мы только что добавили кратное T везде, T также делит . Давайте убедимся в этом:
$inline$L_z⋅ R_z- O_z= ( L + δ_1⋅ T) ( R + δ_2⋅ T) - (O + δ_3⋅ T)$inline$ $inline$= ( L ⋅ R - O ) + L ⋅ δ_2⋅ T+ δ_1⋅ T⋅ R + δ_1δ_2⋅ T^2- δ_3$inline$ $inline$= T⋅ ( H+ L ⋅ δ_2+ δ_1⋅ R + δ_1δ_2⋅ T- δ_3)$inline$
Таким образом, определяя $inline$H_z= H+ L ⋅ δ_2+ δ_1⋅ R + δ_1δ_2⋅ T- δ_3$inline$, получим . Поэтому, если Алиса использует многочлены вместо , Боб всегда будет принимать ее ответ.
С другой стороны, эти полиномы, вычисленные в точке при условии, что (что практически всегда для всех d и s), не содержат никакой информации о допустимом наборе присваивания. Например, отлична от нуля и является случайной. Тогда является случайным значением, поэтому не будет содержать никакой информации о поскольку он «замаскирован» этим случайным значением.
Что осталось рассмотреть в финальной части?
Мы примерно показали схему протокола Пиноккио, в котором Алиса может убедить Боба в том, что она обладает допустимым набором присваивания для КАП, не раскрывая информацию об этом наборе. Но осталось еще два важных вопроса, которые необходимо решить, чтобы получить zk-SNARK:
- В схеме Бобу нужен полином H, который «поддерживает умножение». Например, ему нужно вычислить скрытие из и . Тем не менее, мы пока не рассматривали примеры H, который позволяет это сделать. Мы рассматривали только H, который поддерживает сложение и линейные комбинации.
- Также мы обсудили интерактивные протоколы между Алисой и Бобом. Однако, наша конечная цель, состоит в том, чтобы позволить Алисе отправлять неинтерактивные доказательства в одно сообщение. Эти сообщения при этом являются общедоступными. Это означает, что любой, кто увидит это «сообщение — доказательство», также может убедиться в его достоверности, а не только Боб (который предварительно взаимодействовал с Алисой).
Оба эти вопроса могут быть решены с использованием пар эллиптических кривых, которые мы обсудим в заключительной части.
Продолжение следует…
Автор: AgentRX