Идея. Как правильно сделать голосование.
Oct. 22nd, 2012 09:13 amЗадача показалась мне интересной, вчера и сегодня много думал. Похоже можно обойтись без электронной подписи.
Список зарегистрированных сейчас в таком формате: http://election.cvk2012.org/home/users
Далее в тексте:
D - идентификатор голосующего;
Т - тайное число (пароль);
Z - хэш от идентификатора D и пароля T;
V - выбор голосующего;
K - хэш от выбора V и пароля T;
Надо сделать так. Регистрация. Пользователь задумывает пароль(число) T который известен только ему. При регистрации он получает свой идентификатор D, сразу же вычисляет Z как хэш от D и T, то есть Z = md5(D.T), и сразу же сообщает Z системе. Z должен быть записан как одно из его полей в списке зарегистрированных.
Голосование. При голосовании пользователь сообщает системе свой выбор V, а также хэш K = md5(V.T). В результат голосвания для этого пользователя заносятся V и K.
Далее. Предположим, что подсчитывающий смухлевал и указал другой выбор V для этого пользователя, а не тот который он сделал реально. В таком случае голосующий легко поймает его за руку. Он сообщает всем тайное число T, свой реальный выбор V, и показывает что верны оба равенства Z = md5(D.T), K = md5(V.T). Тот кто подсчитывал и исказил результат, не может сделать то же самое. Голосование объявляется недействительным.
UPD: Если же после голосования голосующий соврал и говорит, что его выбор V был другой, хотя на самом деле нет, тут всё неоднозначно, надо эту ситуацию рассмотреть подробнее.
UPD2: Разумеется, я против масонских голосований, когда "большинство" мне что-то диктует. Просто тут задача интересная.
продолжение здесь
Список зарегистрированных сейчас в таком формате: http://election.cvk2012.org/home/users
Далее в тексте:
D - идентификатор голосующего;
Т - тайное число (пароль);
Z - хэш от идентификатора D и пароля T;
V - выбор голосующего;
K - хэш от выбора V и пароля T;
Надо сделать так. Регистрация. Пользователь задумывает пароль(число) T который известен только ему. При регистрации он получает свой идентификатор D, сразу же вычисляет Z как хэш от D и T, то есть Z = md5(D.T), и сразу же сообщает Z системе. Z должен быть записан как одно из его полей в списке зарегистрированных.
Голосование. При голосовании пользователь сообщает системе свой выбор V, а также хэш K = md5(V.T). В результат голосвания для этого пользователя заносятся V и K.
Далее. Предположим, что подсчитывающий смухлевал и указал другой выбор V для этого пользователя, а не тот который он сделал реально. В таком случае голосующий легко поймает его за руку. Он сообщает всем тайное число T, свой реальный выбор V, и показывает что верны оба равенства Z = md5(D.T), K = md5(V.T). Тот кто подсчитывал и исказил результат, не может сделать то же самое. Голосование объявляется недействительным.
UPD: Если же после голосования голосующий соврал и говорит, что его выбор V был другой, хотя на самом деле нет, тут всё неоднозначно, надо эту ситуацию рассмотреть подробнее.
UPD2: Разумеется, я против масонских голосований, когда "большинство" мне что-то диктует. Просто тут задача интересная.
продолжение здесь
no subject
Date: 2012-10-22 06:35 am (UTC)no subject
Date: 2012-10-22 06:37 am (UTC)Но он не может подделать нужный ему результат.
no subject
Date: 2012-10-22 07:16 am (UTC)no subject
Date: 2012-11-07 07:16 pm (UTC)no subject
Date: 2012-11-07 07:31 pm (UTC)K нужно как число для проверки.
Участник посмотрит на свой результат голосования в итоговом списке
и если он не соответствует тому выбору, который он сделал реально,
то он показывает своё тайное число и показывает что равенство K = md5(V.T) не выполняется.
Вообще-то внизу есть ссылка на продолжение: http://xaliavschik.livejournal.com/503803.html
Там вариант алгоритма получше.
Вдобавок, можно сделать два отдельных списка (равных по количеству):
1. Зарегистрированные участники
2. Результаты голосования.
в которых посторонние не смогут найти соответствие кто и как проголосовал.
Но каждый сможет проверить, не искажен ли его выбор и доказать подлог,
если он есть. В общем тут есть над чем подумать.
no subject
Date: 2012-11-07 07:39 pm (UTC)удаления и искажения некоторых результатов.
Но есть ещё проблема выявления фиктивных участников,
которых может сгенерировать подсчитывающая сторона.
Непонятно как её решать.