В одной из ранних публикаций мы уже рассматривали, что такое Zk-SNARK или протокол доказательства с нулевым разглашением простыми словами, но в данной статье мы хотели бы больше углубиться в техническую часть данного явления.
Протокол доказательства с нулевым разглашением: как это работает?
Итак, напомним, что доказательство с нулевым соглашением позволяет доказать, что вы являетесь владельцем какой-либо информации без раскрытия ее содержания. Для реализации данной концепции потребуется введение сразу 3 алгоритмов, которые обозначим GK, P и V. Рассмотрим их назначение:
- GK – это генератор ключей, который принимает инпут α и программу C, генерируя два ключа: ключ проверки для пруфера PK и ключ верификации для верификации VK. Эти ключи являются открытыми для всех сторон, участвующих в доказательстве.
- P – это пользователей, которому для доказательства необходимо использовать 3 типа входных данных: 1) ключ проверки PK; 2) рандомный инпут X, который будет общедоступным для сторон; 3) заявление, которое необходимо доказать, не раскрывая его значения – W. Сам алгоритм P порождает доказательство Proof, которое будет удовлетворять следующие условия: Proof = P (PK; X; W).
- V – алгоритм верификатора, который возвращает логическую переменную. Она может быть представлена в двух значениях: TRUE (правда) или FALS (ложь). Итак, верификатор принимает следующие входные данные V(VK; X; Proof), на основании которых он определяет правда это или ложь.
Так работает протокол доказательства с нулевым разглашением. Единственное, о чем хотелось бы поговорить отдельно, – значение α, упомянутое в пункте про GK. Дело в том, что данный параметр существенно усложняет использование Zk-SNARK в реальных приложениях, ведь каждый, кто им владеет, может создать ложный Proof, на который система вернет True. С этой проблемой очень долго боролись разработчики ZCash, криптовалюты, которая использует технологию нулевого доказательства.