October 17, 2022

Zero-knowledge proof - простыми словам

Всем привет!

В этой статье я простым языком расскажу про zero-knowledge proof (ZKP)

Это продолжение серии статей на пути к ZK-SNARKs и более сложным криптографическим штукам

TL;DR

Сейчас из каждого утюга говорят про ZKP. Появляются какие-то "zk rollup-ы", и у меня такое ощущение, что если ты дописываешь к названию технологии "zk", то можешь поднять любые раунды и встать на ступень выше этих одноклеточных "не zk" проектов. Если говорить серьезно, то данный механизм/протокол на самом деле решает много проблем с приватностью данных и все больше приближает нас к настоящей децентрализации (привет CZ) и анонимности

Что такое zero-knowledge proof?

Zero-knowledge proof или zero-knowledge protocol - это метод, с помощью которого Петя (the prover) может доказать Васе (the verifier), что он знает какую-то информацию X, не раскрывая никакую информацию об этом X

Другими словами, я могу доказать преподавателю, что сделал домашнее задание, не принося его

ZKP должен удовлетворять трем условиям:

  • Completeness (полнота) - если утверждение истинно, то порядочный проверяющий aka "Вася the verifier" - тот, кто честно следует правилам протокола будет убежден в этом факте порядочным проверяющим
  • Soundness (надежность) - если утверждение ложно, то нечестный доказывающий aka "Петя the prover" не сможет убедить честного проверяющего в том, что оно истинно, за исключением некоторых случаев возможных с очень малой вероятностью
  • Zero knowledge (нулевое знание) - если утверждение истинно, то проверяющий aka "Вася the verifier" ничего не узнает, кроме того факта, что утверждение истинно

Доказательство с нулевым знанием - это не совсем доказательство, в том смысле, что вывод о правильности информации X делается на основании факта, что вероятность обмана Пети (the prover) настолько мала, что суждение на 99,9999999999% верно

Возможно не совсем понятно, давайте рассмотрим пример с пещерой Али бабы

Пример с пещерой

Представим ситуацию, у нас есть Петя (the prover), Вася (the verifier) и есть пещера, в которой есть дверь

Пете нужно доказать, что он знает код от двери в этой пещере, не говоря самого кода Васе

Для простоты восприятия

Петя = Prover

Вася = Verifier

Петя первый заходит в пещеру и идет по одному из маршрутов к двери с кодом

Теперь Вася заходит в пещеру и просит Петю выйти со стороны B

Представим случай, что Петя на самом деле не знает код от двери, а пытается обмануть. С вероятностью 50% или 1/2 ему могло повезти, и он случайно выбрал сторону В, и когда Вася попросил его выйти со стороны B, то ему не пришлось проходить через дверь

Давайте проведем этот эксперимент 30 раз

Шанс, что Петя угадал каждый раз (1/2)^30 = 0.000000000931 (тут про это и сказано)

для сравнения шанс разбиться на самолете = 0.000000125

И только в случае, если Петя знает код от двери, он сможет безошибочно 30 раз выйти с нужной стороны и доказать Васе, что он знает код

Пример из Рика и Морти (спойлеры)

Рекомендую ознакомиться с этой серией, если уже смотрели, то момент который я привожу в пример начинается с 4:40

https://rick-i-morty.online/episodes/6sez-5seriya/

Для тех кому лень смотреть, расскажу вкратце сюжет

Джерри (желтая футболка) ест печенье с предсказанием, где написано, что он займется сексом со своей мамой. Рик (синие волосы) не верит этому и решает проверить

Рик кладет в одну коробку бумажку с именем мамы Джерри, перемешивает и просит Джерри сказать, куда бы он засунул свой пэнисс

Каждый раз, когда Джерри отворачивается, Рик меняет коробки местами

Это по сути та же задачка с пещерой

Шанс, что Джерри угадает коробку с каждым разом становиться все меньше, тем самым Рик доказывает, что предсказание было настоящим

Надеюсь статья была полезной

Спасибо за прочтение

Мой телеграм - https://t.me/chpotldev