Привет, Хабр! Представляю вашему вниманию перевод статей блога ZCash, в которых рассказывается о механизме работы системы доказательств с нулевым разглашением SNARKs, применяемых в криптовалюте ZCash (и не только).
Предыдущая статья: Объяснение SNARKs. Гомоморфное скрытие и слепое вычисление полиномов (перевод)
В этой статье мы рассмотрим тест на принятый коэффициент и слепое вычисление полиномов, поддающихся проверке. Поехали…
В предыдущей статье мы увидели, как Алиса может слепо вычислить скрытие
ее многочлена P порядка d, в точке s принадлежащей Бобу. Мы назвали это «слепым» вычислением, так как Алиса не получает значение s в процессе вычисления.
Однако в этом протоколе что-то отсутствует. Тот факт, что Алиса может вычислить
не гарантирует, что она действительно отправит
Бобу, а не какое нибудь другое значение.
Таким образом, нам нужен способ «заставить» Алису правильно следовать протоколу. В статье мы подробно объясним, как достигнуть этого. Давайте сначала рассмотрим и объясним принцип действия основного инструмента, необходимого для этого. Мы называем его «Тест знания о коэффициенте» (Knowledge of Coefficient (KC) Test).
Как и раньше, обозначим через g генератор группы G порядка
, где дискретное логарифмирование является тяжелой задачей. Для удобства, начиная с данного места будем работать с нашей группой аддитивно, а не мультипликативно. То есть, для
обозначает сложение α раз копии g.
Для
, будем называть пару элементов
в
"
-парой", если
и
.
Тестирование происходит следующим образом.
Теперь давайте подумаем, когда Алиса может успешно ответить на вызов? Предположим, что она знает α. В этом случае она может просто выбрать любой a' из G и вычислить
, а затем вернуть новую α-пару
.
Однако, поскольку единственная информация об α содержится в выражении
и группа G имеет сложную дискретную задачу логарифмирования, мы полагаем, что Алиса не сможет найти
.
Итак, как же она может успешно ответить на запрос, не зная α?
Простой способ сделать это заключается в следующем: Алиса просто выбирает некое
и отвечает парой 
В этом случае мы имеем:

Таким образом пара
является α-парой, как и требовалось.
Обратите внимание, что если Алиса ответила, используя этот вариант, она знает, чему равно отношение a к a', То есть, она знает такой коэффициент
, чтобы
.
Знание о принятом коэффициенте (ЗПК — The Knowledge of Coefficient Assumption (KCA)) утверждает, что это всегда так:
ЗПК: Если Алиса возвращает верный ответ
на запрос Боба
то с большой вероятностью, независимо от выбора Бобом
, она знает такой коэффициент
, чтобы
.
Тест Знания и Принятый Коэффициент будут важными инструментами в следующей части статьи.
Вы можете задаться вопросом, как мы можем сформулировать ЗПК в конкретном математическом выражении? В частности, как мы сформулируем представление о том, что «Алиса знает»
в математическом определении?
Это делается примерно так: мы говорим, что помимо Алисы у нас есть другая сторона, которую мы называем Экстрактором Алисы. Экстрактор Алисы имеет доступ к внутреннему состоянию Алисы.
Теперь мы можем сформулировать ЗПК следующим образом: каждый раз, когда Алиса успешно отвечает
-парой
, Экстрактор Алисы возвращает
, такой что
.
Далее, опираясь на предыдущий материал, мы разработаем протокол для достоверного слепого вычисления полиномов, определения которым будет дано ниже. В последующих частях (и статьях) будет показано, как этот протокол можно использовать для построения SNARKs, поэтому наберитесь еще немного терпения для изучения SNARKs :).
Предположим, что, Алиса имеет многочлен P порядка d, а у Боба есть точка
, которую он выбрал случайно. Мы хотим создать протокол, который позволил бы Бобу узнать
, т.е. скрытие P в точке s, с двумя дополнительными свойствами:
Это называется проверкой слепого вычисления полинома. Протокол в предыдущей статье дал нам только первый пункт, но не второй. Чтобы получить достоверность, нам понадобится расширенная версия знания о принятом коэффициенте (ЗПК).
Свойства достоверности и конфиденциальности полезны вместе, потому что они заставляют Алису решить, какой полином P она будет использовать, не видя значения s. Это в некотором смысле обязывает Алису к «ответу полиномом», не видя «точечный запрос» s. Эта логика станет более понятной далее.
ЗПК, в том виде, который мы определили выше, звучит примерно так: если Боб дает Алисе некоторую
-пару
, а затем Алиса генерирует еще одну
-пару
, то она знает такое значение c, чтобы
. Говоря иначе, Алиса знает соотношение между a' и a.
Теперь предположим, что вместо одной Боб посылает Алисе несколько
-пар
(для одной и той же
). И теперь снова Алиса, получив эти пары, должна сгенерировать другие другие
-пары
. Важно, что Алиса должна это сделать, при этом она не знает значение
.
Как было описано выше, Алисы может создать
-пару простым способом. Для этого нужно взять одну из пар
, полученную от Боба и умножить оба элемента на некоторый
. Если
была
-парой, то
тоже будет
-парой. Но может ли Алиса сгенерировать
-пары для большего количества полученных
-пар? И возможно ли получить новую
-пару, используя сразу несколько полученных
-пар?
Ответ: Да. Например, Алиса может выбрать два значения
и вычислить пару
. Простые преобразования показывают, что для любой
, отличной от нуля, это тоже является
-парой:

В более общем случае Алиса может взять любую линейную комбинацию полученных d пар. Для этого нужно выбрать любые
и определить
.
Обратите внимание, что если Алиса использует эту стратегию для генерации ее
-пар, то она будет знать некоторую линейную зависимость между
и
. То есть она знает
такие, что
.
Расширенное ЗПК утверждает, по сути, что это единственный способ, которым Алиса может генерировать
-пару. Таким образом, когда она успешна сгенерирована, Алиса будет знать линейную зависимость между
и
. Более формально предположим, что G представляет собой группу размера p с генератором g, описанные аддитивно в начале статьи. Знание о принятом коэффициенте порядка d (d-ЗПК) в G можно записать следующим образом:
d-ЗПК: Предположим, что Боб выбирает случайные
и
, и отправляет Алисе
-пары
. Предположим, что затем Алиса отвечает другой
-парой
. Тогда, с большой вероятностью, Алиса знает
такие, что
.
Заметим, что в
Боб не посылает случайный набор
-пар, а посылает набор с определенной «полиномиальной структурой». Пользу этого мы увидим в приведенном ниже протоколе.
Предположим, что наше ГС (гомоморфное скрытие) является отображением
для генератора g из G, описанного выше.
Для простоты мы представляем протокол для этого конкретного E:
Во-первых, заметим, что полученные коэффициенты
,
являются линейной комбинацией
и
, а
является линейной комбинацией
. Таким образом, аналогично протоколу в предыдущей статье, Алиса действительно может вычислить эти значения из сообщений Боба для полинома P, который она знает.
Во-вторых, согласно d-ЗПК, если Алиса посылает
такие, что
, то почти наверняка она знает такие
, что
. В этом случае
для многочлена
известного Алисе. Другими словами, вероятность того, что Боб примет ответ на шаге 3 и при этом Алиса не знает такого многочлена P является ничтожной.
Резюмируя все это, используя d-ЗПК, мы разработали протокол для достоверного слепого вычисления полиномов. В следующих статьях мы увидим, как этот механизм используется в конструкциях SNARK.
Следующая статья: Объяснение SNARKs. От вычислений к многочленам, протокол Пиноккио и сопряжение эллиптических кривых (перевод)
Предыдущая статья: Объяснение SNARKs. Гомоморфное скрытие и слепое вычисление полиномов (перевод)
В этой статье мы рассмотрим тест на принятый коэффициент и слепое вычисление полиномов, поддающихся проверке. Поехали…
В предыдущей статье мы увидели, как Алиса может слепо вычислить скрытие
Однако в этом протоколе что-то отсутствует. Тот факт, что Алиса может вычислить
Таким образом, нам нужен способ «заставить» Алису правильно следовать протоколу. В статье мы подробно объясним, как достигнуть этого. Давайте сначала рассмотрим и объясним принцип действия основного инструмента, необходимого для этого. Мы называем его «Тест знания о коэффициенте» (Knowledge of Coefficient (KC) Test).
Как и раньше, обозначим через g генератор группы G порядка
Тест знания о коэффициенте
Для
обозначает ненулевые элементы
. Это то же самое, что и
описанные в предыдущей статье.
Тестирование происходит следующим образом.
- Боб выбирает случайное число
и число
. Он вычисляет
- Он посылает Алисе «запрос» в виде пары
. Заметим, что
является α-парой.
- Теперь Алиса должна ответить на запрос другой парой
. Это также α-пара.
- Боб принимает ответ Алисы, только если
действительно является α-парой (поскольку он знает α, он может проверить, что
).
Теперь давайте подумаем, когда Алиса может успешно ответить на вызов? Предположим, что она знает α. В этом случае она может просто выбрать любой a' из G и вычислить
Однако, поскольку единственная информация об α содержится в выражении
Итак, как же она может успешно ответить на запрос, не зная α?
Простой способ сделать это заключается в следующем: Алиса просто выбирает некое
В этом случае мы имеем:
Таким образом пара
Обратите внимание, что если Алиса ответила, используя этот вариант, она знает, чему равно отношение a к a', То есть, она знает такой коэффициент
Знание о принятом коэффициенте (ЗПК — The Knowledge of Coefficient Assumption (KCA)) утверждает, что это всегда так:
ЗПК: Если Алиса возвращает верный ответ
В литературе это обычно называется «знанием о принятой экспоненте», так как традиционно оно использовалось для мультипликативных групп.
Тест Знания и Принятый Коэффициент будут важными инструментами в следующей части статьи.
Что означает «Алиса знает»?
Вы можете задаться вопросом, как мы можем сформулировать ЗПК в конкретном математическом выражении? В частности, как мы сформулируем представление о том, что «Алиса знает»
Это делается примерно так: мы говорим, что помимо Алисы у нас есть другая сторона, которую мы называем Экстрактором Алисы. Экстрактор Алисы имеет доступ к внутреннему состоянию Алисы.
Теперь мы можем сформулировать ЗПК следующим образом: каждый раз, когда Алиса успешно отвечает
Полное формальное определение ЗПК определяет Экстрактор «несколько слабее» и вместо этого он сигнализирует о вероятности успешного ответа Алисы, а не выводит, который является малозначительным в данном случае
Как сделать слепое вычисление полиномов поддающихся проверке
Далее, опираясь на предыдущий материал, мы разработаем протокол для достоверного слепого вычисления полиномов, определения которым будет дано ниже. В последующих частях (и статьях) будет показано, как этот протокол можно использовать для построения SNARKs, поэтому наберитесь еще немного терпения для изучения SNARKs :).
Предположим, что, Алиса имеет многочлен P порядка d, а у Боба есть точка
- Конфиденциальность: Алиса не узнает s, а Боб не узнает P.
- Достоверность: Вероятность того, что Алиса посылает значение
не для многочлена P порядка d, который известен ей, а при этом Боб его принимает — ничтожно мала.
Это называется проверкой слепого вычисления полинома. Протокол в предыдущей статье дал нам только первый пункт, но не второй. Чтобы получить достоверность, нам понадобится расширенная версия знания о принятом коэффициенте (ЗПК).
Свойства достоверности и конфиденциальности полезны вместе, потому что они заставляют Алису решить, какой полином P она будет использовать, не видя значения s. Это в некотором смысле обязывает Алису к «ответу полиномом», не видя «точечный запрос» s. Эта логика станет более понятной далее.
В полном формальном доказательстве некоторые вещи описаны более тонко. Например то, что Алиса все же получает некую информацию об s, прежде чем принять решение о ее полиноме P. Например она получает скрытия
Расширенный ЗПК
ЗПК, в том виде, который мы определили выше, звучит примерно так: если Боб дает Алисе некоторую
Теперь предположим, что вместо одной Боб посылает Алисе несколько
Как было описано выше, Алисы может создать
Ответ: Да. Например, Алиса может выбрать два значения
В более общем случае Алиса может взять любую линейную комбинацию полученных d пар. Для этого нужно выбрать любые
Обратите внимание, что если Алиса использует эту стратегию для генерации ее
Расширенное ЗПК утверждает, по сути, что это единственный способ, которым Алиса может генерировать
d-ЗПК: Предположим, что Боб выбирает случайные
D-KCA (d-ЗПК) была представлена в журнале Йенса Грота.
Заметим, что в
Протокол достоверного слепого вычисления
Предположим, что наше ГС (гомоморфное скрытие) является отображением
Для простоты мы представляем протокол для этого конкретного E:
- Боб выбирает случайную
, и отправляет Алисе скрытия
(для
), а также скрытия
(для
).
- Алиса вычисляет
и
, используя элементы, отправленные на первом этапе, и отправляет их Бобу.
- Боб проверяет, что
, и принимает ответ тогда и только тогда, когда это равенство выполняется.
Во-первых, заметим, что полученные коэффициенты
Во-вторых, согласно d-ЗПК, если Алиса посылает
Резюмируя все это, используя d-ЗПК, мы разработали протокол для достоверного слепого вычисления полиномов. В следующих статьях мы увидим, как этот механизм используется в конструкциях SNARK.
Следующая статья: Объяснение SNARKs. От вычислений к многочленам, протокол Пиноккио и сопряжение эллиптических кривых (перевод)