Voting on mobile phone — Голосование с мобильного телефона
Creating of encrypted bulletin — Создание зашифрованного бюллетеня
Bulletin is placedin Wockchain — Размещение бюллетеня в блокчейне 

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

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

Вот пошаговое описание процесса:

A. Прежде всего, существует проблема идентификации пользователя и проверки его права голосовать. Это серьезный вопрос, который решается разными способами в зависимости от сегмента. Например:

  1. Для всеобщих выборов избиратель должен быть гражданином страны старше 18 лет и без судимостей. В этом случае нужно обеспечить интеграцию с системой идентификации пользователей, используемой в соответствующей стране.
  2. Другой пример: в сообществе OpenStack (программное обеспечение для создания и контроля общедоступных и частных облачных служб) голосование доступно тем, кто отправил код в определенный репозиторий GitHub в течение определенного периода.

B. Пользователь вошел в систему, и мы видим, что у него есть право голосовать. Теперь клиентское приложение для голосования (iOS, Android) генерирует секретный и открытый ключи, которые будут использованы для подписи транзакции голосования (будем называть ее бюллетенем).

C. Пользователь заполняет бюллетень в приложении.

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

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

Prover — Доказывающая сторона
Verifier — Проверяющая сторона

В приведенном выше примере алгоритм проверяет, владеет ли доказывающая сторона знанием «альфа». По сути, это пример интерактивной проверки, так как проверяющая сторона отправляет запрос c доказывающей стороне.

Однако эта схема также может быть реализована неинтерактивно путем передачи в качестве c хэша, например от a и b, в процессе отправки параметров a, b, r проверяющей стороне.

Этот принцип может быть реализован с помощью различных математических аппаратов. Мы выбрали систему Эль-Гамаля за ее свойства, рассматриваемые ниже.

Небольшое примечание. Описанный здесь алгоритм, используемый для шифрования всего блокчейна, обеспечивает анонимность при условии, что в конце не проводится дешифровка. Результаты голосования можно подсчитать без дешифровки данных, используя гомоморфные свойства системы шифрования Эль-Гамаля. Подробнее об этом ниже.

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

Did this answer your question?