Идея в деталях
Распределенность и независимость
У данной системы существует потенциальные противники, которые будут заинтересованы в том, что-бы она не могла функционировать. При использовании варианта реализации системы с размещением ее на сервере или в системе серверов отключить ее будет относительно просто - отключить соответствующие сервера или провести атаку типа DDoS (Distributed Denial of Service) на эти сервера. Кроме того, при использовании существующей системы имен DNS злоумышленники могут украсть или забрать доменное имя, используемое сервисом.
Поэтому мы пришли к выводу, что единственным жизнеспособным вариантом будет система, лишённая этих уязвимых элементов - распределенная система клиентов (программ устанавливаемых на пользовательских компьютерах), работающих по принципу P2P (peer-to-peer). Из существующего ПО, реализующего этот принцип, можно назвать torrent сети или skype.
При этом не будет единого центра и все взаимодействие будет идти между клиентами напрямую или через другие клиенты. Информация при этом будет храниться в сети “размазанной” по многим компьютерам так, что выключение некоторых из них не приведет к недоступности информации.
Вся информация в системе подписываеться с помощью персональных ключей пользователей или ключей, связанных с ними (исключение - тайные голосования, но о них ниже). В качестве средства шифрования используется открытая система криптографии GnuPG. Это позволит избежать наличия “закладок” или иных уязвимостей, свойственных “официальным сертифицированным” системам криптографии.
Идентификация и саморегулируемость
Кроме уязвимости решения с серверами или DNS именами существует уязвимость, связанная с возможностью существованием особых людей, на которых может базироваться что-то из глобальных функций системы. На таких людей можно надавить или подкупить. И тогда в системе будут те-же манипуляции и подделки что и в реальности. Поэтому, по нашему мнению, единственным способом управления системой является самоуправление.
Для идентификации пользователей с сохранением анонимности в системе используется специальный механизм “идентифицирующего хэша”. Определенный фиксированный набор персональных данных “зашифровывается” использую хэш-функцию от него. При этом “расшифровать” эти данные невозможно. Но при наличии исходных данных можно проверить что хэш соответствует этим данным.
Подтверждать принадлежность этих данных и ключа определенному человеку будут обычные участники этой системы. Для этого им необходимо будет очно проверить соответствующие документы данного человека, проверить соответствие идентифицирующего хэша указанным документам и, при совпадении, произвести в системе процедуру удостоверения этих данных с помощью своей ЭЦП. Таким образом, сообщество будет само контролировать идентификацию пользователей.
С другой стороны, если кто-то обнаружит что чьи-то данные не соответствуют реальности и при этом данные кем-то подписаны, он может отослать в систему свою подпись о недоверии подписи данного участника. При этом снижается общий уровень доверия всем, кому этот участник подписал идентифицирующие данные. Таким образом, если кто-то захочет создать множество виртуальных участников сети - он сможет это сделать. Но при первой-же попытке кем-то посторонним проверить одного из этих “виртуалов” и подозрении на подделку, недоверие получит подписавший данные участников-виртуалов. Для облегчения выявления таких “сетей виртуалов” предполагается создание специальных плагинов к клиенту, которые смогут выявлять такие замкнутые сети доверия и выявлять злоумышленника. Второй раз данный злоумышленник сможет сделать что-то такое только после подделки официальных документов. Что уже более серьезно и является уголовно наказуемым деянием.
Если в сговор вступит группа злоумышленников, выявить всю такую сеть будет несколько сложнее, но обнаружить ее - так-же легко.
За счет такой обратной связи система будет достаточно эффективно саморегулироваться без особых людей или центров.
Логическая структура
В разных сообществах, использующих голосования, применяются различные способы допуска до них и различные правила самих голосований. Поэтому мы решили формализовать такие сообщества и определять их термином “субъекты голосований”. В нашей системе голосований возможно построение множества различных субъектов голосований со своими правилами и требованиями. Субъекты голосований могут быть вложенными. Т.к. более крупный субъект голосования может разбиваться на множество более мелких. При этом подразумевается что голосующие могут участвовать лишь в самых “мелких” из них. Таким образом, участники более крупных субъектов формируются исключительно из участников более мелких. Такая структура будет более организованно и позволит упростить процедуру идентификации участников.
В свойствах субъекта голосований при его создании должно быть определено каким образом будет определяться участие в нем голосующих. Например, правила субъекта могут требовать от участника наличия в его идентификаторе определенных данных. Это может быть информация о месте жительства, заверенное другими участниками сети. Или, например, идентификатор самого субъекта голосований, подписанный другими участниками этого субъекта. В свойствах субъекта может указываться необходимый для участия в субъекте уровень достоверности персональных данных пользователя, который зависит от количества других участников, удостоверивших его персональные данные.
Также в свойствах субъекта задаются способы голосований и способы подсчета результатов голосований. Т.к. все эти критерии будут едины для всех участников голосования, финальный подсчет результатов голосования будет производиться по одной и той-же процедуре у всех клиентов на собственных компьютерах. И в итоге, у всех будет получаться один и тот-же результат.
Безопасные и проверяемые тайные голосования
Тайные голосования в нашей системе основаны на том, что пользователь отправляет в сеть два пакета с данными. В первом - подпись о том, что он принял участие в голосовании. Во втором - зашифрованный одноразовым ключем голос данного пользователя. Отправляются эти данный от источника по разным каналам что-бы ни у кого не было возможности напрямую связать голос пользователя и его подпись об участии в голосовании.
Далее пакет с подписью участия распространяется по сети обычным образом без дополнительной обработки.
Пакет с зашифрованным голосом передается по другим правилам. Если он проходит через узел, владелец которого не принадлежит субъекту голосования, для котрого предназначен данный пакет, то пакет отправляется дальше "как есть". В противном случае используется более сложный порядок его обработки.
При отправке этого пакета, он подписывается текущим его отправителем - владельцем узла, с которого он уходит. При приеме такого пакета участником субъекта голосований, проверяется наличие ключа подписи пакета в базе открытых ключей, проверяется что подписавший пакет является участником данного субъекта, данные об источнике подписи заносятся в локальную базу, пакет данных без предыдущей подписи подписывается ключем пользователя данного узла и отправляется дальше. Если на этапе проверки обнаруживается что ранее подписавший данный пакет не принадлежит соответствующиему субъекту голосований, данный пакет просто игнорируется и дальше не передается.
Таким образом, при необходимости отследить источник какого-либо пакета, с согласия всех, через кого этот пакет проходил возможно отследить источник. Естественно, такое согласие будет даваться пользователями только в особых случаях. Например, если производился “вброс” голосов в каком-либо голосовании. Такой вброс обнаруживается простейшим сопоставление количества имеющихся в голосовании подписей об участии и количества поданных голосов.
Конкретные вброшенние голоса определяются тем, что каждый пользователь идентифицирует свой голос - указывает что конкретный пакет с голосом принадлежит именно ему. Учитывая что все они до этого момента зашифрованы, раскрытия тайны голос не случится.
После этого, по цепочке подписей производится отслеживание всех, оставшихся не идентифицированными, пакетов. При согласии большинства пользователей, цепочка прослеживается до источника и таким образом определяется персональный ключ источника вброса. После этого могут применяться различные санкции. Каждый отдельный пользователь может подписать недоверие данному ключу, подписать его исключение из данного субъекта голосования либо отреагировать другим, предусмотренным системой образом.
Если количество голосов будет соответствовать количеству подписей об участии и голосование признается состоявшимся, участниками голосования производится отправка в сеть одноразового открытого ключа, которым можно расшифровать его голос. После расшифровки всех голосов, каждый участник производит подсчет результатов и производится процедура согласования результатов. Если до определенного времени для каких-то голосов ключ не получен, они признаются испорченными.