Как стать автором
Обновить

Система электронного голосования: алгоритм реализации и его криптостойкость

Время на прочтение9 мин
Количество просмотров7.6K

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

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

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

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

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

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

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

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

  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 года и применяется в том числе и в отечественной системе электронного голосования. Именно его мы и рассмотрим.

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

  • Длина секретного ключа составляет 256 бит.

  • Модуль эллиптической кривой pудовлетворяет двум условиям: p> 2255, p\: - простое число.

  • Эллиптическая кривая Eзадается своим инвариантом на конечном поле F_p, состоящим из p элементов, по формуле

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. z\leftrightarrow h(M).

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

  3. k = rand(from \ 0, \ to \ q)

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

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

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

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

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

  1. \xi = (\vec{r}|\vec{s}) \to \ восстанавливаем  \ r\ и\ s. Если \ r<q \ и\ s<q\ \to подпись \ неверна.

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

  3. z\leftrightarrow \vec{h} \to e=z \ mod \ q \to Если\ e=0, \ то\ e=1.

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

  5. z_1 = s\nu\ mod\ q, \ z_2 = -r\nu \ mod\ q.

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

  7. 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. И, как показала оценка вероятности его взлома, поняли, что этот стандарт обеспечивает очень высокую надежность.

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

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

Теги:
Хабы:
Всего голосов 21: ↑21 и ↓0+21
Комментарии43

Публикации

Истории

Работа

Ближайшие события