Подтвердить что ты не робот

Есть ли алгоритм анонимного, изменчивого и безопасного голосования?

Я хотел бы реализовать механизм обратной связи в своем приложении - в основном, оценка. Требования:

  • Общее существует и может быть прочитано
  • Пользователь может добавить свой счет в общую сумму
  • Пользователь не может добавить второй балл, но может изменить свой первоначальный счет, снова обновив итоговое значение, удалив (вычитая) исходный балл и добавив новый.
  • Невозможно определить, что голосовал данный пользователь.

Кажется, что это ограничивает (или даже перекрывает) криптографическую теорию, но я не смог найти ничего, что могло бы решить эту проблему. У кого-нибудь есть какие-то конкретные алгоритмы, которые могли бы решить эту проблему? Или даже дополнительные поисковые векторы, которые я мог бы использовать, чтобы преследовать его?

4b9b3361

Ответ 1

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

В этом смысле есть еще анонимность, потому что хэш не раскрывает источник. Вместо списка (имя пользователя, голос), список (hashValue, голосование). Если есть некоторая обеспокоенность в связи с тем, что отслеживание hashValue отслеживается во многих опросах, затем кодируйте дополнительную статистику, зависящую от опроса, для хеша, которая не раскрывается публично. Или пусть пользователь встраивает (например, preend) в свою строку, чтобы хэшировать, поэтому они все еще создают уникальное представление.

Ответ 2

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

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

  • Пользователь входит в систему. В вашей системе используется система, которая запрещает одному пользователю получать несколько учетных записей пользователей.
  • Пользователь (не анонимный) выбирает вопрос, по которому следует голосовать.
  • Пользователь (не анонимный) делает голосование.
  • В вашей системе хранятся:
    • Указание на то, что пользователь проголосовал за выбранную проблему. Это предотвращает дублирование голосования.
    • Значение голосования пользователей по выбранной проблеме (это оценка, о которой вы упоминали). Это значение сохраняется без ссылки на пользователя, голосовавшего.
    • Значение оценки пользователя, если они голосовали по проблеме. Вероятно, вам нужно, чтобы это было рассчитанное значение

Если пользователь хочет изменить свое голосование, они заходят в систему, выбирают проблему, затем отключают (ваша система знает, что они голосовали, потому что она хранила это). На этом этапе они могут снова выбрать вопрос (их показания по голосованию были очищены) и голосовать.

Обратите внимание, что ваша система должна будет вычесть значение голоса пользователя из таллинга для проблемы, если они будут отменены.

Ответ 3

Вы не даете достаточно информации о том, что такое законное голосование, но если это, скажем, целое число, то вы можете просто сохранить сумму и разрешить несколько голосов. Это работает, потому что изменение голоса от A до B имеет тот же эффект, что и голосование A, а затем голосование (B - A).

Ответ 4

Собственно, онлайн-голосование довольно сложно.

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

https://docs.google.com/document/d/1SPYFAkVNjqDP4HOt_A_YGFZy-SFXVxHoN1hpLGNFKXI/pub

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

Система также может иметь дело с повторной отправкой голосов с некоторыми ограничениями, присущими любой защищенной системе для онлайн-голосования:

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

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

Однако, когда мы хотим обновлять голоса, все становится намного сложнее. Было бы неотъемлемой необходимость синхронизации, если мы хотим избежать возможности анализа трафика. В идеале все избиратели должны будут повторно отправлять обновление через регулярные промежутки времени (даже если их обновление на самом деле не является обновлением).