Я понимаю, что каждая транзакция видна в блокчейне, но можно ли создать DApp, позволяющее людям голосовать замаскированным образом? не продемонстрировать свой голос, пока процесс голосования не закончится?
Вы ищете схемы обязательств . Как правило, схема фиксации состоит из двух фаз: фазы фиксации и фазы раскрытия . Простая схема обязательств выглядит следующим образом:
x
, она должна сгенерировать случайное r
(скажем, r
должно быть более 100 бит) и отправить H(x||r)
, где H
криптографически безопасная хэш-функция и ||
обозначает конкатенацию). Поскольку H
он криптографически безопасен, вычислительно невозможно найти прообраз H(x||r)
(т. е. он имеет пренебрежимо малую вероятность). Это свойство называется вычислительной привязкой. Это свойство гарантирует, что никто (даже Алиса) не сможет изменить значение обязательства Алисы x
.x'
и r'
. Боб проверяет, есть ли H(x||r)==H(x'||r')
. Если он совпадает, то примите его, иначе отклоните.Другие более сложные схемы фиксации могут быть построены с использованием задачи дискретного журнала.
Это возможно, но не напрямую. Вероятно, самым простым способом было бы хранить хеш одного голоса для каждого избирателя. Вы можете использовать скрытие свойства хеша, чтобы скрыть голосование: если у вас есть варианты «Да» и «Нет», каждый голосующий добавляет случайную секретную строку к «Да» или «Нет» и загружает хэш полученной строки. Таким образом, хэш не раскрывает голос, пока избиратель не покажет секретную добавленную строку и свой голос. В случае раскрытия каждый может подтвердить, что голосование не было изменено, проверив хэш.
Более сложное решение можно построить с помощью гомоморфного шифрования . Это избавляет каждого пользователя от необходимости раскрывать секрет после окончания голосования, но немного сложнее.
Так что, в конце концов, это зависит от вашего приложения.
НемезидаЦепь
Иштван Андраш Шерес
НемезидаЦепь