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) и есть пещера, в которой есть дверь
Пете нужно доказать, что он знает код от двери в этой пещере, не говоря самого кода Васе
Петя первый заходит в пещеру и идет по одному из маршрутов к двери с кодом
Теперь Вася заходит в пещеру и просит Петю выйти со стороны B
Представим случай, что Петя на самом деле не знает код от двери, а пытается обмануть. С вероятностью 50% или 1/2 ему могло повезти, и он случайно выбрал сторону В, и когда Вася попросил его выйти со стороны B, то ему не пришлось проходить через дверь
Давайте проведем этот эксперимент 30 раз
Шанс, что Петя угадал каждый раз (1/2)^30 = 0.000000000931 (тут про это и сказано)
для сравнения шанс разбиться на самолете = 0.000000125
И только в случае, если Петя знает код от двери, он сможет безошибочно 30 раз выйти с нужной стороны и доказать Васе, что он знает код
Пример из Рика и Морти (спойлеры)
Рекомендую ознакомиться с этой серией, если уже смотрели, то момент который я привожу в пример начинается с 4:40
https://rick-i-morty.online/episodes/6sez-5seriya/
Для тех кому лень смотреть, расскажу вкратце сюжет
Джерри (желтая футболка) ест печенье с предсказанием, где написано, что он займется сексом со своей мамой. Рик (синие волосы) не верит этому и решает проверить
Рик кладет в одну коробку бумажку с именем мамы Джерри, перемешивает и просит Джерри сказать, куда бы он засунул свой пэнисс
Каждый раз, когда Джерри отворачивается, Рик меняет коробки местами
Это по сути та же задачка с пещерой
Шанс, что Джерри угадает коробку с каждым разом становиться все меньше, тем самым Рик доказывает, что предсказание было настоящим