ZK-snark: доказательство диапазона, нулевое разглашение

Рейтинг: 0Ответов: 1Опубликовано: 15.01.2023

Задача примерно такая. Алиса должна отправить бобу деньги, но так, чтобы сумма осталась скрыта.

Как это сделать, если в блокчейне хранятся только "сокрытия" балансов? Как доказать кому-то, что мой баланс положительный после перевода?

Иными словами, как мне доказать кому-то, что число х>0, если человеку известно только "сокрытие" этого числа, скажем, g^x, где g - генератор какой-то эллиптической кривой. Доказать без раскрытия x.

Я знаю, как конструируются снарки: R1CS-> QAP -> weil pairing, я знаю, как бы решалась эта задача, если бы x был известен, а не скрыт.

Например, представляем x = sum u_i2^i записываем в R1CS ещё u_iu_i = u_i и таким образом доказываем, что все u_i = 0 или 1

что дальше? какой-то очень простой тупняк. если бы x был известен, мы бы записали как раз в r1cs ещё его в качестве публичного инпута и проверяли бы спокойно себе нечто типа

v2 = u11+u22 v3 = v2+u32^2 ... vn = u_(n-1) + u_n2^(n-1)

и добавили бы vn = x

а так что сделать?

Ответы

▲ 0

Одно из решений такое: пусть в блокчейне хранится хэш баланса. Мы просто дописываем в R1CS и следовательно в SNARK условие E = hash(v) где E как раз сокрытие.