Проект "Свободные голосования"

Электронная системы голосований через интернет
Текущее время: 06 май 2024, 10:55

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 141 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 15  След.
Автор Сообщение
СообщениеДобавлено: 06 окт 2011, 10:36 
Не в сети

Зарегистрирован: 27 авг 2011, 22:36
Сообщения: 460
Андрей писал(а):
povischuk писал(а):
3. Как вы себе представляете "сотрудничество всех участников цепочки"? Это ведь живые люди, а не боты? Они проголосовали и пошли дальше заниматься своими делами. Никто не будет дежурить и проверять (или я чего-то недопонимаю здесь).

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

Я бы сделал это на автомате: если демон через сутки после завершения голосования имеет голосов больше чем проголосовавших он на автомате начинает распространять данные об трафике голосования. Когда нарушитель найден, он автоматически заносит его в черный список. Таким образом мы получим самоустранение проблемных узлов.

В случае если это придется делать руками - пользователей может просто достать, что-то выяснять.
По поводу "черного списка" - можно принимать другие санкции. Но выяснение виновного, все же дело автоматики.

_________________
AF4B DFB0 0E41 2F7A 09FD 4971 96F0 B176 EA1C DD85


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 окт 2011, 17:22 
Не в сети

Зарегистрирован: 17 июн 2011, 18:14
Сообщения: 2543
yurial писал(а):
Я бы сделал это на автомате: если демон через сутки после завершения голосования имеет голосов больше чем проголосовавших он на автомате начинает распространять данные об трафике голосования. Когда нарушитель найден, он автоматически заносит его в черный список. Таким образом мы получим самоустранение проблемных узлов.

В случае если это придется делать руками - пользователей может просто достать, что-то выяснять.
По поводу "черного списка" - можно принимать другие санкции. Но выяснение виновного, все же дело автоматики.

Такой метод применим если делать это ДО рассылки одноразовых публичных ключей, открывающих результат голосования. Если делать это после такой рассылки, то будет раскрытие голосов пользователей.

Видимо, тогда тайного голосование должно производиться в несколько этапов:

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

Т.е. в отличии от варианта с сервером появляется несколько дополнительных периодов, длительность которых нужно либо сделать глобально фиксированной, либо задавать в голосовании (однако, с какими-то разумными минимально-возможными значениями).

_________________
7BF9BDC16428245B55CF04EF4A609CA44E0F6E68


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 окт 2011, 18:32 
Не в сети

Зарегистрирован: 27 авг 2011, 22:36
Сообщения: 460
Андрей писал(а):
В данном случае возможно несколько проблем:
- если не хватает голосов, то клиент в определенную завершающую часть резервного периода отправляет в сеть запрос на голоса данного голосования. Если по окончанию этого периода голосов все еще не хватает, то недостающие голоса признаются утерянными (аналог испорченного бюллетеня). Если кто-то из проголосовавших не обнаружит своего голоса в результатах, можно провести отслеживание по цепочке отправки от данного пользователя.

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

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

_________________
AF4B DFB0 0E41 2F7A 09FD 4971 96F0 B176 EA1C DD85


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 окт 2011, 18:42 
Не в сети

Зарегистрирован: 04 окт 2011, 20:10
Сообщения: 32
Андрей писал(а):
Этот ключ одноразовый - генерируется пользователем на время одного голосования. Примерно то-же самое что и одноразовый код в предыдущем варинате, только более защищенно. Этим ключем будут шифроваться данные о голосе.

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

Вот не понимаю, зачем нужен этот ключ. Зачем шифровать голос, а потом расшифровывать? Это совершенно бесполезно для нас. Ключ годится, когда нужно передать информацию какой-то личности. А здесь тема другая: голос человек передает обществу.
Если, допустим, голос привязан к подписи (чтобы не быть анонимным) и (пока) зашифрован - то когда и как его расшифровывать? Кто должен этим заниматься? Я так понимаю, что все - ведь централизованного сервера нет. Но на этом этапе, в любом случае, всегда есть вероятность напороться на злоумышленника, и возможность
  • если алгоритм не отделяет голос от подписи ДО расшифровки, то записать пару "расшифрованный голос - подпись" в папочку и нарушить анонимность;
  • либо, если алгоритм так или иначе отделяет голос от подписи ДО расшифровки - кинуть фальшивый, лишний расшифрованный голос.
Таким образом, это вообще не нужно, и передача ключей - просто лишняя сложность.

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

Имхо, слишком муторно и зависит от человеческого фактора.

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

У меня возникли еще некоторые вопросы по работе пиринговых сетей, подписей и шифрования.
Если мои ответы на них верны (то есть я правильно понимаю принцип) - то я придумала, как, во-первых, каждому отслеживать путь своего голоса, во-вторых, сохранять полную анонимность, в-третьих - сразу блокировать лишние голоса, а не просто наказывать их авторов постфактум (когда вброс уже состоялся).

1. Допустим, я соединилась в пиринговой сети с некоторой машиной, или она хочет мне что-то передать. Могу ли я залезть к ней на жесткий диск, скачать себе определенный файл, и в нем спокойно покопаться?
2. Все доступы к чужим файлам - только для чтения? Или есть хоть какая-то возможность испортить и напаскудить?
3. Правильно ли я понимаю, что машина, выходящая в сеть, может иметь весьма различное количество доступных ей узлов? Кто-то имеет доступ к миллионам, а кто-то находится "на отшибе нашего городка" и может даже не выйти на всех участников голосования, а только на часть (т.е. не иметь возможности _последовательно_ дойти до _всех_).
В принципе, чем меньше у тебя доступных узлов, тем больше вероятность, что твой голос не дойдет до всех. Может случиться и так, что тебе доступен только один узел, и он - злоумышленник. Тогда он твой голос не передаст.
4. Я еще не совсем хорошо понимаю работу с цифровой подписью. Верно ли, что существует:
- уникальный идентификатор подписи, на который можно ссылаться (такой-то передал мне то-то);
- пароль от подписи;
- возможность подписать своей подписью какую-то строчку, например "я лягу на рельсы", и выдать публике результат (такая возможность есть только у того, кто владеет паролем от подписи);
- возможность расшифровать результат и убедиться, что это - действительно строчка "я лягу на рельсы", подписанная именно этим человеком с этим идентификатором.
5. Шифрование. Вот есть возможность пары публичный - секретный ключ. А можно ли сгенерировать ключ заведомо БЕЗ возможности расшифрования? При этом чтобы всегда была функция проверки - возможность убедиться, что данный конкретный ключ - он БЕЗ возможности расшифровки, что секретной пары для него не существует в природе. Ну типа как md5, но ведь md5 теоретически можно сбрутить. Есть ли что-то более надежное?

Если все так, как я себе представляю, то я придумала, как, во-первых, каждому отслеживать путь своего голоса, во-вторых, сохранять полную анонимность, в-третьих - сразу блокировать лишние голоса, а не просто наказывать их авторов постфактум (когда вброс уже состоялся).

_________________
[url="http://povischuk.livejournal.com/7922.html"]"... И во многих царствах были олигархи иудейские, которые продавали и покупали...
И пилил Вайншток сорок дней и сорок ночей, и увозил золото колесницами...
Многие же тогда говорили: вот, по закону Моисееву, не дозволено пилить в субботу,.."[/url]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 окт 2011, 19:12 
Не в сети

Зарегистрирован: 17 июн 2011, 18:14
Сообщения: 2543
yurial писал(а):
Андрей писал(а):
В данном случае возможно несколько проблем:
- если не хватает голосов, то клиент в определенную завершающую часть резервного периода отправляет в сеть запрос на голоса данного голосования. Если по окончанию этого периода голосов все еще не хватает, то недостающие голоса признаются утерянными (аналог испорченного бюллетеня). Если кто-то из проголосовавших не обнаружит своего голоса в результатах, можно провести отслеживание по цепочке отправки от данного пользователя.

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

Думаю, разрывов в сети можно попробовать избежать используя промежуточные сервера.

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

По данному описанию так и получается. Голос отправляется на втором шаге, а открытый ключ - почти на последнем.

_________________
7BF9BDC16428245B55CF04EF4A609CA44E0F6E68


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 окт 2011, 19:13 
Не в сети

Зарегистрирован: 17 июн 2011, 18:14
Сообщения: 2543
povischuk писал(а):
Вот не понимаю, зачем нужен этот ключ. Зачем шифровать голос, а потом расшифровывать? Это совершенно бесполезно для нас. Ключ годится, когда нужно передать информацию какой-то личности. А здесь тема другая: голос человек передает обществу.
Если, допустим, голос привязан к подписи (чтобы не быть анонимным)

Не путайте, пожалуйста. Мы обсуждаем исключительно вариант тайного/анонимного голосования. Т.к. с открытым голосованием все очевидно. Ключ нужен именно для сохранения анонимности.

_________________
7BF9BDC16428245B55CF04EF4A609CA44E0F6E68


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 06 окт 2011, 19:29 
Не в сети

Зарегистрирован: 17 июн 2011, 18:14
Сообщения: 2543
povischuk писал(а):
Имхо, слишком муторно и зависит от человеческого фактора.

Юрий (yural) предложил автоматический вариант. Я свой предложил исходя из того, что голоса уже открыты. Учитывая что они все еще будут закрыты на момент проверки, необходимость в какой-то комиссии отпадает и можно все это делать автоматически.

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

Думаю что на этапе конечных расчетов результатов голосования (на клиентах, конечно) будет производиться согласование данных о голосовании между узлами. Механизм такого согласования еще предстоит придумать.

povischuk писал(а):
У меня возникли еще некоторые вопросы по работе пиринговых сетей, подписей и шифрования.
Если мои ответы на них верны (то есть я правильно понимаю принцип) - то я придумала, как, во-первых, каждому отслеживать путь своего голоса, во-вторых, сохранять полную анонимность, в-третьих - сразу блокировать лишние голоса, а не просто наказывать их авторов постфактум (когда вброс уже состоялся).

1. Допустим, я соединилась в пиринговой сети с некоторой машиной, или она хочет мне что-то передать. Могу ли я залезть к ней на жесткий диск, скачать себе определенный файл, и в нем спокойно покопаться?

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

povischuk писал(а):
2. Все доступы к чужим файлам - только для чтения? Или есть хоть какая-то возможность испортить и напаскудить?

Никакого доступа к чужим файлам не будет вообще.

povischuk писал(а):
3. Правильно ли я понимаю, что машина, выходящая в сеть, может иметь весьма различное количество доступных ей узлов? Кто-то имеет доступ к миллионам, а кто-то находится "на отшибе нашего городка" и может даже не выйти на всех участников голосования, а только на часть (т.е. не иметь возможности _последовательно_ дойти до _всех_).
В принципе, чем меньше у тебя доступных узлов, тем больше вероятность, что твой голос не дойдет до всех. Может случиться и так, что тебе доступен только один узел, и он - злоумышленник. Тогда он твой голос не передаст.

Если есть доступ в интернет, то количество узлов в принципе не может быть чем-то ограничено. Может быть ограничена скорость передачи информации и только.

povischuk писал(а):
4. Я еще не совсем хорошо понимаю работу с цифровой подписью. Верно ли, что существует:
- уникальный идентификатор подписи, на который можно ссылаться (такой-то передал мне то-то);

Вы, вероятно, имеете ввиду идентификатор ключа который называется "отпечатком ключа". Последовательность из 20 шестнадцатиричных цифр. У меня в подписи такой стоит.

povischuk писал(а):
- пароль от подписи;

Пароль от ключа. Обычно называется "ключевая фраза". Она не подлежит разглашению ни в каком случае т.к. привязывает вашу личность именно к вашему персональному ключу.

povischuk писал(а):
- возможность подписать своей подписью какую-то строчку, например "я лягу на рельсы", и выдать публике результат (такая возможность есть только у того, кто владеет паролем от подписи);

Подписывать можно любую информацию - тексты, картинки, видео, аудио, абстрактные данные. На это нет никаких ограничений.

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

Есть вариант "clearsign" когда при подписывании текста, сам текст тоже присутствует в подписи в открытом виде. Тогда прочитать что именно подписано можно и без проверки подписи. Но можно подписать и без открытия текста.

povischuk писал(а):
5. Шифрование. Вот есть возможность пары публичный - секретный ключ. А можно ли сгенерировать ключ заведомо БЕЗ возможности расшифрования? При этом чтобы всегда была функция проверки - возможность убедиться, что данный конкретный ключ - он БЕЗ возможности расшифровки, что секретной пары для него не существует в природе. Ну типа как md5, но ведь md5 теоретически можно сбрутить. Есть ли что-то более надежное?

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

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

povischuk писал(а):
Если все так, как я себе представляю, то я придумала, как, во-первых, каждому отслеживать путь своего голоса, во-вторых, сохранять полную анонимность, в-третьих - сразу блокировать лишние голоса, а не просто наказывать их авторов постфактум (когда вброс уже состоялся).

Возможно-ли это в вашем варианте с учетом моих ответов?

_________________
7BF9BDC16428245B55CF04EF4A609CA44E0F6E68


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 окт 2011, 00:38 
Не в сети

Зарегистрирован: 04 окт 2011, 20:10
Сообщения: 32
Андрей писал(а):
Вы имеете ввиду, вероятно, что потом можно будет этим-же ключем зашифровать тот-же текст и получить те-же самые зашифрованные данные? Если так, то вы ошибаетесь. В современной криптографии применяются специальные меры для того что-бы такого никогда не случалось. А если так, то описанная вами процедура не имеет смысла.

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

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

_________________
[url="http://povischuk.livejournal.com/7922.html"]"... И во многих царствах были олигархи иудейские, которые продавали и покупали...
И пилил Вайншток сорок дней и сорок ночей, и увозил золото колесницами...
Многие же тогда говорили: вот, по закону Моисееву, не дозволено пилить в субботу,.."[/url]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 окт 2011, 07:54 
Не в сети

Зарегистрирован: 23 сен 2011, 07:11
Сообщения: 42
Что-то я запутался в топике. Много обсуждений, но несколько не верные. Может мне только кажеться, но свои мысли изложу.
Есть несколько требований к системе и есть несколько условий, которые должны выполнятся.
Требования:
Голосования могут быть открытыми (условно) и анонимными (полностью).
Что это знаничит - открытые - это когда у любого голоса есть возможность идентифицировать кто его оставил. Это информация может быть частично закрытой - т.е. не покидать сервера, например, но в таком случае сохраняется возможность извлеч информацию из сервера.
Второй вариант - анонимное голосование. Когда результат голоса есть, но кто как голосовал установить нельзя. Т.е. даже в рамках сервера не имеется информации о том, кому данный голос в действительности принадлежал.
Человек должен иметь возможность проверить, что его результаты голосования учтены и были правильно посчитаны. Так же человек в любом случае должен получить оповещение в системе, если его голос где либо голосовал (что бы выявлялись случаи, когда за человека проголосовали, а он об этом и не знал).
Постулаты:
Кто-то все равно считает голоса. А значит имеет доступ к части информации. Подразумевается, что счетчиком голосов будет компьютер, но тут есть несколько вопросов - что компьютер имеет доступ к результатам голосования, что может быть опасно - так как программу можно раскурочить и получить доступ к результатам (если они были не полностью анонимными), а если были анонимными - то и фальсифицировать их (накрутить).
В данном месте я вижу, что у каждого голосования должны быть ответственные лица, которые отвечают за сохранность системы результатов голосования). Т.е. в данном случае накладываем требование, что для подсчета голосов требуется участие некоторого комитета, которые предоставляют свои ключи реализации подсчета голосов.
Вариант, когда каждый участник голосования входит в подобный коммитет не пройдет – слишком много людей. Я позже изложу, как в моем понимании такая система работать должна (с комитетом).
Т.е. еще раз, самое главное – кто-то должен считать голоса.
Подсчет голосов подразумевает не только предоставление статистики, но и возможность повторного пересчета или поднятие истории, откуда взялся конкретный голос (если это не анонимный голос, но по нему у меня есть несолько идей отдельных).
Что означает анонимный голос? Что есть результат (выбор одной из опций голосования) но невозможно определить, который из пользователей системы голосовал этим голосом.
При этом должно учитываться, кто принимал участие в голосовании. Т.е. информация о том, кто голосовал в системе есть, а вот как голосовали – нет. Это необходимо для того, что бы не появлялись «левые» голоса.
Как это может работать:
Состав системы будет состоять из программного обеспечения на локальном компьютере человека и распределенной сети серверов.
В случае открытого голосования (т.е. когда каждый голос ассоциирован с конкретным человеком) все достаточно просто.
1) Голосование создается Группой заинтересованных лиц (комитетом) и на него назначаются ответственные лица, отвечающие за подсчет голосов. Так же определяются размер кворума ответственных для подсчета голосов (например для подсчета голосов требуется не менее 70% ответственных).
2) Голосование доступно для конечных пользователей и они производят голосование. При этом происходит следующее. Результат голосования подписывается личной подписью голосовавшего. Далее подписанный результат голосования шифруется ключами ответственных за подсчет, таким образом только ответственные могут расшифровать и просмотреть результат голосования. При шифровании учитываем, что сообщение должно расшифровываться кворумом ответственных, т.е. не всеми, не одним, а определенным процентом. Это можно сделать, например, путем внесения избыточности в подписанный результат голосования (до 100% минус процент кворума), разбиванием полученного блока по количеству ответственных и шифрованием полученных блоков по отдельности ключами ответственных за подсчет. Так же данное сообщение шифруется дополнительно подписью пользователя. Т.е. пользователь может так же расшифровать свое сообщение, не только коммитет.
3) Ключи отправляются на сервера и там хранятся до подсчета голосов. В локальной программе у пользователя статус голосования – голос отправлен на сервер. Естественно, сервер проверяет, может данный человек принимать голосование или нет, сверяясь со списком голосования. «Левые» голоса отбрасываются и голосуещему доставляется оповещение.
4) Для подсчета голосов ответственные собираются вместе и предоставляют серверу свои ключи для расшифровки. Для каждого голосования вполне могут быть использованы одноразовые ключи, которые генерятся для каждого голосования для каждого ответственного. Требование к серверу – он должен быть не скомпроментирован. Т.е. мы ему доверяем. С использованием данных ключей производится расшифровка результатов голосования и подствет голосов.
5) Результат голосования доводится до каждого пользователя – пользователь видит может посмотреть сколько голосов было отданно и был ли учтен его голос. Для этого сервер может по запросу пользователя вернуть информацию о том, что голос учтен или нет при подсчете и какой он был (т.к. он был зашифрован ключем голосующего, то возвращаем ему его запись, а он ее может дешифровать и сравнить).
В случае анонимного голосования немного все сложнее и есть потенциальные уязвимости для результата голосования.
При анонимном голосовании можно поступить так:
1) Первый шаг аналогичен открытому голосованию, т.е. формируется комитет, ответственные и определяется размер кворума.
2) При генерации голосования (подготовке к голосованию) ответственные предоставляют свои ключи (должны предоставить все), на сервере генерируются одноразовые идентификаторы в количестве возможных голосующих. Каждый одноразовый идентификатор комбинируется с идентификатором голосования, датой генерации (при необходимости – другой информации, например идентифицирующая информация сервера, на котором производилась генерация идентификаторов) и подписывается подписями всех отвественных. Это позволит исключить появление дополнительных ключей в будущем. Сгенерированная информация заносится в базу и формирует собой пул свободных идентификаторов.
3) Голосующий формирует у себя запрос на получение уникального идентификатора по голосованию. В этом запросе информация о голосовании подписывается своей подписью и отправляется на сервер. Сервер в ответ выделяет из пула свободных идентификаторов один, перемещает данную запись в пул использованных идентификаторов, в базу голосования добавляет, что голосующий получил уникальный идентификатор (но сам идентификатор не указывается, только факт получения), а пользователю возращается идентифкар для голосования. Таким образом нет связи между голосующим и конкретным идентификатором, но есть запись, что глосующий хотел принять участие в голосовании. Процедура подобна выдаче бланка бюлютеня при голосовании. Сервер может для безопасности зашифровать подписанный идентификатор голосования ключем пользователя, т.к. он известен серверу, а пользователь у себя его расшифрует. Пользователю может по одному голосованию получить только один идентификатор.
4) Голосующий комбинирует одноразовый идентификатор с результатами голосования и шифрует сообщение ключами ответственных аналогично пункта 2 для открытого голосования, результат должен содержать уникальный идентификатор, сгенерированный голосующим
5) Результаты шифрования отправляются на сервер и там используются для подсчета голосов.
6) Как и в открытом голосовании ответственные собираются и производится подсчет голосов. Ответственные предоставляют свои ключи серверю, сервер с использованием ключей ответственных дешифрует поступившие голоса и проверяет для каждого сообщения правильность подписей на идентификаторе. Так же каждый учтенный голос проверяется, что бы идентификатор использовался один раз.
7) Для проверки результатов голосования голосующие обращаются к серверу и получают список всех анонимных идентификаторов и ассоциированные с ними уникальные идентификаторы, которые генерировались пользователями, а так же результаты голосования (выбор голосующего) по данному идентификатору. Сверяя идентификаторы с тем, что использовались пользователем, голосующий имеет информацию, был ли принят его голос и правильно ли учтены его результаты. Т.к. информация о связи идентификаторов с конкретным пользователем отсутсвует, то данная информация не компроментирует пользователя.
В смешаном голосовании все так же, комбинируются оба метода, только результат можно выводить в виде статистики, сколько было открытых голосов, сколько закрытых и т.д.
Можно предусмотреть возврат идентификатора в пул - идентификатор пометится как использованный и не будет приниматься к участию в голосовании (это если пользователь захотел голосовать открыто).
Нужны проверки на двойное голосование одним пользователем (анонимное голосование должно иметь преимущество).
Возможные проблемы – уход с сервера одноразовых идентификаторов при анонимном голосовании может решаться только оповещением голосующего, что он принимал участие в голосовании, когда у него фактически не было запроса на сервер. Т.к. все голосующие известны, то нужно всех оповещать о прошедшем голосовании и клиент у голосующего может сообщать, если голос его учавствовал в голосовании, но фактически запроса пользователем не посылалось. Само по себе это не преступление (пользователь мог переустановить программу и удалить у себя запросы на голосование), но может служить поводом к расследованию.
Сервис вполне может ложиться на распределенную систему.
Знаю, много написал, но коротко не умею. :) Прошу оценить идею.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 окт 2011, 11:49 
Не в сети

Зарегистрирован: 04 окт 2011, 20:10
Сообщения: 32
Dmitry, есть распределенная система - и есть система с сервером. Это разные вещи.
Принцип работы с сервером всем понятен, привычен, и алгоритмов реализации тут может быть море.
Тут мы пляшем от того, что сервер - это компьютер который открыт ВСЕМ и каждый может посмотреть его коды. Тогда предполагается, что он не пишет соответствие "избиратель - голос", не нарушает анонимность и не продает эти списки налево. За сервером следит некий администратор, получающий, скажем, зарплату из фонда, и исправляет любые проблемы, отчитываясь в этом сообществу.
Создать "распределенную сеть серверов" - не получится, потому что серверов не может быть много. Ведь за многими машинами не может сообщество уследить. То есть, они конечно распределенны в том смысле, как распределен, скажем, Гугл, но совсем не в том, в каком мы хотим тут :).
Мы-то в данном случае хотим обойтись вообще без сервера. Когда КАЖДЫЙ голосующий - и клиент, и сервер. И подсчет ведется ВЕЗДЕ. И система должна работать за счет того, что БОЛЬШИНСТВО участников - честные, а злоумышленников легко поймать за руку и наказать.
Конечно, у голосования есть администратор - тот, кто его инициирует. Он, например, выбирает случайный узел для текущих официальных итогов, распределяет по сети список найденных злоумышленников. Все это он заверяет своей подписью - что это он сказал.
Но сервер для этого не нужен.
Вот такую систему мы тут пытаемся построить.
А с сервером все понятно. :twisted:

_________________
[url="http://povischuk.livejournal.com/7922.html"]"... И во многих царствах были олигархи иудейские, которые продавали и покупали...
И пилил Вайншток сорок дней и сорок ночей, и увозил золото колесницами...
Многие же тогда говорили: вот, по закону Моисееву, не дозволено пилить в субботу,.."[/url]


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 141 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 15  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB