Электронное сообщение о голосовании

Электронное сообщение о голосовании Праймериз

Как устроено электронное голосование простым языком и в рисунках

Время на прочтение

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

Но проблема в том, что система достаточно сложна и имеет свои нюансы. Если рассказывать далекому от IT человеку про все тонкости блокчейна и шифрования, то он послушает вас минуту, а потом развернётся и уйдет по своим делам, ничего не поняв. Это одна из главных проблем электронного голосования — 99% избирателей не понимают, как оно работает и где оно может нас обмануть.

Как говорил Стивен Хокинг, любая формула снижает количество читателей вдвое. Мне кажется, что любой IT-термин снижает аудиторию минимум втрое, поэтому я попытался не использовать профильные термины, а объяснил все «на пальцах» и в комиксе! Надеюсь, у меня это получилось.

Если Вы хотите узнать поглубже о проблемах электронного голосования, рекомендую статью Петра Жижина
:

Словарь метафор

Сундук — Зашифрованная информация

Замки и ключи — Ключи шифрования

Блокчейн — Витрина

Шаг 1. Формирование списка кандидатов

Демонстрация кандидатов и их номеров наблюдателям
Демонстрация кандидатов и их номеров наблюдателям

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

Шаг 2. Формирование ключей и замков

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

Ключи и замки
Ключи и замки
На самом деле, там чуть сложнее, но суть одна — этот ключ формируется и находится у представителей власти.

В 2022 году ключ разделили на пять частей. Перед подведением итогов голосования его соединяют обратно.

Хранителями пяти частей ключа стали:

• Руководитель Общественного штаба по наблюдению Вадим Ковалев

• Секретарь Мосгоризбиркома Владимир Попов

• Председатель Мосгордумы Алексей Шапошников

• Член ЦИК РФ Антон Лопатин

• Глава городского округа Троицк Владимир Дудочкин.

Почему именно они? Потому что

Шаг 3. Голосование

Подмена номеров кандидатов
Подмена номеров кандидатов

Избирателю в браузер от ДИТа приходит список кандидатов с их номером и половина замка. Но номера кандидатов не те, что были заявлены публично и лежат в витрине. Они заменены по какому-то внутреннему алгоритму
, какому именно — никто не знает, так как открытого кода нигде нет. Видимо, у них внутри есть секретная табличка связей реального номера кандидата и подставного.

Избиратель запирает бюллетень и прикладывает к сундуку ключ
Избиратель запирает бюллетень и прикладывает к сундуку ключ

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

Браузер избирателя закрывает сундук на двойной замок, состоящий из половинок Избирателя и половинки ДИТа
Браузер избирателя закрывает сундук на двойной замок, состоящий из половинок Избирателя и половинки ДИТа

Шаг 4. Секретное шифрование

ДИТ тайно засовывает настоящий сундук с бюллетенем в свой фальшивый
ДИТ тайно засовывает настоящий сундук с бюллетенем в свой фальшивый

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

Фальшивый сундук невозможно проверить независимым наблюдателям даже имея ключи от настоящего сундука
Фальшивый сундук невозможно проверить независимым наблюдателям даже имея ключи от настоящего сундука

Шаг 5. Расшифровка

ДИТ достает бюллетень из сундуков
ДИТ достает бюллетень из сундуков

Итак, голосование заканчивается, надо подводить итоги выборов.

ДИТ берет фальш-сундук из витрины и открывает его секретным ключом, достает из него настоящий сундук и ключ избирателя. Далее он берет свой ключ из пункта 2 и одновременно с ключом избирателя открывает ими двойной замок. И достает из сундука бюллетень с поддельными номерами кандидатов.

Шаг 6. Демонстрация итоговых результатов

Замена фальшивых номеров кандидатов на реальные
Замена фальшивых номеров кандидатов на реальные

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

Демонстрация итоговых результатов выборов. Нужно верить ДИТ на слово 🤷‍♂️
Демонстрация итоговых результатов выборов. Нужно верить ДИТ на слово 🤷‍♂️

Вывод

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

  • Первая проблема
    : У нас нет открытого кода. Мы не знаем, как он работает на самом деле, все, что вы видите на картинках, получено опытным путем через метод наружного исследования системы электронного голосования.

  • Вторая проблема
    : Мы не можем независимо понять, за кого проголосовал избиратель! Технически есть возможность подменить голоса за другого кандидата. Просто в табличке, где есть связка реальных и фальшивых номеров, можно поменять одно число, и голоса уйдут другому кандидату.

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

Поэтому мы считаем, что чтобы доказать, что ДИТ не подделывал результаты выборов, имея при этом все возможности для этого, должен:

  1. Опубликовать исходный код системы электронного голосования для независимого аудита.

  2. Опубликовать ключ шифрования, которым шифруют транзакцию перед попаданием в блокчейн.

  3. Опубликовать логи системы за время голосования и подсчета результатов.

  4. Опубликовать алгоритм или таблицу связей подставного и реального номеров кандидатов.

Если ДИТ не хочет этого делать, то это говорит только об одном — невозможно исключить вариант непубличной корректировки итоговых результатов голосования, и все заявления о блокчейне и шифровании — лишь пиар-ход.

P. S. Я попытался дать выжимку информации, и некоторые нюансы остались за кадром, если у вас остались вопросы, то смело задавайте их в комментариях — я отвечу на все.

Как устроена федеральная система дистанционного электронного голосования в России

Время на прочтение

В 2019 году к нам обратился «Ростелеком» с предложением принять участие в разработке бэкенда федеральной системы дистанционного электронного голосования (ДЭГ) на основе блокчейна. По сравнению с обычным голосованием ДЭГ на блокчейне явно дешевле и быстрее для подсчета голосов; оно также может обеспечить большую явку. Но при этом для большинства людей блокчейн-голосование — это черный ящик, а в голосованиях такого уровня ящик все-таки должен быть прозрачным. О том, как мы добились этого и выполнили другие требования заказчика, я расскажу далее в посте.

Электронное сообщение о голосовании

Требования к системе ДЭГ формировала Центральная избирательная комиссия. Вот их исходный список на 2019 год.

  • Запуск более 1000 голосований одновременно. Забегая вперед, скажу, что в 2021 году, пока что самом нагруженном для системы, мы одновременно запустили около 1700 голосований.

  • Обработка 10 млн голосов за 12 часов, то есть примерно 230 tps (транзакций в секунду). Впоследствии минимально допустимая скорость выросла в два раза, поскольку, на каждый голос пришлось отправлять дополнительную транзакцию — подтверждающую факт выдачи слепой подписи, то есть выдачи бюллетеня.

  • Гарантированный учет всех голосов.

  • Защита тайны голосования.

  • Защита промежуточных результатов голосования.

  • Защита итогов голосования.

  • Возможность проверки того, как все эти требования соблюдены.

К началу проекта у нас уже был готовый криптографический протокол и собственная блокчейн-платформа Waves Enterprise. Через смарт-контракты в ней можно было сразу развернуть всю необходимую логику и защитить данные в соответствии с требованиями. Но были нюансы.

  • Производительность (пропускная способность). Мы всегда уделяли ей внимание, но к 500 tps с ходу на смарт-контрактах были не готовы.

  • Гарантия исполнения транзакций. По умолчанию блокчейн очень старается исполнять все транзакции, но не гарантирует этого — принцип best effort basis. Для голосования так не пойдет, нужны железные гарантии. 

Далее я в общем виде опишу, как работает наша блокчейн платформа WE. Vote

для дистанционных голосований, а затем то, как мы ее изменили для ДЭГ, чтобы соответствовать требованиям к федеральной системе.

Исходная архитектура WE. Vote

Электронное сообщение о голосовании

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

Электронное сообщение о голосовании

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

Электронное сообщение о голосовании

Третьим идет классический клиент-серверный слой — веб-интерфейсы администратора и участника голосования, а также некоторые вспомогательные сервисы. Администратор управляет запуском/остановкой голосований через взаимодействие с криптосервисами. Участник отправляет бюллетень напрямую в ноду.

Изменения для федерального ДЭГ

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

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

В рамках федерального ДЭГ создание ключей частично вынесено в офлайн. У избирательной комиссии есть ноутбук со специальной утилитой, которая создает ключ. Затем по схеме разделения секрета Шамира

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

Электронное сообщение о голосовании

Следующий шаг — интеграция с компонентами, разработанными «Ростелекомом». Здесь мы создали очередь сообщений. В этой части системы нет ни особых нагрузок, ни секретных данных, сделано это только для упрощения интеграции.

Электронное сообщение о голосовании

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

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

В зависимости от предполагаемой нагрузки на дистанционное голосование, эта архитектура каждый год реплицируется на несколько ЦОД. Теперь — о том, как мы работали с «нюансами», отмеченными в начале поста.

Оптимизация пропускной способности

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

К началу проекта ДЭГ собственная платформа, мейннет Waves Enterprise, обеспечивал всего 10–20 транзакций в секунду. Предстояла большая работа, и мы начали исследование. 

Число транзакций в секунду обратно пропорционально размеру транзакции. На размер транзакции мы повлиять не можем, так как бюллетени предоставляет заказчик. Поэтому мы взяли за стандарт бюллетень с выбором одной партии из восьми и сосредоточились на оптимизации. Перевели транзакции в бинарный вид, научили ноды сериализовывать Protobuf и перекодировали криптографические константы в HEX. Ноды получили дополнительную нагрузку в связи с введением сериализации/десериализации, но в итоге пропускная способность выросла примерно в 10 раз.

Электронное сообщение о голосовании

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

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

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

Электронное сообщение о голосовании

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

Я писал выше, что блокчейн сам по себе не гарантирует, что все транзакции будут проведены. Нашим спасением здесь стала Kafka, с помощью которой мы создали очередь на обработку голосов. Другой сценарий для Kafka здесь — убежище при перезагрузке системы для данных, которые нода не приняла в блокчейн. По умолчанию данные хранятся только в оперативной памяти ноды и при перезагрузке уничтожаются. В этой роли Kafka, к счастью, нам не пригодилась, но перестраховаться стоило. Третий сценарий Kafka — это троттлинг нагрузки для пиковых часов. 40–50% избирателей приходят голосовать в первые часы работы ДЭГ, и Kafka позволяет эту нагрузку сглаживать.

Также ДЭГ стала первым проектом, где мы развернули свою версию CFT-консенсуса, который не приводит к роллбэкам. Когда мы начинали с PoS, роллбэки усложняли взаимодействие компонентов и нам приходилось объяснять, что это не мы выкинули голоса из системы, а потом что-то обратно записали, а это технологическая особенность. Если интересно узнать о нашем CFT-консенсусе подробнее, напишите в комментариях.

На самом масштабном голосовании на данный момент, в 2021 году, мы не потеряли ни одну из 1,5 млн транзакций. Но один голосов пришлось все-таки отклонить — он не прошел проверку ZKP

.

Мониторинг всей системы ДЭГ

Фронтенд системы, как я уже писал, был в зоне ответственности «Ростелекома». Нам осталось протестировать только бэкенд — по сути, большую трубу, которая должна обеспечить на выходе столько же голосов, сколько и на входе.

Электронное сообщение о голосовании

Для тестов мы разработали утилиту нагрузки; она умела создавать голосования пачками и прожигать систему как следует. На каждом участке мы повесили счетчики транзакций и стали ждать ошибок майнинга и валидации.

Электронное сообщение о голосовании
Электронное сообщение о голосовании

Если у нас увеличивается число голосов со статусом pending — «было отправлено на ноду, но не обработано» — мы понимаем, что нода не справляется и есть какие-то проблемы. Аналогично мы можем отслеживать и другие этапы. Grafana может мониторить и Kafka: сколько голосов через нее было отправлено, какой лаг вычитки.

Помимо подсчета голосов, мы должны распределить ресурсы по компонентам «трубы» так, чтобы не возникало ботлнеков. Поэтому у каждого компонента предусмотрен мониторинг ресурсов. Удивительно, но инструмент мониторинга местами сам требовал больше ресурсов, чем отдельные компоненты системы, обрабатывающие голоса. Так что счетчики мы повесили и на мониторинг. 

Мониторинг блокчейн-сети 

Через Grafana мы развернули мониторинг майнинга. Если высота блокчейна на графике равномерно растет, значит, ноды майнят и все работает как надо:

Электронное сообщение о голосовании

Если ноды обрабатывают блоки неравномерно, то сеть начинает разъезжаться и надо принимать меры:

Электронное сообщение о голосовании

Здесь мы столкнулись только с одним интересным эпизодом, на тестовом прогоне. На скорости 200 tps безопасники по ошибке отключили доступ по сети. После восстановления и перезапуска метода отправки все ноды в течение 5–10 минут собрались, синхронизировались и обработали все транзакции из UTX-пула — а их накопилось около полутора тысяч. В итоге не потеряли ни одной.

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

Во втором режиме предусмотрена длительная нагрузка, когда голоса генерируются и отправляются в обработку постоянно. Так мы можем тестировать вторую метрику — живучесть системы при наполнении баз голосами и пользователями. Эти тесты мы проводили на слабых стендах, в результате чего поймали несколько деградирующих процессов, когда запросы к БД начинали выполняться слишком долго и приводили к остановке.

Если говорить о боевых метриках, то в этом году голосование было менее масштабным по сравнению с прошлым годом, когда показатели доходили до 120 tps. И у нас всегда имелся большой запас по производительности. 

Прозрачность системы

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

В прошлом году за нашей системой ДЭГ следили всего пять наблюдателей, а в этом их их стало уже 109. Для них был разработан портал наблюдения, который подключен к очереди обратной связи и получает данные одновременно с остальными компонентами системы. Выгрузки с этого портала наблюдатели могли загружать в дополнительно разработанную нами open-source утилиту. Сравнивая данные, прозрачно обработанные этой утилитой, и данные блокчейна голосования, наблюдатели могли убедиться, что всё обрабатывается одинаково.

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

Выводы

На основе проекта федеральной системы ДЭГ можно сделать несколько выводов с точки зрения технологии.

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

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

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

Для дальнейшего погружения советую свой предыдущий
пост


о том, как работает дистанционное голосование на блокчейне. Также в сети выходили отчеты независимых наблюдателей о нашей с «Ростелекомом» системе по итогам голосования
2021


и
2022


гг. На Youtube можно посмотреть
видеоверсию


этого поста.

Алгоритм реализации и его криптостойкость

Время на прочтение

Электронное голосование (ЭГ) – это дистанционное голосование, позволяющее не привязывать волеизъявление граждан к фактическому месту их нахождения. В силу того, что интернет-технологии не только развиваются с невероятной скоростью, но и становятся все более неотъемлемой частью жизни для простого обывателя, их применение в политических процессах более чем обоснованно и естественно. Однако, как и любое другое техническое решение, электронное голосование создает ряд трудностей и проблем, которые необходимо преодолеть. В данной работе мы не только обсудим достоинства и недостатки ЭГ, но также заострим особое внимание на реализацию алгоритмов, обеспечивающих главный критерий избирательной системы – тайну волеизъявления, и обсудим уязвимые с сточки зрения защиты информации в них места.

Немного из истории электронного голосования. Опыт разных стран

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

В 2002 году ЭГ проводилось в Швейцарии. Здесь уже правительство заранее озаботилось созданием правовой базы. Кроме того, голосование проводилось с использованием универсальных и стандартизированных ID-карт. С одной стороны, они не позволяли голосовать одному человеку дважды. С другой стороны, списки голосовавших состояли не из имен, а из номеров этих карт, что обеспечивало анонимность голосования. Благодаря ЭГ явка повысилась, а 90% швейцарцев сказали, что хотели бы снова принять участие в подобных выборах.

Рис.1. ID-карта избирателя в Швейцарии
Рис.1. I D-карта избирателя в Швейцарии

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

Достоинства и недостатки ЭГ

Из опыта стран-пионеров ЭГ можно выделить как ряд очевидных достоинств.

  1. Граждане могут участвовать в политической жизни страны где бы они не находились – достаточно просто иметь гаджет под рукой.

  2. Время проведения выборов и подсчета голосов происходит на порядок быстрее. А затраты на проведение процедуры значительно уменьшаются.

  3. ЭГ повышает привлекает молодых избирателей.

  4. Выборы становятся прозрачными – сложнее устроить “вбросы” и фальсификацию. 

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

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

  2. Есть риск п олуче
    ния и использования злоумышленниками в корыстных целях персональных данных избирателей. 

  3. Из-за того, что каждый избиратель обладает уникальным номером, то не составляет труда идентифицировать личность конкретного голосовавшего по этому самому номеру, что уничтожает тайну волеизъявления.

Сосредоточимся на последнем недостатке и рассмотрим решение проблемы, которое он вызывает.

Протокол двух независимых агентств

Будем называть валидным избирателем, во-первых, человека, который является избирателем в прямом смысле этого слова, а, во-вторых, человека, который еще не голосовал. Тогда, когда к нам приходит избиратель, мы проверяем его на валидность, если он не является таковым, то не даем ему право голоса, если является, то даем ему бюллетень, после принимаем его обратно и заносим результат в базу, параллельно забывая имя избирателя, давшего нам этот бюллетень. Собственно говоря, именно так и реализованы классические очные выборы: избиратель приходит на участок, идентифицируется по паспорту, получает бюллетень, заходит в закрытую кабинку и делает свой выбор – проголосовать два раза он не может, да и нарушить тайну волеизъявления тоже практически невозможно.

Рис.2. Блок-схема алгоритма действия протокола двух независимых агентств
Рис.2. Блок-схема алгоритма действия протокола двух независимых агентств

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

Реальное решение

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

Для начала стоит ненадолго отвлечься от нашей темы и поговорить про слепую более детально.

Слепая подпись – это цифровая подпись, которая отличается тем, что подписывающее некий документ лицо не знает что именно оно подписывает. Можно разобрать алгоритм слепой подписи на конкретном примере. Допустим, Алиса хочет отправить тайное послание Василию, но Василий принимает информацию только от достоверных отправителей. Достоверен отправитель или нет определяет Боб, который в свою очередь не может прочитать письмо, а лишь проверяет, что отправитель тот, за кого себя выдает. Чтобы решить такую задачку, нужно действовать следующим образом:

1) Алиса пишет послание и запечатывает его в конверт.

2) Алиса отдает конверт Бобу, чтобы тот убедился в достоверности источника.

3)    Боб понимает, кто такая Алиса, и клеит на письмо марку, тем самым подтверждая достоверность источника.

4)    Алиса забирает письмо с маркой у Боба и отправляет послание Василию (разумеется, без обратного адреса).

5) Василий, получив письмо, видит на нем марку, убеждается в достоверности источника и читает содержимое, не зная при этом отправителя.

Если перевести эти рассуждения на математический язык, то получим следующее:

1) Алиса шифрует послание m
по правилу f,
в результате чего получается зашифрованное сообщение c=f(m).

2) Алиса отправляет шифротекст Бобу.

3) Боб подписывает полученный шифротекст, не зная его содержания, т.к. f
известна только Алисе, функцией g,
получая c'=g(c)=g(f(m))

4) Боб отсылает c'.

5) Алиса убирает свое шифрование с вновь полученного подписанного сообщения c',
получая c'' = g(f(m))*f
-1
= g(m).

Рис.3. Блок-схема слепой подписи
Рис.3. Блок-схема слепой подписи

Таким образом, заменив Алису на Избирателя, послание – на бюллетень, Боба – на систему ЭГ, а Василия – на ЦИК, мы получим отлично работающую процедуру тайного голосования.

Стандарт слепой подписи и его криптостойкость

Существует множество стандартов электронных цифровых подписей (ЭЦП). Самый последний из них (ГОСТ_34.10-2018) был принят 1 июня 2019 года и применяется в том числе и в отечественной системе электронного голосования. Именно его мы и рассмотрим.

Обговорим параметры, фигурирующие в данном стандарте:

J(E)=1728\cdot \frac{4a^3}{4a^3+27b^2}\ mod p, \qquad 4a^3+27b^2\not\equiv 0\mod p,\qquad a,b\in F_p

  • Порядок группы m
    точек эллиптической кривой — это целое число, отличное от p.

  • Порядок q
    (простое число) некоторой циклической подгруппы группы точек эллиптической кривой, удовлетворяющей следующим условиям: m =nq,\ n\in \mathbb{N}, \qquad 2^{254}< q<2^{256}

  • Так называемый генератор подгруппы q-
    точка P=(x_p,y_p) \in E
    , для которой имеют место равенства q \cdot P =0,\qquad k\cdot P \neq 0, \ k=1,2,...,q-1
    , где 0\:-
    нейтральный элемент.

  • h(M) -
    так называемая хеш-функция. Она отображает сообщение M
    в двоичные векторы длиною в 256 бит.

  • Целое число d\:-
    ключ шифрование, которым обладает любой пользователь, использующий цифровую подпись, и которое лежит в пределах 0<d<q.

  • Точка Q=(x_p,y_p) \in E \:-
    ключ расшифрования, которым также обладает любой пользователь, использующий цифровую подпись, и который равен Q=d\cdot q.

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

p^t \neq 1\; mod\ q, \qquad t=1,...,B \geq31 \ и \ J(E) \neq0,1728

Обратим внимание на хеш-функцию. Она представляет из себя двоичный вектор из 256 компонент: h=(a_{255}, \ ...\ ,a_{0}).
Двоичные векторы можно “сшивать” (операция конкатенации): h_a = (a_{255}, \ ... \ ,a_0), h_b = (b_{255}, \ ... \ ,b_0)x \mapsto (h_a|h_b) = (a_{255}, \ ... \ ,a_0, b_{255}, \ ... \ ,b_0)

А также между ними и целыми числами можно построить биективное отображение по следующему правилу

z= \sum_{i=0}^{255}a_i\cdot 2^i, \qquad z\leqslant 2^{256}.

Биективное оно потому, что формула, его задающая, есть ни что иное, как представление числа z
в двоичном виде h.

Итак, мы ввели все требуемые параметры и величины, поэтому теперь можем рассмотреть алгоритм действия стандарта.

Начнем с формирования ЭЦП. Наглядная блок-схема представлена на рисунке (см. рис. 4), поэтому распишем только формулы, которые мы применяем на каждом шаге.

  1. e =z \ mod \ q. Если \ e =0, \ то \ e=1.

  2. C = kP \to x_c -координата \ C \to r=x_c \ mod \ q.
    Если r=0
    , то возвращаемся к шагу 3).

  3. s = rd+ke\ mod\ q.
    Если s=0
    , то возвращаемся к шагу 3).

  4. Ставим векторы в соответствие числам r\leftrightarrow h_r = \vec{r}, \ s\leftrightarrow h_s = \vec{s}, \ \xi = (\vec{r}|\vec{s})

Рис. 4. Блок-схема алгоритма формирования ЭЦП
Рис. 4. Блок-схема алгоритма формирования ЭЦП

Теперь проверим ЭЦП. Также сошлемся на наглядную блок-схему (см. рис.5), а каждый шаг опишем сухой формулой.

  1. \vec{h} = h(M).

  2. \nu=e^{-1} \ mod\ q.

  3. C = z_1 P+z_2Q \to x_c \ - координата \ C \to R = x_c \ mod\ q.

  4. R = r \to
    подпись верна, иначе — нет.

Рис. 5. Блок-схема алгоритма проверки ЭЦП
Рис. 5. Блок-схема алгоритма проверки ЭЦП

Что же касается криптостойкости данного стандарта, то она определяется, во-первых, стойкостью алгоритма шифрования, а во-вторых, стойкостью хеш-функции.

Стойкость хеш-функции: Вероятность того, что хеш-функцию данного стандарта взломают подбором коллизии на фиксированное сообщение, составляет 1,73 \cdot 10^{-77}.
Если заниматься подбором произвольной коллизии, то вероятность повышается до 2,94 \cdot10^{-39},
но все равно остается чрезвычайно малой.

Стойкость алгоритма шифрования: она определяется проблемой дискретного логарифмирования в группе точек эллиптической кривой. Поскольку пока не существует алгоритмов этой оценки, обратимся к наибыстрейшему – методу Полларда. Для него вычислительная сложность оценивается как O(\sqrt{q}).
Следовательно, если положить, что q
имеет 256 разрядов, это обеспечит криптостойкость в 10^{30}
операций.

Реализация слепой подписи на практике

В предыдущем параграфе был рассмотрен конкретный стандарт, в соответствии с которым функционирует российская система электронного голосования. Теперь обсудим, как именно происходит процесс голосования по этапам.

Порядок действий будет следующим:          

1) Избиратель авторизуется на официальном портале. В нашем случае это “Госуслуги”. По сути гражданин просто сообщает свои персональные данные.

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

3) На устройстве избирателя генерируются секретный ключ S
и публичный ключ K
. Это происходит в браузере.

4) Ключ K
маскируется случайным образом, в результате чего получаем замаскированный ключ K'
, по которому определить исходный K
возможно, только зная параметры данной маскировки.

5) Ключ K'
отсылается на сервер, который выдает бюллетени.

6) Сервер подписывает K'
своим ключом (назовем эту подпись C'
), после чего отсылает ее обратно на устройство голосующего вместе со своим публичным ключом, который абсолютно одинаков для всех пользователей.

7) Бюллетень с выбранным вариантом шифруется публичным ключом с сервера и подписывается ключом S
.

8) На устройстве избирателя снимается маскировка с подписи C'
и ключа K'
. Надо заметить, что процесс устроен таким образом, чтобы получилась действительная для ключа K
подпись C
.

9) Зашифрованный бюллетень с подписью (вместе с K
и C
) отсылается на сервер приема бюллетеней.

10) Сервер по приему бюллетеней не знает публичного ключа, так как он был сгенерирован на устройстве голосующего, но проверяет подпись C
и то, что бюллетень был подписан секретной частью публичного ключа. Таким образом, сервер определяет, что бюллетень был выдан настоящему избирателю, правда, уже непонятно, какому именно.

11) После этой проверки сервер отправляет бюллетень в базу.

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

Более наглядно алгоритм можно представить в виде блок-схемы (см. рис. 6).

Рис. 6. Блок-схема процесса голосования
Рис. 6. Блок-схема процесса голосования

Резюме и выводы

Подведем итоги обзора систем электронного голосования. Мы кратко обсудили историю создания и внедрения систем ЭГ в различных зарубежных странах. Отдельно проговорили положительные моменты ЭГ:

  • Нет привязки к определенному месту.

  • Затраты значительно ниже, а скорость обработки результатов выше.

Также обсудили и отрицательные стороны ЭГ:

  • Угроза хакерских атак

  • Утечка данных избирателей

  • Сложность в обеспечении тайности голосования

Далее мы сосредоточились на алгоритме реализации процесса голосования. Было рассмотрено как идеальное решение “протокол двух независимых агентств”, не реализуемое на практике, так и более сложное – “слепая подпись”, которое успешно воплощено в жизни. Мы обсудили ее главные положительные качества, а именно:

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

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

  • Невозможность фальсификаций. Голоса избирателей невозможно удалить из системы, равно как и изменить их.

После того, как мы поняли, что такое решение нам подходит, мы подробно разобрали один из действующих стандартов, а именно ГОСТ_34.10-2018. И, как показала оценка вероятности его взлома, поняли, что этот стандарт обеспечивает очень высокую надежность.

Наконец, мы на пальцах обсудили процедуру электронных выборов – как именно происходит тайное голосование.

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

Оцените статью
Праймериз