2012-05-17 5 views
1

Я в группе с несколькими десятками членов. Я написал систему веб-голосования quickie, и я в такой момент, когда хочу добавить к ней некоторые элементы «безопасности». Я стараюсь быть как можно более голой. То, что я сделал, сделано так, что пользователь должен вводить секретную строку (например, GUID) при голосовании, который я сохранил в базе данных для каждого избирателя.Anonymous-ish Online Voting System

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

Существует ли разумный способ подражать этому физически присутствующему процессу «ничья-от-шляпы» практически без ущерба для основных преимуществ, изложенных выше. Возможно, это невозможно сделать, и в какой-то момент должно быть доверие, или я должен настаивать на физическом присутствии, чтобы кто-то «зачеркнул» секрет (пока я записываю тех людей, которым была предоставлена ​​личная тайна).

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

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

+1

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

+0

@Cheekysoft Я не хочу, чтобы голоса были прослеживаемыми для пользователей, но я хочу, чтобы пользователи могли менять свои голоса - вид уловки 22 ... схема, изложенная также позволяет избежать «входа в систему», что может поставить под сомнение анонимность голосования. – vicatcu

+0

Наверное, лучше настроить вопрос, чтобы указать, что вы хотите (что-то близкое) к полностью анонимному механизму голосования. Просто беспорядочно риффы, но компромисс может заключаться в том, чтобы временно записывать каждый голос против своего пользователя, пока не выполнит «блокировку», которая затем удалит отношения и запретит любые изменения ума. – Cheekysoft

ответ

3

Это сложная проблема. Хорошие электронные системы голосования в целом - сложная проблема. Об этом много литературы. Хорошее место для начала - прочитать каждую бумагу, которую вы можете найти: David Chaum :-)

Вы занимаетесь тайным голосованием.

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

Проблема заключается в распространении секретов (токенов) избирателям, чтобы вы, избирательная власть, не знали, кто получил секрет, и все избиратели могут поверить ему. Эта последняя часть - проблема. Физическая встреча с протоколом выбора шляпы выполняет эту работу, потому что избиратели могут засвидетельствовать и свидетельствовать о том, что вы не обманываете (глядя на секреты, когда они выдаются). Я не могу представить какой-либо протокол, который позволит вам находиться в удаленном месте и выполнять ту же работу. Например, вы можете генерировать секреты и передавать их третьей стороне, которая перетасовывает их и выдает их избирателям, но тогда каждый должен доверять этой третьей стороне. В другом примере вы можете распространять секреты через анонимные адреса электронной почты, но тогда вы не можете гарантировать, что только авторизованные избиратели получают секрет. Я не вижу здесь никакого решения. Даже протокол шляпы уязвим, если персонаж, держащий шляпу, не будет постоянно наблюдаться с первого выбора до последнего выбора.

Так или иначе, так как вы встречаетесь лично, почему бы просто не провести голосование одновременно? (Возражение: возможно, было бы удобнее встречаться раньше, чем во время голосования, и т.д. ...)

По крайней мере, часть про избирателя, который теряет свой токен, легко ответить: вы не можете дать им новый секрет. Слишком плохо для них.

Кстати, есть еще одно требование, которое вы не адресуете: проверяемость избирателя.

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

+0

Да, это по своей сути сложно усложнить, к сожалению, вы совершенно правы ... причина, по которой я хочу, чтобы голосование происходило вне контекста встречи, заключается в том, что моя система позволяет избирателям добавлять новые варианты и менять свои голоса по мере развития вариантов - это не поддается обработке в реальном времени; творчество на собраниях - это время ... – vicatcu

+0

Я считаю, что все, что нужно сделать, - это получить все, что нужно для повторного использования, и получить его, чтобы вы могли показать хотя бы одну встречу; Я никогда не смогу устранить сомнение в том, что все секреты, которые были проголосованы, были разданы «на виду», если только все члены, которые проголосовали, не подтвердили, что их секрет находится среди опубликованного списка поданных голосов ... и в конце каждый должен верить, что я все равно не манипулирую голосами в базе данных ... ugh this redonculous – vicatcu

-2

Бросьте файл cookie с уникальным идентификатором, когда они посещают сайт. Однако, если они очищают свои файлы cookie, вы тосты.

+0

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

+0

@Celada: Не обязательно. Тот факт, что он знает, что проголосовал за идентификатор, не означает, что он знает, кто является владельцем идентификатора. –

+0

Цитата из вопроса: «не« только кто-нибудь »мог пойти и отдать голоса». Это означает, что вам нужно идентифицировать и аутентифицировать людей, которые являются членами группы, которым разрешено голосовать, прежде чем вы выдадите им токен, не так ли? – Celada

0

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

+1

Если система отправляет ключи по электронной почте, не вызывает сомнения, что система за кулисами коррелировала ключи от адреса электронной почты ... – vicatcu

+0

Это не без сомнения, но его не нужно связывать с адресом электронной почты. Это звучит очень скептически. К сожалению, нет никакого способа получить 100% случайный и надежный способ сделать это.Использование электронной почты на самом деле было бы лучшим способом сделать это, так как вы можете отслеживать прогресс по указанным темам и по мере изменения параметров. –