Что такое Zero-Knowledge Proof
Представьте такую ситуацию: вам нужно сообщить другому человеку о том, что вы знаете определенную информацию, но при этом вы не хотите эту информацию разглашать. Иными словами, другой человек должен убедиться, в вашей осведомленности, не получая при этом самих данных.
На первый взгляд может показаться, что это неразрешимая ситуация, но на самом деле все не так.
В криптографии доказательством с нулевым разглашением (Zero-Knowledge Proof или ZKP) обычно называют некий протокол, который позволяет одной стороне (доказывающему) подтвердить наличие определенной информации другой стороне (проверяющему). При этом содержание информации остается скрытым от проверяющего.
Обычно, в повседневных задачах, когда одна сторона (пусть это будет сторона «А») старается убедить другую сторону (пусть это будет сторона «Б») в том, что она знает определенную информацию (допустим некий пароль — пусть это будет число «31102008»), стороне «А» придется сообщить стороне «Б» пароль «31102008». Таким образом сторона «Б» получит доступ к паролю — это тривиальное решение для случаев, когда сторона «А» может делиться паролем с другими.
Если же мы вводим обязательное условие — сторона «А» не может раскрывать этот пароль стороне «Б», — и при этом сторона «Б» должна получить достаточно сведений о том, что сторона «А» знает корректный пароль, тогда мы говорим о концепции доказательства с нулевым разглашением. Когда же мы предлагаем конкретный способ реализации подобной системы, мы говорим о криптографическом протоколе.
Абстрактный пример решения
Существует несколько абстрактных примеров, которые иллюстрируют принцип работы доказательства с нулевым разглашением.
Допустим, у вас есть картинка — прямоугольное изображение, на котором представлены символы единицы, среди которых можно встретить букву «l». Вы знаете, где именно находится буква «l» и вам нужно убедить в том же самом другого человека, — но не раскрывая, где именно она находится. Вы могли бы наложить сверху на первое изображение другое изображение серого цвета и большей площадью с небольшим «окном» — областью, через которое видно символ «l». Визуально это выглядело бы вот так:
Вы могли сдвинуть верхнее изображение под серым фоном влево или вправо, вверх или вниз, потому проверяющему будет сложно понять, где именно находится буква «l», — но он сможет убедиться, что вы знаете положение скрытого символа, если через пустую область действительно покажете букву «l».
Чтобы убедиться, что вы не «угадали» ее местоположение случайным образом, проверяющий может несколько раз запросить доказательство знания расположения буквы. Он также может попросить использовать новый серый фон с «окном» в другом месте. Если вы в роли доказывающего демонстрируете букву «l» корректно во всех случаях, вероятность обмана с вашей стороны в глазах проверяющего снижается.
Стоит еще раз подчеркнуть: это лишь упрощенный пример решения вопроса о доказательстве владения информацией без разглашения информации. Часто доказать истинность информации в протоколе с нулевым разглашением получается за несколько итераций, то есть доказательство может носить вероятностный характер.
Пещера нулевой вероятности
Для иллюстрации в этом случае обычно приводят пример с «Пещерой нулевой вероятности» или «Странной пещеры Али-бабы», изначально представленной Жан-Жаком Кискатером (Jean-Jacues Quisquater) и другими криптографами в 1990 году в статье о криптографии для детей. Она звучит примерно так:
«Одного старца по имени Али-баба из Багдада постоянно обворовывают разбойники. Однажды он проследил за разбойником и увидел, что тот убегает в пещеру. На входе в пещеру была развилка — направо и налево. Куда бы не пошел Али-баба, везде он встречал тупик. Тогда как-то раз ночью он спрятался в одном тупике и проследил за разбойником. Тот подбежал к стене тупика, произнес магическую фразу "Сезам откройся!" и стена сдвинулась. Али-баба понял, что оба прохода — и левый, и правый — соединены друг с другом. Али-баба изучал магию и смог поменять магическую фразу на другую. Разбойников в итоге поймали. Но когда у Али-бабы спросили, действительно ли он знает магическую фразу, он сказал, что не будет никому говорить, но люди могут проверить, действительно ли он ее знает. Для этого герой ушел в пещеру, а люди снаружи стали кричать ему: "Али-баба, выходи справа!", затем шли к развилке и видели, что он выходил со стороны правой развилки. А когда ему аналогично кричали: "Выходи слева!", он выходил слева. Когда он вышел десять раз подряд с нужной стороны, люди убедились, что он действительно знает пароль».
«А» — вход в пещеру, «B» — развилка. Красным отмечена стена, объединяющая левый и правый («C» и «D») проходы.
Несмотря на форму подачи, «Пещера нулевой вероятности» наглядно демонстрирует доказательство с нулевым разглашением. Кстати, а где может встречаться протокол?
Передача данных
Фактически, концепция доказательства с нулевым разглашением может быть реализована для разных систем, где требуется обеспечить безопасность информации. Это может быть защита персональных данных или способ верификации в системе без разглашения дополнительной информации. То есть доказательство с нулевым разглашением способно применяться в банковской системе или, к примеру, в криптовалютах.
Интерактивные и неинтерактивные доказательства
Остановимся на самом важном вопросе в рамках концепции: обычно выделяют интерактивные и неинтерактивные варианты доказательства.
К интерактивным относятся доказательства, при которых проверяющий активно взаимодействует с доказывающим. Он может запросить доказательства напрямую у проверяющего и тот предоставит их сразу после запроса. Это распространенный сценарий использования протокола, но он подходит, когда в системе есть один проверяющий и один подтверждающий, и они непосредственно взаимодействуют друг с другом. Неинтерактивные варианты рассчитаны на группу проверяющих. То есть этот вариант не требует постоянного взаимодействия.
В любом случае, вне зависимости от вида доказательства оно должно будет обладать тремя важными свойствами. Оно должно соответствовать:
-
Полноте (Completeness): если данные верны, то доказывающий убедит в этом проверяющего.
-
Корректности (Soundness): если данные неверны, то доказывающий-обманщик с крайне высокой вероятностью не сможет убедить в них проверяющего
-
Нулевым данным (Zero-Knowledge): если данные верны, то проверяющий-обманщик не узнает ничего «лишнего», а только тот факт, что данные верны.
zk-SNARK и zk-STARK
Доказательства с нулевым разглашением применяются в некоторых криптовалютах. Самым известным примером выступает Zcash. В Zcash посредством подобных протоколов удается реализовывать так называемые защищенные (shielded) транзакции. Таким образом, в Zcash появляется возможность проводить транзакции, не раскрывая информации об отправителе, получателе и сумме перевода. В блокчейне криптовалюты записывается криптографическое доказательство, подтверждающее корректность операции без раскрытия данных.
Реализовать это получилось с помощью проверки достоверности посредством криптографического неинтерактивного протокола zk-SNARK (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge). Это доказательство создается единожды и может быть проверено неограниченным числом участников без необходимости обратной связи доказывающего с проверяющими. Фактически, zk-SNARK позволяет представить доказательство корректности вычислений в форме криптографического доказательства, основанного на алгебраических преобразованиях.
Помимо zk-SNARK существуют и другие неинтерактивные протоколы доказательства с нулевым разглашением, к примеру zk-STARK (Zero-Knowledge Scalable Transparent Argument of Knowledge). Одним из основных отличий zk-STARK от zk-SNARK является отсутствие доверенной установки у zk-STARK. Доверенная установка — это ситуация, когда существует первичный этап «настройки» — подтверждения подлинности несколькими участниками системы.
ZK-роллапы
Среди практических применений доказательств с нулевым разглашением встречаются и так называемые ZK-роллапы (Zero-Knowledge Rollups). Это технология масштабирования блокчейнов, которая позволяет значительно уменьшить нагрузку на основную сеть за счет вынесения вычислений за пределы основного блокчейна и их последующей криптографической верификации с помощью доказательств с нулевым разглашением. Одним из примеров подобного решения выступает проект ZKsync.
Перспективы ZKP
Естественно, концепция Zero-Knowledge Proof охватывает вопросы конфиденциальных не только в блокчейне. Сама технология и конкретные протоколы продолжают совершенствоваться, что видно на примере развития zk-SNARK и zk-STARK. Фактически, последний является более поздней вариацией ZKP-протокола. Также эта концепция может быть объединена с роллапами, то есть децентрализованные финансовые системы способны не только масштабироваться, но и становиться безопаснее. Потенциально ZKP может получить распространение не только в криптовалютах, но и цифровой идентификации пользователей без передачи персональных данных, и даже системах голосования.
Вывод
Концепция доказательства с нулевым разглашением позволяет подтверждать информацию без ее разглашения, что повышает безопасность и конфиденциальность отдельных систем. Особенно полезна технология в блокчейне и среде анонимных криптовалют. Протоколы вроде zk-SNARK позволяют минимизировать информацию, доступную в блокчейне о транзакции, сохраняя при этом возможность корректной валидации самой транзакции. В целом технология активно развивается, и изначальная концепция эволюционировала в конкретные протоколы решения проблемы подтверждения данных без их разглашения.