Доказательство с нулевым разглашением: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Нет описания правки |
|||
Строка 13: | Строка 13: | ||
Для этого Петя и Дима совместно выполняют несколько раундов протокола: |
Для этого Петя и Дима совместно выполняют несколько раундов протокола: |
||
* |
* Вначале Дима создает граф ''H'', [[Изоморфизм_(математика)|изоморфный]] ''G''. Преобразовывание гамильтонова цикла между изоморфными графами - тривиальная задача, поэтому если Диме известен гамильтонов цикл в ''G'', то он также знает гамильтонов цикл в ''H''. |
||
* Дима передает граф ''H'' Пете. |
* Дима передает граф ''H'' Пете. |
||
* Петя выбирает случайный бит ''b'' ← {0,1} |
* Петя выбирает случайный бит ''b'' ← {0,1} |
Версия от 19:28, 19 января 2009
В криптографии Доказательство с нулевым разглашением (информации) (англ. Zero-knowledge proof) — это интерактивный протокол, позволяющий одной из сторон (проверяющему, verifier) убедиться в достоверности какого-либо утверждения (обычно математического), не получив при этом никакой другой информации от второй стороны (доказывающего, prover).
Доказательство с нулевым разглашением должно обладать тремя свойствами:
- Полнота: если утверждение действительно верно, то доказывающий убедит в этом проверяющего.
- Корректность: если утверждение неверно, то даже нечестный доказывающий не сможет убедить проверяющего за исключением пренебрежимо малой вероятности.
- Нулевое разглашение: если утверждение верно, то любой даже нечестный проверяющий не узнает ничего кроме самого факта, что утверждение верно.
Доказательства с нулевым разглашением нашли применение в криптографических протоколах чтобы убедиться в том, что другая сторона следует протоколу честно. На практике доказательства с нулевым разглашением также используются в протоколах конфиденциального вычисления.
Пример
Назовем проверяющую сторону Петей, а доказывающую сторону Димой (в англоязычной литературе обычно используются пары Alice и Bob). Допустим Диме известен Гамильтонов цикл в большом графе G. Пете известен граф G, но он не знает гамильтонова цикла в нем. Дима хочет доказать Пете, что он знает гамильтонов цикл, не выдавая при этом ни самого цикла, ни какой-либо информации о нем (возможно Петя хочет купить этот гамильтонов цикл у Димы, но перед этим удостовериться, что он у Димы действительно есть).
Для этого Петя и Дима совместно выполняют несколько раундов протокола:
- Вначале Дима создает граф H, изоморфный G. Преобразовывание гамильтонова цикла между изоморфными графами - тривиальная задача, поэтому если Диме известен гамильтонов цикл в G, то он также знает гамильтонов цикл в H.
- Дима передает граф H Пете.
- Петя выбирает случайный бит b ← {0,1}
- Если b=0, то Петя просит Диму доказать изоморфизм G u H, то есть предоставить соответствие вершин этих двух графов. Петя может проверить, действительно ли G u H изоморфны.
- Если b=1, то Петя просит Диму показать гамильтонов цикл в H. Изоморфизм графов - NP-полная задача, поэтому будем здесь считать, что невозможно из гамильтонова цикла в H вычислить гамильтонов цикл в G.
В каждом раунде Петя выбирает новый случайный бит, который неизвестен Диме, поэтому чтобы Дима мог ответить на оба вопроса, нужно чтобы H был в самом деле изоморфен G и Дима должен знать гамильтонов цикл в H (а значит также и в G). Поэтому после достаточного числа раундов, Петя может быть уверен в том, что у Димы действительно есть гамильтонов цикл в G. С другой стороны, Дима не раскрывает никакой информации о гамильтоновом цикле в G.
Если же у Димы нету гамильтонова цикла в G и он хочет обмануть Петю, то Дима может в каждом раунде либо создать H изоморфный G, либо найти гамильтонов цикл к фальшивому графу H' . В таком случае вероятность того, что Дима все-таки обманет Петю после n раундов равна 1/2n, а это в криптографии считается пренебрежимо малой вероятностью.