Процесс голосования

Процесс голосования в системе Waves Enterprise Voting разделен на функциональные блоки с привязкой к её архитектуре и представлен на схеме ниже.

Схема процесса голосования в системе Waves Enterprise Voting

Схема процесса голосования в системе Waves Enterprise Voting

В соответствии с назначением функциональных блоков, процесс голосования состоит из следующих этапов:

Формирование повестки

Голосование в системе Waves Enterprise Voting начинается с формирования повестки администратором.

Повестка содержит:

  • общее описание темы;

  • время проведения;

  • приложенные документы;

  • список вопросов голосования и вариантов ответа.

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

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

Исходное содержание повестки не публикуется в блокчейне из соображений конфиденциальности. Никто кроме участников голосования не имеет возможности узнать не только итоговых результатов, но и списка вопросов. Конфиденциальные данные сохраняются в локальной базе сервера и доступны по запросу каждому из участников при успешной аутентификации.

Формирование и публикация MainPublicKey

По завершениии формирования повестки в системе определяется список доступных DecryptService и формируется главный ключ голосования - MainPublicKey. MasterServer получает из блокчейна данные о подготовке нового голосования, после чего определяет перечень доступных DecryptService и отправляет каждому из них запрос на создание ключевой пары, которая будет использована в этом голосовании. Каждый DecryptService возвращает открытую часть созданного ключа в ответ на запрос MasterServer.

MasterServer формирует главный ключ голосования MainPublicKey из открытых ключей, полученных от DecryptService и публикует его в блокчейн на адрес голосования. MainPublicKey используется участниками голосования для шифрования заполненных бюллетеней.

Важно

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

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

После формирования и публикации MainPublicKey в системе Waves Enterprise Voting имеются все необходимые данные для проведения голосования:

  • исходный текст повестки голосования в базе данных сервера;

  • хеш повестки и главный ключ голосования в блокчейне.

Проведение голосования

Голование проводится по следующему сценарию:

  1. Пользователь получает уведомление о том, что в системе Waves Enterprise Voting создано новое голосование, в которое он включен как легитимный участник. Приложение запрашивает у сервера исходный текст повестки голосования. Запрос подписывается ключом пользователя.

Важно

Повестку получают только пользователи, являющиеся участниками голосования.

  1. Получив текст повестки, приложение вычисляет его хеш. Это позволяет гарантировать участнику голосования, что в отправленный документ не были внесены изменения. Таким образом, он будет высказываться именно по тем вопросам, которые были предложены к голосованию администратором.

  2. Убедившись в подлинности повестки, участник голосования:

  • заполняет бюллетень;

  • шифрует бюллетень, используя MainPublicKey;

  • сохраняет бюллетень в блокчейн, подписывая транзакцию своим ключом.

  1. Все участники системы Waves Enterprise Voting видят транзакцию и понимают, что участник проголосовал. Но, в связи с тем, что закрытого ключа, соответствующего MainPublicKey, нет ни у одного из участников системы Waves Enterprise Voting, определить каким образом проголосовал участник невозможно.

  2. По истечению периода голосования, указанного администратором, новые транзакции от участников голосования отклоняются системой Waves Enterprise Voting.

Схема проведения голосования

Схема проведения голосования

Подведение итогов голосования

После завершения голосования, сервера системы Waves Enterprise Voting приступают к подсчету результатов. В связи с тем, что ни один из DecryptService не имеет возможности расшифровать бюллетени участников, подведение итогов голосования происходит без расшифровки. Это возможно благодаря использованию техник гомоморфного шифрования, когда операция сложения зашифрованных величин выдает зашифрованное значение их фактической суммы. Таким образом, каждый DecryptService независимо получает зашифрованные итоги голосования, учитывающие голоса всех участников, но не имеет возможности определить каким образом голосовал тот или иной участник.

\[ENCRYPTED (A) + ENCRYPTED (B) = ENCRYPTED (A + B)\]

Затем каждый DecryptService приступает к расшифровке итогов голосования своим закрытым ключом, открытая часть которого ранее использовалась при создании MainPublicKey. В результате расшифровки DecryptService получают не читаемый текст с результатами, а всего лишь предварительный итог процесса. Процесс расшифровки можно представить как поочередное снятие слоев шифрования с результатов голосования. Каждый DecryptService публикует свой промежуточный результат процесса расшифровки в блокчейне.

Важно

Итоговые результаты голосования в читаемом виде возможно получить только при использовании предварительных результатов расшифровки каждого из DecryptService.

Схема подведения итогов голосования

Схема подведения итогов голосования

MasterServer агрегирует результаты расшифровки, полученные каждым DecryptService, вычисляет и публикует итоговые результаты. Для того, чтобы иметь возможность расшифровать итоги голосования, даже в случае выхода из строя одного или нескольких серверов, в системе предусмотрена возможность использования схемы шифрования «К из N». Таким образом, для формирования главного ключа используется N DecryptService, а для расшифровки итогов достаточно участия K < N серверов.