28 October 2012

Проверяемое электронное голосование

Legislation in IT


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

Как мне кажется, такое решение есть.


Задача

Электронное голосование должно отвечать следующим условиям:
  • Анонимность — никто не должен иметь возможность соотнести конкретный голос с конкретным избирателем.
  • Открытость — результаты голосования должны быть доступны всем.
  • Верифицируемость — каждый избиратель должен иметь возможность проверить свой голос. Любой человек должен иметь возможность посчитать итоговые результаты и проверить на отсутствие «вбросов».


Ключевой технологией для решения поставленной задачи является слепая подпись — способ подписания тела зашифрованного сообщения, без его расшифровки.

Порядок голосования

  1. Избиратель генерирует пару ключей и регистрирует свой открытый ключ в ЦИК. По результатам регистрации в общий доступ выкладывается список адресов избирателей. Примерно такой:

    Уже на этом этапе каждый может проверить, что он внесен в списки, в его квартире не прописалось еще 146 человек, а по соседству за ночь не вырос новый микрорайон.
  2. Избиратель генерирует свой бюллетень вида:

    Далее он шифрует бюллетень (ключ может быть любой), подписывает его своим закрытым ключом и отправляет в ЦИК
  3. ЦИК проверяет подпись. Удостоверившись, что эта подпись есть в списке избирателей, подписывает бюллетень слепой подписью и отправляет его избирателю. После этого ЦИК в публичном списке избирателей инкрементирует счетчик голосующих:

    Здесь избиратель может удостоверится, что его посчитали.
  4. Избиратель расшифровывает бюллетень, проверяет подпись ЦИКа и отправляет расшифрованный, подписанный ЦИКом бюллетень обратно в ЦИК.
  5. ЦИК получает бюллетень, проверяет валидность своей подписи, шифрует его и сразу выкладывает в общий доступ пару [случайное число бюллетеня (из пункта 2), зашифрованный бюллетень]. Бюллетень шифруется ЦИКом, ключ шифрования хранится втайне до конца голосования.
  6. После окончания голосования публикуется ключ к шифру бюллетеней.


Что имеем в результате?

В общем доступе есть:
  • Список адресов избирателей из пункта 3. Каждый может проверить количество проголосовавших, убедиться в отсутствии «вбросов».
  • Список бюллетеней из пункта 5. Каждый избиратель может найти свой голос по случайному числу, которое он генерировал на этапе создания бюллетеня. Любой человек может посчитать итоги голосования и сравнить количество бюллетеней с количеством проголосовавших избирателей.

Ни на одном из этапов ЦИК или кто-то другой не может сопоставить избирателя и его голос. В процессе голосования можно отслеживать изменения в публичных списках, выявляя подозрительную динамику изменений. Каждый избиратель может проверить правильно ли учтен его голос. Любой может самостоятельно посчитать итоги голосования. Приписки можно выявить. Чуров рыдает, забившись под стол.

Как думаете, сработает?

Upd:
Всем спасибо за отзывы!

mihaild расписал пункты более понятно:
1. Избиратель отправляет в ЦИК ключ ИзбPub1 и свой адрес.
2. Избиратель делает бюллетень (случайное число + голос), шифрует его ключем Изб2, подписывает ключем ИзбPriv1, отправляет в ЦИК.
3. ЦИК проверяет подпись с помощью ключа ИзбPub1, слепой подписью подписывает шифрованный бюллетень ключом ЦикPriv1, отправяет результат обратно избирателю.
4. ЦИК отмечает, что получил голос от соответствующего адреса.
5. Избиратель, используя шифрованный подписанный бюллетень и ключ Изб2, получает нешифрованный бюллетень, подписанный ключом ЦикPriv1.
6. Избиратель отправляет подписанный нешифрованный бюллетень обратно в ЦИК.
7. ЦИК проверяет подпись с помощью ключа ЦикPub1.
8. ЦИК публикует пару (число, бюллетень, зашифрованный ЦикPub2) и учитывает голос избирателя.
9. По окончании выборов ЦИК публикует ЦикPriv2.

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

edhell правильно отметил — в первом пункте я не указал, что регистрация происходит оффлайн с предъявлением паспорта. Это разовая процедура, позволяющая голосовать в дальнейшем, и вполне может быть совмещена с получением паспорта и сменой прописки.
Tags:электронная демократияэлектронное голосованиекриптографияслепая подпись
Hubs: Legislation in IT
+26
17.2k 46
Comments 153
IT-рекрутер
from 45,000 to 70,000 ₽ITSummaRemote job
IT–рекрутер
from 60,000 to 120,000 ₽HighTeamМоскваRemote job
IT-recruiter / HR
from 50,000 to 70,000 ₽БастионМоскваRemote job
Бизнес-аналитик
to 87,000 ₽Fix PriceМосква
HR-менеджер (IT, B2B, высокий ценовой сегмент)
from 50,000 to 100,000 ₽Progressive MediaМоскваRemote job
Top of the last 24 hours