Методы ведения электронных голосований и возможные уязвимости
Админ (обсуждение | вклад) (→Традиционный способ - через один сервер) |
Админ (обсуждение | вклад) м (→Традиционный способ - через один сервер) |
||
Строка 23: | Строка 23: | ||
Таким образом мы получаем следующее: | Таким образом мы получаем следующее: | ||
* В результатах голосования пользователь может проверить свой голос по одноразовому идентификатору. | * В результатах голосования пользователь может проверить свой голос по одноразовому идентификатору. | ||
− | * Т.к. взлом электронной подписи крайне затруднителен даже теоритически, принимается на веру что никто посторонний не способен подписать что-то чужой подписью не | + | * Т.к. взлом электронной подписи крайне затруднителен даже теоритически, принимается на веру что никто посторонний не способен подписать что-то чужой подписью не имея в наличии соответствующего секретного ключа и пароля для него. В случае обнаружения такой ситуации инициируется процедура отзыва скомпромитированного ключа и пользователь обязан будет сгенерировать и подписать новый ключ. |
* Таким образом, для вброса голосов даже владельцем сервера, ему все-равно придеться озаботиться созданием соответствующим образом авторизованных (подписанных) ключей для создания подписей. При этом, права на владение сервером и доступ к нему не дают ему никаких преимуществ. В данном случае владелец сервера, сисадмин сервера или любой другой голосующий совершенно равны и не имею особых преимуществ. | * Таким образом, для вброса голосов даже владельцем сервера, ему все-равно придеться озаботиться созданием соответствующим образом авторизованных (подписанных) ключей для создания подписей. При этом, права на владение сервером и доступ к нему не дают ему никаких преимуществ. В данном случае владелец сервера, сисадмин сервера или любой другой голосующий совершенно равны и не имею особых преимуществ. | ||
* Т.к. подпись о голосовнаии и сам голос будут распространяться отдельными запросами, связать их друг с другом можно только косвенно. По времени их прихода на сервер и/или по IP адресу откуда они пришли. Здесь имеется некоторая возможность для косвенного раскрытия тайны голоса. Однако, при активном голосовании или использовании публичных прокси, даная возможность существенно уменьшается. | * Т.к. подпись о голосовнаии и сам голос будут распространяться отдельными запросами, связать их друг с другом можно только косвенно. По времени их прихода на сервер и/или по IP адресу откуда они пришли. Здесь имеется некоторая возможность для косвенного раскрытия тайны голоса. Однако, при активном голосовании или использовании публичных прокси, даная возможность существенно уменьшается. |
Версия 23:40, 8 октября 2011
В данной статье я хочу собрать в одном месте и описать возможные методы ведения электронных голосований и возможные уязвимости в них. Данный текст создан по результатам обсуждения на форуме "Облачная демократия" [1].
Для авторизации пользователя в системе предусмотрено использование открытой криптографической системы GnuPG. Взаимное подписание ключей друг друга будет являться стандартной процедурой, удостоверяющей что данный ключ принадлежит определенному человеку. Для избежания появления групп взаимоподписанных виртуальных ключей предполагается использование процедуры "принудительной проверки ключа".
Для реализации открытых голосований будет использоваться рассылка подписанного блока с идентификатором голосования и идентификатором голоса. По подписи будет определяться проголосовавший пользователь.
Процедура тайного голосования более сложна и возможны различные варианты ее реализации.
Традиционный способ - через один сервер
При работе с сервером нам необходимо обеспечить несколько требований:
- Невозможность вброса или подделки голосов владельцем сервера, сисадмином или кого-то еще, имеющего доступ к серверу;
- Невозможность раскрытия тайны голосования владельцем сервера, сисадмином или кого-то еще, имеющего доступ к серверу;
Предлагаемый метод голосования...
- Голосующий самостоятельно или с помощью локальной программы (находящейся на компьютере пользователя) генерирует одноразовый идентификатор, который он использует как идентификатор своего голоса.
- Голосующий с помощью локальной программы и своего открытого ключа шифрует блок данных с одноразовым идентификатором и вариантом выбора.
- Голосующий формирует текст для подписи об участии в голосовании и в конец этого текста добавляет вышеуказанный зашифрованный блок.
- Голосующий подписывает получившийся на предыдущем шаге блок текста и отправляет его в качестве своей подписи об участии в голосовании.
- Пару "одноразовый идентификатор"+"вариант выбора" он отправляет так-же, но не одновременно со своей подписью. Как минимум - не тем-же запросом.
Таким образом мы получаем следующее:
- В результатах голосования пользователь может проверить свой голос по одноразовому идентификатору.
- Т.к. взлом электронной подписи крайне затруднителен даже теоритически, принимается на веру что никто посторонний не способен подписать что-то чужой подписью не имея в наличии соответствующего секретного ключа и пароля для него. В случае обнаружения такой ситуации инициируется процедура отзыва скомпромитированного ключа и пользователь обязан будет сгенерировать и подписать новый ключ.
- Таким образом, для вброса голосов даже владельцем сервера, ему все-равно придеться озаботиться созданием соответствующим образом авторизованных (подписанных) ключей для создания подписей. При этом, права на владение сервером и доступ к нему не дают ему никаких преимуществ. В данном случае владелец сервера, сисадмин сервера или любой другой голосующий совершенно равны и не имею особых преимуществ.
- Т.к. подпись о голосовнаии и сам голос будут распространяться отдельными запросами, связать их друг с другом можно только косвенно. По времени их прихода на сервер и/или по IP адресу откуда они пришли. Здесь имеется некоторая возможность для косвенного раскрытия тайны голоса. Однако, при активном голосовании или использовании публичных прокси, даная возможность существенно уменьшается.
Относительно опастности генерации одноразового идентификатора на сервере хочется сказать следующее... Если генерировать этот идентификатор на сервере, возможна следующая мошенническая схема со стороны сисадминов или владельца сервера.
Для всех голосующих, например, "За", сервер может сгенерировать одинаковый идентификатор. Тогда, например, если из 100 голосующих 99 проголосуют "За", сервер выдаст им один одинаковый идентификатор, один для проголосовавшего "Против" будет правильный и остальные будут не соответствующими ни одному человеку, но с вариантом "Против". Тогда получится, что 99 человек просмотрев результаты голосования увидят что их голос учелся правильно. Однако, в реальности результаты будут - 1 голос "За" и 99 "Против". Т.е. ровно наоборот.
Поэтому генерация одноразового идентификатора на сервере недопустима в принципе.