Скрытие ответа/голоса в блокчейне

Я понимаю, что каждая транзакция видна в блокчейне, но можно ли создать DApp, позволяющее людям голосовать замаскированным образом? не продемонстрировать свой голос, пока процесс голосования не закончится?

Ответы (2)

Вы ищете схемы обязательств . Как правило, схема фиксации состоит из двух фаз: фазы фиксации и фазы раскрытия . Простая схема обязательств выглядит следующим образом:

  1. Фаза фиксации: если Алиса хочет зафиксировать значение x, она должна сгенерировать случайное r(скажем, rдолжно быть более 100 бит) и отправить H(x||r), где Hкриптографически безопасная хэш-функция и ||обозначает конкатенацию). Поскольку Hон криптографически безопасен, вычислительно невозможно найти прообраз H(x||r)(т. е. он имеет пренебрежимо малую вероятность). Это свойство называется вычислительной привязкой. Это свойство гарантирует, что никто (даже Алиса) не сможет изменить значение обязательства Алисы x.
  2. Фаза раскрытия: Алиса раскрывает свой выбор x'и r'. Боб проверяет, есть ли H(x||r)==H(x'||r'). Если он совпадает, то примите его, иначе отклоните.

Другие более сложные схемы фиксации могут быть построены с использованием задачи дискретного журнала.

Допустим, у меня есть 5 человек, помещенных на горячие стулья, и им нужно проголосовать «за» или «против». Все, кроме одного человека, проголосовали «за». По прошествии x времени я хочу, чтобы эти голоса были видны, а не раньше.
Что ж, вам нужно раскрыть их все, иначе вы не сможете сказать, какой из них «да» или «нет». Просто глядя на обязательства вы не можете различить голоса. В этом суть обязательств...
Ах да, извините, может быть, я неправильно выразился, это было совершенно ясно для меня. Я имел в виду, что голоса не должны быть расшифрованы до тех пор, пока они не будут раскрыты. Как только голосование совершено, оно должно оставаться секретным до тех пор, пока оно не будет раскрыто, и тогда все совершенное будет раскрыто сразу. Я думаю, что использование схем обязательств может быть выходом в моем случае.

Это возможно, но не напрямую. Вероятно, самым простым способом было бы хранить хеш одного голоса для каждого избирателя. Вы можете использовать скрытие свойства хеша, чтобы скрыть голосование: если у вас есть варианты «Да» и «Нет», каждый голосующий добавляет случайную секретную строку к «Да» или «Нет» и загружает хэш полученной строки. Таким образом, хэш не раскрывает голос, пока избиратель не покажет секретную добавленную строку и свой голос. В случае раскрытия каждый может подтвердить, что голосование не было изменено, проверив хэш.

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

Так что, в конце концов, это зависит от вашего приложения.