Методы ведения электронных голосований и возможные уязвимости

Материал из Сервис Облачной Демократии
(Различия между версиями)
Перейти к: навигация, поиск
м
 
(не показана 1 промежуточная версия 1 участника)
Строка 34: Строка 34:
  
 
=== Лучший способ - распределенная система P2P ===
 
=== Лучший способ - распределенная система P2P ===
 +
 +
[[Category:gplvote-serverbased]]

Текущая версия на 12:36, 9 марта 2012

В данной статье я хочу собрать в одном месте и описать возможные методы ведения электронных голосований и возможные уязвимости в них. Данный текст создан по результатам обсуждения на форуме "Облачная демократия" [1].

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

Для реализации открытых голосований будет использоваться рассылка подписанного блока с идентификатором голосования и идентификатором голоса. По подписи будет определяться проголосовавший пользователь.

Процедура тайного голосования более сложна и возможны различные варианты ее реализации.

Традиционный способ - через один сервер

При работе с сервером нам необходимо обеспечить несколько требований:

  1. Невозможность вброса или подделки голосов владельцем сервера, сисадмином или кого-то еще, имеющего доступ к серверу;
  2. Невозможность раскрытия тайны голосования владельцем сервера, сисадмином или кого-то еще, имеющего доступ к серверу;

Предлагаемый метод голосования...

  1. Голосующий самостоятельно или с помощью локальной программы (находящейся на компьютере пользователя) генерирует одноразовый идентификатор, который он использует как идентификатор своего голоса.
  2. Голосующий с помощью локальной программы и своего открытого ключа шифрует блок данных с одноразовым идентификатором и вариантом выбора.
  3. Голосующий формирует текст для подписи об участии в голосовании и в конец этого текста добавляет вышеуказанный зашифрованный блок.
  4. Голосующий подписывает получившийся на предыдущем шаге блок текста и отправляет его в качестве своей подписи об участии в голосовании.
  5. Пару "одноразовый идентификатор"+"вариант выбора" он отправляет так-же, но не одновременно со своей подписью. Как минимум - не тем-же запросом.

Таким образом мы получаем следующее:

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

Для всех голосующих, например, "За", сервер может сгенерировать одинаковый идентификатор. Тогда, например, если из 100 голосующих 99 проголосуют "За", сервер выдаст им один одинаковый идентификатор, один для проголосовавшего "Против" будет правильный и остальные будут не соответствующими ни одному человеку, но с вариантом "Против". Тогда получится, что 99 человек просмотрев результаты голосования увидят что их голос учелся правильно. Однако, в реальности результаты будут - 1 голос "За" и 99 "Против". Т.е. ровно наоборот.

Поэтому генерация одноразового идентификатора на сервере недопустима в принципе.

Лучший способ - распределенная система P2P

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты