Распределенная система
Содержание |
Концепция
Общие сведения
- Изначально по сети будут распространятся IP адреса работающих систем;
- Подключение пользователя к системе будет состоять из:
- Генерации персонального ключа;
- Генерации транспортного ключа;
- Отправки в сеть публичной части персонального и транспортного ключа;
- Запрос из сети анонсов (краткой информации) об имеющихся субъектах;
- Любой пользователь может подписать доверие к достоверности данных ключа после соответствующей проверки достоверности указанных в нем данных;
- Любой пользователь может подписать доверие к подписи ключа;
- Любой пользователь может подписать недоверие к достоверности ключа после неудачной процедуры удостоверения;
- Любой пользователь может подписать недоверие к подписи ключа;
Субъекты голосований
- Субъекты верхнего уровня могут создаваться любым пользователем;
- Подсубъекты создаются по результатам голосования в основном субъекте по правилам данного субъекта. При этом фильтрация в них должна настраиваться так что-бы все пользователи основного субъекта стали пользователем одного из вновь образованных;
- Необходимая степень авторизации пользователя (распределение подписей доверия и недоверия у ключа) будет регулироваться в свойствах субъекта;
- В качестве одного из фильтров субъекта может выступать:
- Фильтр по любому значению в ключе пользователя;
- Ссылка на сервер авторизации субъекта голосования;
- Изменение свойств субъекта голосования будет производиться только с помощью голосования;
- Возможны "закрытые" субъекты голосований, данные которых в общей сети будут шифроваться и будут доступны только участникам субъекта;
Голосования
- Голосование может инициироваться любым пользователем субъекта голосований;
- Процедура тайного голосования:
- Инициирование голосования;
- Отправка пользователями по сети голоса в голосовании (зашифрованный голос + подпись разными путями);
- По окончании голосования необходим некоторый резервный период на распространение голосов по сети;
- По окончании резервного периода начинается "период проверки голосов и подписей", в течении которого каждый клиент проверяет наличие у него всех голосов и подписей (соответствие количества голосов количеству подписей). В данном случае возможно несколько проблем:
- если не хватает голосов, то клиент синхронизирует "голоса" с своими соседями. Если по окончанию этого периода голосов все еще не хватает, то недостающие голоса признаются утерянными (аналог испорченного бюллетеня). Если кто-то из проголосовавших не обнаружит своего голоса в результатах, можно провести отслеживание по цепочке отправки от данного пользователя.
- если голосов больше чем подписей, тогда клиент синхронизирует "списки голосовавших" со своими соседями. Если по окончанию резервного периода подписей все еще не хватает, инициируется автоматическая процедура обнаружения неподписанных голосов (как Юрий описал в последнем сообщении);
- Если проверка соответствия количества голосов и подписей проходится, начинается третий период - "период открытия данных о голосах". В течении которого клиенты в автоматическом режиме (можно с подтверждением пользователем) рассылают одноразовые публичные ключи которыми можно расшифровать их голос. Голоса для которых публичный ключ не был получен не учитываются при подсчете голосов.
- Каждый клиент на основании имеющихся у него данных формирует результат голосования.
- Клиент первым посчитавший результат распространяет его.
- Если у какого либо из участников результат не совпадает с полученным - инициируется процедура синхронизации и несовпадения ликвидируются. Если несовпадений в исходных данных нет, или они не верны, клиент начинает рассылать свои результаты. Такое поведение будет способствовать собственному подсчету голосов каждым из участников.
- Открытое голосование будет происходить аналогичным образом, но подпись "об участии в голосовании" так же будет содержать идентификатор публичного ключа для расшифровки голоса, что позволит определить выбор каждого голосующего.
Объяснение процедуры тайного голосования
Прежде всего, предполагается наличие у пользователя следующих вещей:
- Главного авторизованного ключа
- Одноразового НЕ персонализированного ключа (пара открытый/закрытый ключ) для каждого отдельного голосования. До окончания голосования публичный ключ этой пары держится в тайне.
Пользователь голосует формируя два блока данных:
- Свой голос в голосовании, зашифрованный одноразовым ключем. Этот блок подписывается обычной персонализированной подписью пользователя.
- Свою подпись об участии в голосовании. Формируется обычным персонализированным ключем.
Эти блоки от пользователя должны уходить по разным каналам (для того что-бы получатель не смог их сопоставить и раскрыть тайну голоса в последствии). Далее эти два блока отправляются по сети от пользователя. Подпись в голосовании отправляется обычным образом - по всем доступным каналам. Дальше по цепочке она распространяется по сети (возможно, со случайной задержкой на узлах). Голос от проголосовавшего клиента отправляется по всем остальным каналам (по которым НЕ отправлялась подпись). На узлах, которые получат пакет с голосом, запоминается его подпись, голос извлекается в оригинальном виде (зашифрованном), подписывается персональным ключем пользователя данного узла и отправляется далее. По окончанию голосования все пользователи распространяют через сеть свои публичные ключи, в помощью которых можно расшифровать их голос. Если обнаруживаются голоса, которые не удалось расшифровать, по цепочке их передачи (при сотрудничестве всех участников цепочки) можно вычислить того, кто не распространил свой ключ. Так-же при обнаружении несоответствия количества подписей в голосовании количеству голосов инициируется процедура раскрытия путей следования ключей и выясняется источник "вброса". Далее возможны какие-то меры воздействия на владельца обнаруженного ключа-нарушителя.
Взаимный контроль
Взаимный контроль означает то, что в системе нет контролирующих органов или отдельных людей для этого, которые обладают большими возможностями чем остальные. Для этих целей в системе будет служить система подписания своей ЭЦП определенных данных других пользователей. Подписываемый таким образом пакет будет состоять из следующих частей:
- Тип подписи:
- Удостоверение данных
- Уровень доверия к подписи
- Удостоверение данных субъекта в ключе пользователя
- Ссылка на подписываемые данные:
- Идентификатор или список идентификаторов в ключе пользователя
- Отпечаток ключа пользователя
- Уровень доверия указанным данным: число от -10 (полное недоверие) до 10 (полное доверие)
- Текстовый комментарий
Подтверждение достоверности идентифицирующих данных
Данный тип предназначен для подтверждения достоверности идентифицирующих данных пользователя. Как минимум, идентифицирующего хэша. После проверки пользователем достоверности идентифицирующего хэша он может его подписать сформировав и отправив в сеть соответствующий пакет. Таким-же образом, если у пользователя возникает обоснованное сомнение в достоверности каких-либо идентифицирующих данных пользователя, он может отправить аналогичный пакет, указав при этом отрицательную величину уровня доверия. При этом ему следует иметь ввиду, что если он будет отправлять необоснованные подписи, то он имеет возможность получить от других пользователей недоверие к своей подписи, что ослабит или отменит ее действие.
Установка доверия к подписи
Вы можете указать свой уровень доверия к подписи определенного пользователя и/или ключа. Этот механизм призван защитить систему от необоснованных действий со своей подписью. Ее действие может быть признано ничтожным при наличии соответствующего количества подписей, устанавливающих низкий уровень доверия к ней.
Удостоверение данных субъекта в ключе
Некоторые субъекты для своих участников могут требовать наличия в ключе определенных данных, подписанных участниками субъекта (например, просто идентификатора субъекта). По этим данным, например, может определяться имеет-ли право данный пользователь голосовать в субъекте.
Другие типы подписей
Данный механизм достаточно универсален и хорошо расширяем. Вероятно, в будущем будут появляться и другие типы подписей, призванные решить другие задачи саморегуляции сообщества.
Безопасность
Подделка голоса при открытом голосовании
Эта проблема решается тем, что каждый голос подписывается персональной ЭЦП каждого голосующего. Подделать ЭЦП на данном этапе развития вычислительной техники считается невозможным.
"Вброс" голосов при открытом голосовании
Т.к. каждый голос подписывается персональной ЭЦП, предварительно заверенной определенным образом, вброс голосов возможен только при подделке и мошенническом удостоверении GPG ключа.
Анонимность при тайном голосовании в распределенной системе
В данном варианте анонимность будет обеспечиваться многими факторами:
- Голос будет передаваться в систему в зашифрованном виде. Шифрование будет осуществляться одноразовым анонимным ключем.
- Расшифровка голоса будет производиться лишь по окончанию голосования при признании его состоявшимся (отсутствия разницы в поданных голосах и подписях об участи в голосовании).
- Цепочка, раскрывающая анонимность голоса может быть отслежена лишь в случае согласия большого числа участников сети. Что является крайне маловероятным событием после завершения голосования.
Подделка или "вброс" голоса при тайном голосовании в распределенной системе
В следствии того, что путь голоса по сети будет документироваться, незаметно вбросить его в систему будет нереально. При таком вбросе будет наблюдаться несоответствие количества поданных в голосовании голосов и количества подписей в нем. Это является следствием того, что никто не может гарантированно не допустить в распределенную сеть какой-то определенный голос. В силу принципа распространения в ней информации. При обнаружении такого несоответствия еще ДО открытия данных о зашифрованных голосах голосование признается не состоявшимся и автоматически инициируется сбор информации о путях всех пакетов. А т.к. они по всему пути прохождения подписываются авторизованными подписями, источник проблемы в виде "крайнего" персонального сертификата обнаруживается достаточно быстро. Что немаловажно, при такой процедуре совершенно не страдает тайна голоса (смотрите начало абзаца). Дальнейшие действия по отношению к владельцу данного сертификата могут носить различный характер. При такой системе, так-же невозможно вбросить в систему голос, не подписанный заверенным определенным образом персональным ключем. Он просто не начнет распространяться по сети.
Подделка ключей GPG
На данный момент этот вопрос пока еще один из самых неясных. Предполагается что достоверность ключа пользователя будет подтверждаться подписыванием его другими пользователями. Однако, пока не совсем понятно каким образом определять ситуацию что один пользователь нагенерировал большое количество ключей и подписал их другими им-же сгенерированными. Возможен подход к этому вопросу с двух сторон:
- Анализ сети доверия (сети подписания ключей) и выявление подозрительных ключей на основе каких-то признаков (их еще предстоит выработать);
- Создание сервиса для координации действий по подписыванию ключей. С его помощью любой пользователь, которому не удалось с кем-то договориться о проверке ключа обычным способом и возникло подозрение что ключ соответствует виртуальному пользователю, может инициировать в системе процедуру проверки ключа другого пользователя. При этом все шаги такой проверки будут регистрироваться в системе и по каждому шагу информация будет отправляться с сервера и проверяющему и проверяемому (это исключит возможные злоупотребление со стороны проверяющего).
Первый способ будет защищать сеть доверия от проникновения виртуалов на этапе входа ключа в систему. Второй способ - это способ избавиться от виртуалов, каким-либо образом проникших в систему. Подразумевается что уличенные в создании виртуалов реальные пользователи будут лишены права подписания других ключей. Физически пользователь сможет подписывать другие ключи, но система будет игнорировать информацию о таких подписях. Так-же, "черный список" таких ключей, которым запрещено подписывать другие ключи, будет вывешиваться в общем доступе.
Получение достоверных подписей
Непонятно каким образом получить достоверные подписи граждан РФ. Не все настолько хорошо работают с компьютером, чтобы самостоятельно установить необходимое программное обеспечение, помнить пароли, хранить закрытые ключи. Без решения этой проблемы система носит лишь академический характер и лишена практического смысла