Введение
Доказательство истинности без раскрытия других данных
В криптографии доказательство с нулевым разглашением, или протокол с нулевым разглашением, — это метод, с помощью которого одна сторона (доказывающий) может доказать другой стороне (проверяющий), что данное утверждение истинно, не передавая при этом проверяющему никакой информации, кроме самого факта истинности утверждения. Интуиция, лежащая в основе доказательств с нулевым разглашением, заключается в том, что доказать владение определенной информацией, просто раскрыв её, тривиально; задача состоит в том, чтобы доказать это владение, не раскрывая саму информацию или какой-либо её аспект. Учитывая, что доказательство какого-либо утверждения должно быть возможно только при наличии определенной секретной информации, связанной с этим утверждением, проверяющий, даже убедившись в истинности утверждения, всё равно не должен иметь возможности доказать это утверждение третьим лицам. В стандартной модели нетривиальные доказательства с нулевым разглашением (то есть для языков, выходящих за рамки BPP) требуют взаимодействия между доказывающим и проверяющим. Это взаимодействие обычно включает в себя выбор проверяющим одного или нескольких случайных запросов; случайное происхождение этих запросов, наряду с успешными ответами доказывающего на них, в совокупности убеждают проверяющего в том, что доказывающий действительно обладает заявленными знаниями. Если бы взаимодействия не было, то проверяющий, получив протокол выполнения – то есть единственное сообщение доказывающего, – мог бы повторно использовать этот протокол для третьей стороны, тем самым убедив её в том, что и проверяющий обладает секретной информацией. В моделях случайной строки и случайного оракула существуют неинтерактивные доказательства с нулевым разглашением, благодаря эвристике Фиата — Шамира. На практике эти доказательства опираются на вычислительные предположения (обычно на стойкость к коллизиям криптографической хеш-функции).
Пещера Али Бабы
Существует хорошо известная история, иллюстрирующая фундаментальные идеи доказательств с нулевым разглашением, впервые опубликованная в 1990 году Жаном Жаком Квискуатером и другими в их статье "Как объяснить протоколы нулевого разглашения своим детям". В этой истории две стороны – Пегги, доказывающая утверждение, и Виктор, проверяющий его. Пегги обнаружила секретное слово, открывающее волшебную дверь в пещере, имеющей форму кольца. Вход в пещеру находится с одной стороны, а волшебная дверь блокирует противоположную. Виктор хочет узнать, знает ли Пегги секретное слово, но Пегги, дорожащая своей приватностью, не желает раскрывать свои знания (секретное слово) Виктору или кому-либо еще. Они обозначают левый и правый пути от входа как A и B. Сначала Виктор ждет снаружи, пока Пегги входит в пещеру, выбирая путь A или B, при этом Виктор не должен видеть, какой путь она выбрала. Затем Виктор входит в пещеру и кричит название пути, по которому Пегги должна вернуться – либо A, либо B, выбранный случайным образом. Если Пегги действительно знает секретное слово, это просто: она открывает дверь (при необходимости) и возвращается по указанному пути. Если же она не знает слова, она сможет вернуться по названному пути только в том случае, если Виктор назовет тот же путь, по которому она вошла. Поскольку Виктор выбирает A или B случайно, у Пегги будет 50% шанс угадать правильно. Если они повторят этот эксперимент много раз, например, 20 раз подряд, вероятность успешного предсказания всех запросов Виктора снизится до 1 к 220, или 9.56 x 10−7. Таким образом, если Пегги последовательно появляется на выходе, названном Виктором, он может заключить, что с высокой вероятностью Пегги действительно знает секретное слово. Стоит отметить, что даже если Виктор использует скрытую камеру для записи всего происходящего, запись покажет только Виктора, кричащего "A!", и Пегги, появляющуюся в точке A, или Виктора, кричащего "B!", и Пегги, появляющуюся в точке B. Подделать такую запись будет тривиально для любых двух сговорившихся людей (достаточно, чтобы Пегги и Виктор заранее договорились о последовательности A и B, которую будет называть Виктор). Такая запись вряд ли убедит кого-либо, кроме участников эксперимента. Даже наблюдатель, присутствовавший при эксперименте, может остаться в сомнении, поскольку Виктор и Пегги могли инсценировать все происходящее. Более того, если Виктор будет выбирать A и B, подбрасывая монету на камеру, протокол потеряет свойство нулевого разглашения: запись подбрасывания монеты, вероятно, убедит любого зрителя. Таким образом, хотя это и не раскроет секретное слово Виктору, это позволит ему убедить окружающих в том, что Пегги обладает этими знаниями, вопреки ее желаниям. Однако цифровая криптография обычно использует генераторы псевдослучайных чисел для "подбрасывания монеты", что аналогично монете с фиксированной последовательностью орлов и решек, известной только ее владельцу. Если бы монета Виктора работала таким образом, Виктор и Пегги снова могли бы подделать эксперимент, поэтому использование генератора псевдослучайных чисел не раскроет знание Пегги миру так же, как подбрасывание настоящей монеты. Важно отметить, что Пегги может доказать Виктору знание секретного слова, не раскрывая его, за одно испытание. Если Виктор и Пегги вместе подойдут ко входу в пещеру, Виктор сможет увидеть, как Пегги входит через A и выходит через B. Это однозначно докажет, что Пегги знает секретное слово, не раскрывая его Виктору. Однако такое доказательство может быть увидено третьей стороной или записано Виктором, и оно будет убедительным для любого. Иными словами, Пегги не сможет опровергнуть такое доказательство, утверждая о сговоре с Виктором, и, следовательно, она больше не будет контролировать, кто знает о ее знании.
Два шара и его цветобелый друг
Представьте, что ваш друг "Виктор" страдает от красно-зеленой цветовой слепоты (а вы нет) и у вас есть два шара: один красный и один зеленый, но в остальном идентичные. Для Виктора шары кажутся совершенно одинаковыми. Виктор сомневается, что шары действительно различимы. Вы хотите доказать Виктору, что шары на самом деле разного цвета, но ничего больше. В частности, вы не хотите раскрывать, какой шар красный, а какой зеленый. Вот система доказательства. Вы даете два шара Виктору, и он прячет их за спиной. Затем он берет один из шаров и выносит его из-за спины, показывая его. После этого он снова прячет его за спиной и выбирает показать только один из двух шаров, выбирая случайным образом один из двух с равной вероятностью. Он спросит вас: "Я поменял шар местами?". Затем вся эта процедура повторяется столько раз, сколько необходимо. Наблюдая за цветами шаров, вы, конечно, сможете с уверенностью сказать, поменял он их местами или нет. С другой стороны, если бы шары были одного цвета и, следовательно, неразличимы, то невозможно было бы угадать правильно с вероятностью выше 50%. Поскольку вероятность случайного угадывания каждого случая переключения/отсутствия переключения составляет 50%, вероятность случайного успеха во всех случаях переключения/отсутствия переключения стремится к нулю ("корректность"). Если вы с другом повторите это "доказательство" несколько раз (например, 20 раз), ваш друг должен убедиться ("полнота"), что шары действительно разного цвета. Приведенное выше доказательство является доказательством с нулевым разглашением, потому что ваш друг никогда не узнает, какой шар зеленый, а какой красный; более того, он не получает никаких знаний о том, как различать шары.
Где Уолдо?
Один из известных примеров доказательства с нулевым разглашением – пример «Где Уолдо?». В этом примере доказывающий хочет убедить проверяющего в том, что он знает, где находится Уолдо на странице в книге «Где Уолдо?», не раскрывая его местоположение проверяющему. Доказывающий начинает с большой чёрной доски с небольшим отверстием размером с Уолдо. Доска в два раза больше книги по обеим сторонам, поэтому проверяющий не может видеть, куда именно на странице доказывающий её помещает. Затем доказывающий накладывает доску на страницу так, чтобы Уолдо оказался в отверстии. Доказательства с нулевым разглашением не являются доказательствами в математическом смысле этого термина, поскольку существует некоторая небольшая вероятность ошибки обоснованности, что нечестный доказывающий сможет убедить проверяющего в ложном утверждении. Иными словами, доказательства с нулевым разглашением – это вероятностные «доказательства», а не детерминированные доказательства. Однако существуют методы, позволяющие уменьшить ошибку обоснованности до пренебрежимо малых значений (например, правильное предположение по сотне или тысяче бинарных решений имеет ошибку обоснованности 1 / 2^{100} или 1/ 2^{1000} соответственно. По мере увеличения количества битов ошибка обоснованности уменьшается до нуля). Формальное определение нулевого разглашения должно использовать некоторую вычислительную модель, наиболее распространённой из которых является машина Тьюринга. Пусть P, V и S будут машинами Тьюринга. Интерактивная система доказательств для языка L является системой с нулевым разглашением, если для любого вероятностного полиномиального по времени (PPT) проверяющего существует PPT-симулятор S, такой что: где является записью взаимодействий между и . Доказывающий P моделируется как обладающий неограниченной вычислительной мощностью (на практике P обычно является вероятностной машиной Тьюринга). Интуитивно, определение гласит, что интерактивная система доказательств является системой с нулевым разглашением, если для любого проверяющего существует эффективный симулятор S (зависящий от ), который может воспроизвести разговор между P и на любом заданном входе. Вспомогательная строка z в определении играет роль «априорных знаний» (включая случайные биты). Определение подразумевает, что не может использовать какую-либо строку априорных знаний z для извлечения информации из его разговора с P, поскольку если S также получает эти априорные знания, то он может воспроизвести разговор между и P так же, как и раньше. Приведённое определение относится к совершенному нулевому разглашению. Вычислительное нулевое разглашение достигается, если требуется, чтобы представления проверяющего и симулятора были вычислительно неразличимы, учитывая вспомогательную строку.
where is a record of the interactions between and The prover P is modeled as having unlimited computation power (in practice, P usually is a probabilistic Turing machine). Intuitively, the definition states that an interactive proof system is zero knowledge if for any verifier there exists an efficient simulator S (depending on ) that can reproduce the conversation between P and on any given input. The auxiliary string z in the definition plays the role of "prior knowledge" (including the random coins of ). The definition implies that cannot use any prior knowledge string z to mine information out of its conversation with P, because if S is also given this prior knowledge then it can reproduce the conversation between and P just as before. The definition given is that of perfect zero knowledge. Computational zero knowledge is obtained by requiring that the views of the verifier and the simulator are only computationally indistinguishable, given the auxiliary string.
Дискретный лог даного значения
Мы можем применить эти идеи к более реалистичным криптографическим приложениям. Пегги хочет доказать Виктору, что она знает дискретный логарифм заданного значения в заданной группе. Например, если дано значение *x*, большое простое число *p* и генератор *g*, она хочет доказать, что она знает такое значение *k*, что *g<sup>k</sup> = x*, не раскрывая *k*. Действительно, знание *k* может быть использовано в качестве доказательства идентичности, поскольку Пегги могла обладать этим знанием, потому что она выбрала случайное значение *s*, которое она никому не раскрывает, вычислила *g<sup>s</sup>* и распространила значение *g<sup>s</sup>* среди всех потенциальных верификаторов, так что в более позднее время доказательство знания *k* эквивалентно доказательству идентичности как Пегги. Протокол проходит следующим образом: в каждом раунде Пегги генерирует случайное число *r*, вычисляет *g<sup>r</sup>* и сообщает это значение Виктору. После получения *g<sup>r</sup>*, Виктор случайным образом выдает один из следующих двух запросов: он либо запрашивает, чтобы Пегги раскрыла значение *r*, либо значение *k*.
Виктор может проверить любой ответ; если он запросил *r*, он может затем вычислить *g<sup>r</sup>* и проверить, что оно совпадает с полученным значением. Если он запросил *k*, он может проверить, что оно согласуется с этим, вычислив *g<sup>k</sup>* и проверив, что оно совпадает с *x*. Если Пегги действительно знает значение *k*, она может ответить на любой из возможных вызовов Виктора. Если Пегги знала или могла догадаться, какой вызов Виктор собирается выдать, то она могла бы легко обмануть и убедить Виктора, что она знает *k*, когда она этого не делает: если она знает, что Виктор собирается запросить *r*, то она поступает нормально: она выбирает *r*, вычисляет *g<sup>r</sup>* и раскрывает его Виктору; она сможет ответить на вызов Виктора. С другой стороны, если она знает, что Виктор запросит *k*, то она выбирает случайное значение *r*, вычисляет *g<sup>r</sup>* и раскрывает его Виктору как значение *x*, которое он ожидает. Когда Виктор бросает ей вызов, чтобы она раскрыла *k*, она раскрывает *k*, для которого Виктор проверит согласованность, так как он в свою очередь вычислит *g<sup>k</sup>*, которое совпадает с *x*, поскольку Пегги умножила *g<sup>r</sup>* на модульную мультипликативную обратную величину *g<sup>r</sup>* по модулю *p*. Однако, если в любом из вышеуказанных сценариев Виктор выдвигает вызов, отличный от ожидаемого и для которого она сфабриковала результат, то она не сможет ответить на вызов, исходя из предположения о невозможности решения задачи дискретного логарифмирования для этой группы. Если она выбрала *r* и раскрыла *g<sup>r</sup>*, то она не сможет произвести действительное *k*, которое пройдет проверку Виктора, учитывая, что она не знает *k*. И если она выбрала значение *r*, которое представляется как *k*, то она должна будет ответить дискретным логарифмом значения *x*, которое она раскрыла, но Пегги не знает этого дискретного логарифма, поскольку значение *g<sup>r</sup>*, которое она раскрыла, было получено посредством арифметики с известными значениями, а не путем вычисления степени с известным показателем. Таким образом, вероятность того, что мошенник сможет успешно обмануть в одном раунде, составляет 0,5. Выполняя достаточно большое количество раундов, вероятность успеха мошеннического пробёра может быть сделана произвольно низкой. Чтобы показать, что вышеуказанное интерактивное доказательство дает нулевое знание, кроме того, что Пегги знает значение *k*, можно использовать аналогичные аргументы, используемые в вышеуказанном доказательстве полноты и корректности. В частности, симулятор, скажем, Саймон, который не знает *k*, может имитировать обмен между Пегги и Виктором следующей процедурой. Во-первых, Саймон случайно подбрасывает монету. Если результат – "орел", он выбирает случайное значение *r*, вычисляет *g<sup>r</sup>* и раскрывает его как будто это сообщение от Пегги к Виктору. Затем Саймон также выводит сообщение "запросить значение *k*" как если бы оно было отправлено от Виктора Пегги, и сразу же выводит значение *k* как если бы оно было отправлено от Пегги Виктору. Один раунд завершен. С другой стороны, если результатом подбрасывания монеты является "решка", Саймон выбирает случайное число *r*, вычисляет *g<sup>r</sup>* и раскрывает его как будто это сообщение от Пегги к Виктору. Тогда Саймон выводит "запросить значение *r*" как если бы это было сообщение от Виктора Пегги. Наконец, Саймон выводит значение *r* как если бы это был ответ Пегги обратно Виктору. Один раунд завершен. По предыдущим аргументам при доказательстве полноты и корректности, интерактивная коммуникация, имитированная Саймоном, неотличима от истинной переписки между Пегги и Виктором. Таким образом, свойство нулевого знания гарантировано.
However, if in either one of the above scenarios Victor issues a challenge other than the one she was expecting and for which she manufactured the result, then she will be unable to respond to the challenge under the assumption of infeasibility of solving the discrete log for this group. If she picked and disclosed , then she will be unable to produce a valid that would pass Victor's verification, given that she does not know And if she picked a value that poses as , then she would have to respond with the discrete log of the value that she disclosed but Peggy does not know this discrete log, since the value C she disclosed was obtained through arithmetic with known values, and not by computing a power with a known exponent. Thus, a cheating prover has a 0.5 probability of successfully cheating in one round. By executing a large enough number of rounds, the probability of a cheating prover succeeding can be made arbitrarily low. To show that the above interactive proof gives zero knowledge other than the fact that Peggy knows the value, one can use similar arguments as used in the above proof of completeness and soundness. Specifically, a simulator, say Simon, who does not know the value, can simulate the exchange between Peggy and Victor by the following procedure. Firstly, Simon randomly flips a fair coin. If the result is "head", he picks a random value , computes , and discloses as if it is a message from Peggy to Victor. Then Simon also outputs a message "request the value of " as if it is sent from Victor to Peggy, and immediately outputs the value of as if it is sent from Peggy to Victor. A single round is complete. On the other hand, if the coin flipping result is "tail", Simon picks a random number , computes , and discloses as if it is a message from Peggy to Victor. Then Simon outputs "request the value of " as if it is a message from Victor to Peggy. Finally, Simon outputs the value of as if it is the response from Peggy back to Victor. A single round is complete. By the previous arguments when proving the completeness and soundness, the interactive communication simulated by Simon is indistinguishable from the true correspondence between Peggy and Victor. The zero knowledge property is thus guaranteed.
Краткое резюме
Пегги доказывает, что знает значение x (например, её пароль). Пегги и Виктор договариваются о простом числе и генераторе мультипликативной группы поля. Пегги вычисляет значение и передает его Виктору. Следующие два шага повторяются (большое) количество раз. Пегги многократно выбирает случайное значение и вычисляет. Она передает значение Виктору. Виктор просит Пегги вычислить и передать либо значение, либо значение. В первом случае Виктор проверяет. Во втором случае он проверяет. Значение можно рассматривать как зашифрованное значение. Если действительно случайно и равномерно распределено между нулем и , это не раскрывает никакой информации о (см. одноразовый шифр).
The value can be seen as the encrypted value of If is truly random, equally distributed between zero and , this does not leak any information about (see one time pad).
Полная информация
Если Пегги действительно знает гамильтонов цикл в G, она может легко выполнить требование Виктора, предоставив либо изоморфизм графа, отображающий G в H (который она пообещала найти на первом шаге), либо гамильтонов цикл в H (который она может построить, применив этот изоморфизм к циклу в G).
Нулевое знание
Ответы Пегги не раскрывают исходный гамильтонов цикл в графе . В каждом раунде Виктор узнает только об изоморфизме графа с графом или о наличии гамильтонова цикла в графе . Ему нужны оба ответа в одном раунде, чтобы обнаружить цикл в графе , поэтому информация остается неизвестной, пока Пегги может генерировать различные графы в каждом раунде. Если Пегги не знает о гамильтоновом цикле в графе , но каким-то образом заранее знает, что именно Виктор попросит показать в каждом раунде, она может обмануть. Например, если Пегги заранее знает, что Виктор попросит показать гамильтонов цикл, она может сгенерировать гамильтонов цикл для другого, не связанного графа. Аналогично, если Пегги заранее знает, что Виктор попросит показать изоморфизм, она может просто сгенерировать изоморфный граф (в котором она также не знает гамильтонов цикл). Виктор может самостоятельно выполнить протокол (без Пегги), поскольку он знает, что будет запрашивать. Следовательно, Виктор не получает никакой информации о гамильтоновом цикле в графе из информации, раскрываемой в каждом раунде.
Здоровье
Если Пегги не знает информацию, она может угадать, какой вопрос задаст Виктор, и сгенерировать либо граф, изоморфный исходному, либо гамильтонов цикл для некоторого другого графа, но поскольку она не знает гамильтонов цикл для исходного графа, она не может сделать и то, и другое. С этой попыткой угадать, её шанс обмануть Виктора равен 1/2^r, где r – число раундов. Для всех практических целей, победить доказательство с нулевым разглашением таким образом при разумном количестве раундов невыполнимо.
Типы с нулевым знанием
Доказательство знания: знание скрыто в показателе степени, как в примере, показанном выше. Криптография на основе пар: имея и , не зная и , можно вычислить . Доказательство, неразличимое по свидетельству: проверяющие не могут определить, какой свидетель использовался для генерации доказательства. Многосторонние вычисления: несмотря на то, что каждая сторона сохраняет свой секрет, они совместно вычисляют результат. Кольцевая подпись: посторонние не могут узнать, какой ключ использовался для подписи.
Witness indistinguishable proof: verifiers cannot know which witness is used for producing the proof. Multi party computation: while each party can keep their respective secret, they together produce a result. Ring signature: outsiders have no idea which key is used for signing.
Системы аутентификации
Исследования в области доказательств с нулевым разглашением были мотивированы системами аутентификации, в которых одна сторона хочет доказать свою личность другой стороне, используя некоторую секретную информацию (например, пароль), но не желает, чтобы другая сторона узнала что-либо об этой тайне. Это называется "доказательством знания с нулевым разглашением". Однако пароль, как правило, слишком короткий или недостаточно случайный для использования во многих схемах доказательств знания с нулевым разглашением. Доказательство пароля с нулевым разглашением – это особый вид доказательства знания с нулевым разглашением, предназначенный для работы с ограниченным размером паролей. В апреле 2015 года был представлен протокол "один из многих" (протокол Sigma).
Этическое поведение
Одним из применений доказательств с нулевым разглашением в криптографических протоколах является обеспечение честного поведения при сохранении конфиденциальности. По сути, идея заключается в том, чтобы заставить пользователя доказать с помощью доказательства с нулевым разглашением, что его действия соответствуют протоколу. Благодаря свойству надёжности мы знаем, что пользователь должен действительно действовать честно, чтобы иметь возможность предоставить корректное доказательство. Благодаря свойству нулевого разглашения мы знаем, что пользователь не раскрывает конфиденциальную информацию о своих секретах в процессе предоставления доказательства.
Ядерное разоружение
В 2016 году в Принстонской лаборатории физики плазмы и Принстонском университете продемонстрировали технологию, которая может найти применение в будущих переговорах о ядерном разоружении. Она позволит инспекторам удостовериться в том, является ли объект ядерным оружием, не фиксируя, не передавая и не раскрывая его внутреннее устройство, которое может быть засекречено.
Блокчейны
Доказательства с нулевым разглашением были применены в протоколах Zerocoin и Zerocash, что привело к появлению криптовалют Zcoin и Zcash в 2016 году. Zerocoin имеет встроенную модель смешивания, которая не полагается на доверие к каким-либо узлам сети или централизованным сервисам смешивания для обеспечения анонимности. Протокол Zerocash использует аналогичную модель (вариант, известный как неинтерактивное доказательство с нулевым разглашением), но в отличие от Zerocoin, он способен скрывать сумму транзакции. Ввиду значительных ограничений данных о транзакциях в сети Zerocash, Zerocash менее подвержен атакам по времени раскрытия конфиденциальности по сравнению с Zerocoin. Однако этот дополнительный уровень конфиденциальности может привести к потенциально незамеченной гиперинфляции предложения Zerocash, поскольку мошеннические монеты невозможно отследить. В 2018 году были представлены Bulletproofs. Bulletproofs – это усовершенствование неинтерактивных доказательств с нулевым разглашением, не требующее доверенной настройки. Впоследствии они были реализованы в протоколе Mimblewimble (на котором основаны криптовалюты Grin и Beam) и в криптовалюте Monero. В 2019 году Firo внедрила протокол Sigma, являющийся усовершенствованием протокола Zerocoin, не требующим доверенной настройки. В том же году Firo представила протокол Lelantus, усовершенствование протокола Sigma, который скрывает происхождение и сумму транзакции.
Децентрализованные идентификаторы
Доказательства с нулевым разглашением по своей сути способны повысить конфиденциальность в системах обмена идентификационными данными, которые уязвимы к утечкам данных и краже личных данных. При интеграции с децентрализованной системой идентификаторов, доказательства с нулевым разглашением добавляют дополнительный уровень шифрования к DID-документам.