Рейтинг:1

Использование zk-snarks для проверки самой высокой ставки

флаг sn

Я понимаю, что мы можем проверить это, учитывая частный ввод а и общественный вклад б что мы можем проверить а больше, чем б. Но что, если я хочу сохранить оба входа закрытыми?

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

Manish Adhikari avatar
флаг us
Как насчет решения проблемы миллионера Яо. Вы можете использовать SNARK, чтобы доказать целостность входных данных, если это необходимо.
Рейтинг:3
флаг in

С zk-snarks можно было бы проверить доказательство того, что отношение «лучше» выполняется для $(а, б)$ открытый текст в качестве частного ввода, а также для приверженности $(а, б)$ в качестве общественного вклада. Один разделил бы оба $а$ и $b$ на биты («провода» на языке снарков) и создать схему с вентилями умножения, выдающими «истину» или «ложь». Здесь могут быть несколько полезны схемы Verilog. Умножение означает систему уравнений R1CS, представляющую схему как часть, специфичную для задачи, и вход для библиотеки snark, реализующей систему доказательств Groth16.

Имея схему, можно было бы создать два открытых ключа, создать и проверить доказательство снарка.

GeraldHost avatar
флаг sn
Чтобы сгенерировать это доказательство, разве вам не нужно знать значение `a` и `b`? Мне интересно, есть ли способ доказать, что «а» больше, чем «b», не зная «b»?
Vadym Fedyukovych avatar
флаг in
Если вы начнете со снарков в качестве требования, вы должны предоставить надлежащего свидетеля для вывода доказательства снарка. Это означает, что и в открытом тексте.
Рейтинг:3
флаг us

Предположим, что есть общий секрет $х$ который используется для сокрытия значения $а$ и $b$, известные только актерам, обладающим $а$ и $b$. Верификатор $с$ является случайно выбранным числом и предоставляется двум сторонам, обладающим $а$ и $b$. Затем они вычисляют $ax-c$ и $bx-c$и предоставить их верификатору. Затем верификатор вычисляет разницу между $ax-c$ и $bx-c$, что является результатом. В таком случае, поскольку $ax-c$ и $bx-c$ определенно не делится на $х$, нет способов вычислить верификатор $х$ вне.

Обратите внимание, что с этим протоколом есть проблемы, так как он требует взаимодействия между верификатором и двумя сторонами, несущими $а$ и $b$.


РЕДАКТИРОВАТЬ: Фактическая возможность того, что пруверы А и В подделают свои значения

Есть два случая личности верификатора, которые следует обсудить отдельно. Первая возможность заключается в том, что проверяющим является аукционист. В этом случае A и B всегда будут пытаться подделать свою стоимость, поскольку аукционист не имеет возможности узнать стоимость $х$. Они оба будут делать одно и то же, не используя свои взаимно известные $х$, а что-то другое. В таком случае их действия компенсируют друг друга. Однако, если проверяющий является наблюдателем, у него нет причин подделывать значение, и даже если он это сделает, наблюдатель всегда будет знать. Поэтому проблемы подделки ценности фактически не существует.

GeraldHost avatar
флаг sn
Спасибо, чувак, это имеет смысл! Есть ли способ сделать это без общего секрета? потому что, конечно, если обе стороны знают секрет и значение `c`, они смогут вычислить `a` и `b`? Может быть, я что-то не так понял.
Red Sun avatar
флаг us
@GeraldHost Я добавил запрошенную вами информацию и пояснил, что я имею в виду. Спасибо за ваш отзыв.
Рейтинг:1
флаг in

Является ли использование ZK snark обязательным требованием? Кажется, это проблема миллионера: https://en.m.wikipedia.org/wiki/Яо%27s_Millionaires%27_problem

Это проще, чем выполнение SNARKS, это интерактивное совместное вычисление, не имеющее доверенного центра или предполагающее, что оба входа защищены общим секретом (как в ответе Red Sun).

В сценарии торгов они дают обязательства и используют протокол миллионера. Ни одна из сторон не получит никакой выгоды от использования значения в протоколе миллионера, отличного от того, что было совершено, если вы выиграете, вам нужно будет раскрыть обязательство и заплатить, и любое предательство будет обнаружено. Но и для проигравшей стороны, по-видимому, есть ограниченная ценность в том, чтобы не использовать ту же самую ценность в обязательствах.

Если у вас есть доверенное лицо, которое видит ставки, но вы не доверяете ему в честности, вы можете использовать доказательства ZK для него, чтобы доказать, что он был честен, но они не решают проблему доверия к стороне, чтобы не раскрывать ставки. Вам нужны какие-то общие вычисления, как в миллионерах, чтобы обеспечить секретность ставок от всех других сторон.

Manish Adhikari avatar
флаг us
То же самое я упомянул в комментарии выше. Но доказательства с нулевым разглашением (например, SNARK) можно использовать, чтобы доказать, что ваш личный вклад в него такой же, как, например, первоначально зафиксированное значение ставки, например, в этом случае.
Meir Maor avatar
флаг in
Но если вы зафиксируете значение, а затем запустите алгоритм миллионера, используя другой, и выиграете, вам все равно нужно будет раскрыть исходное значение. и заплатите точную сумму, которую вы обязались. Кажется, вам все еще нужны общие вычисления. Поэтому я не уверен, для чего нужно доказательство ZK.
Manish Adhikari avatar
флаг us
Да, но вам не нужно раскрывать свою ставку, если вы проиграете

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.