Депутаты Гоcдумы приняли в третьем, окончательном чтении законопроект об экспериментальном электронном голосовании на выборах в Мосгордуму 8 сентября 2019 года. Инициатором проекта выступил глава радиостанции "Эхо Москвы" Алексей Венедиктов.
Собственно, в этом нет ничего удивительного, так как подобные системы уже существуют в некоторых странах. Интернет-голосования завоевали популярность и используются в правительственных выборах и референдумах в Великобритании, Эстонии и Швейцарии, а также муниципальных выборах в Канаде и партийных выборах в США и Франции. Тем не менее к этим системам существует известное недоверие.
Существует мнение, что электронную избирательную систему трудно сделать таким образом, чтобы в ней были невозможны подтасовки заинтересованными лицами. В частности, программистами, управляющими данной системой или хакерами.
Но на сегодняшний день уже есть технология, позволяющая гарантировать прозрачность выборов. Технология эта называется блокчейн. Сочетание технологии блокчейн и хеш-функций исключает возможность незаметной фальсификации данных.
Такая электронная система, построенная на основе метода хеш-функций, блокчейна, распределения дублирования баз данных у пользователей, делает принципиально невозможными фальсификации выборов.
Мы попытаемся объяснить данный метод устройства системы электронного голосования максимально доступным способом, который, как нам кажется, будет понятен большинству читателей данного ресурса.
Метод блокчейна
Основные сведения о хеш-функции и блокчейне изложены в "Википедии":
Блокчейн (англ. blockchain, изначально block chain) — выстроенная по определенным правилам непрерывная последовательная цепочка блоков (связный список), содержащих информацию. Чаще всего копии цепочек блоков хранятся на множестве разных компьютеров независимо друг от друга.
Хеш-функция
Хеш-функция (англ. hash function от hash — "превращать в фарш", "мешанина"), или функция свёртки, — функция, осуществляющая преобразование массива входных данных произвольной длины в (выходную) битовую строку установленной длины, выполняемое определенным алгоритмом. Преобразование, производимое хеш-функцией, называется хешированием. Исходные данные называются входным массивом, "ключом" или "сообщением". Результат преобразования (выходные данные) называется "хешем", "хеш-кодом", "хеш-суммой", "сводкой сообщения".
Метод блокчейна основан на алгоритмах т.н. хеш-функций, применяемых в криптографии и программировании. Хеш-функция — это некоторый сложный алгоритм, сопоставляющий некоторому набору первичных данных некоторый набор выходных данных алгоритма, называемый хеш-кодом. Причем алгоритм устроен таким образом, что изменение всего лишь одного знака в исходных данных приводит к формированию принципиально нового набора знаков на выходе алгоритма, так что он абсолютно не повторяет предыдущий набор. Таковы свойства алгоритмов хеш-функций. И мы можем использовать их для "опечатывания" баз данных.
Допустим, мы сформировали некоторую базу данных и затем вычислили ее хеш-код посредством алгоритма хеш-функции. Далее мы присоединим этот хеш-код к базе данных и найдем их общий хеш-код. Этот хеш-код будет для данной базы данных подобен замку или печати, опечатывающей эту базу данных, поскольку любое изменение в базе данных хотя бы одного знака приведет к полному изменению хеш-кода (следа хеш-функции) и несовпадению его с исходным хеш-кодом. Что будет означать, что база данных модифицирована и в ней изменены некоторые данные. Для установления факта изменения (взлома) базы данных достаточно найти ее хеш-код и сравнить с исходным хеш-кодом. Таким образом осуществляется защита баз данных.
По этому принципу могут быть построены базы данных электронной избирательной системы, в том числе базы данных голосования. При голосовании формируются блоки и находятся хеш-коды этих блоков. Данные хеш-коды "запирают" блоки и рассылаются по компьютерам пользователей (избирателей) вместе с результатами голосования каждого блока. И присоединенными к нему нарастающим итогом результатами подсчета предыдущих голосований из предыдущих блоков. При создании блоков данные суммарного голосования и запирающие блок хеш-коды периодически (например, через 10 блоков) распространяются по всем компьютерам избирателей, участвовавших в электронном голосовании. Там они хранятся в зашифрованном виде. Поэтому общую базу данных невозможно подделать даже программистам, участвующим в написании данной программы и обслуживании базы данных.
Первый этап — формирование блоков информации и хеш-кодов блоков баз данных на сервере на основе данных, получаемых с устройств пользователей (от избирателей), осуществляющих процесс электронного голосования на своих устройствах (компьютерах, смартфонах, сотовых телефонах) с установленной специальной программой.
Рис. 1. Построение алгоритмом хеш-функции блока данных хеш-кода. Исходная информация есть неограниченная последовательность знаков, содержащая базу данных. Конечная информация есть последовательность знаков конечной длины (например, 24-30 знаков), то есть хеш-код, полученный в ходе преобразования информации хеш-функцией. Изменение хотя бы одного знака в исходной информации ведет к полному изменению всех знаков в конечной информации (в хеш-коде).
Итак, база голосований создается на основе запирания небольших блоков голосования (10 голосов) хеш-кодами этих блоков. И присоединения каждого блока к результату предыдущего подсчета голосований нарастающим итогом, также с запиранием соответствующего результата хеш-кодом. Тогда как после каждых 10 или 100 блоков результаты суммарного голосования и соответствующие хеш-коды рассылаются по компьютерам избирателей. Т.е. наблюдатели по желанию получают полную информацию обо всех блоках и имеют, соответственно, полную базу данных голосований на каждом ее этапе формирования.
При этом первичные базы данных хранятся на компьютерах пользователей системы в зашифрованном виде, в виде некоторых идентификаторов. Каков вид этих идентификаторов? Это довольно небольшая группа цифр. Она состоит из идентификатора пользователя, образующего, например, 12-значное число. И из идентификатора голосования. Это еще примерно 1 единица и 4 нуля (всего 5 цифр), если в выборку для голосования входит 5 кандидатов. Голосование за кандидата образует единицу, остальные нули. При ином числе кандидатов будут некоторые изменения.
Итак, база данных единичного голосования состоит из 20- или 24-значного числа, состоящего из идентификатора пользователя и идентификатора результатов голосования. Поиск в базе данных осуществляется по идентификатору пользователя, который известен только ему и не известен системе и ее программистам. Ввиду чего сохраняется тайна голосования.
При проведении голосования эта база данных, состоящая из двух идентификаторов, отправляется на сайт (сервер) системы голосования и там упаковывается в блоки по 10 результатов голосований. Причем в сам блок входит также подсчет голосов, что выражается в форме дополнительного идентификатора, состоящего в суммировании единиц по каждой позиции голосования.
У полученного блока находится хеш-код и возвращается обратно проголосовавшим пользователям в их компьютер, где он хранится вместе с результатами голосования данного избирателя и вместе с подсчетом голосов блока в зашифрованном виде. Тогда каждый блок голосования будет надежно заперт его хеш-кодом от последующего изменения при подсчете голосов. И в любой момент избиратель или его доверенные лица могут установить, как был подсчитан голос избирателя и не было ли ошибок в этом. Что легко можно установить из сравнения базы данных, хранящейся на компьютере или ином устройстве пользователя в зашифрованном виде и базы данных, которая используется на сервере для определения результатов голосования.
Итак, результат первых 10 голосований образует блок и "запирается на замок" хеш-кодом. Данный хеш-код является началом следующего блока из 10 голосований и присоединяется к нему, так же как и результат сложения предыдущих голосований. Ввиду чего второй блок содержит информацию как о результате голосований внутри блока, так и сумму голосований этого и предыдущего блока. Данный результирующий блок также запирается хеш-кодом, и данный код вместе с блоком отправляется на компьютеры лиц, участвовавших в голосовании во втором блоке. Эта же функция служит для формирования последующего блока и так далее. При формировании блоков каждые 100 или 1000 голосований создаваемый хеш-код, запирающий блок, направляется на компьютеры всех избирателей, где он хранится.
Так, например, при участии в голосовании 100 млн избирателей будет образовано 100 тыс. хеш-кодов промежуточных блоков, которые будут храниться на компьютерах избирателей в зашифрованном виде (с входом по паролю). 100 тыс. хеш-кодов — это сравнительно небольшой объем информации, равный нескольким мегабайтам. Он может поместиться на любом современном устройстве. В том числе на сотовом телефоне или смартфоне. Этот набор данных будет зашифрован и доступ к нему будет по индивидуальному паролю пользователя. Ввиду чего эти данные будут защищены от подделки. А доступ хакеров или программистов к этим базам данных будет весьма затруднен, так как данные защищены паролем и конечным количеством (например, 10 раз) ошибочных вводов пароля. При этом, чтобы подделать все данные, необходимо иметь доступ ко всем рассылкам хеш-кодов и заново изменить все хеш-коды, хранящиеся на компьютерах избирателей. Что не под силу ни одному хакеру.
Второй этап — отправка информации с сервера, где ведется обработка информации о блоках, пользователям (избирателям и наблюдателям), с передачей хеш-кодов блоков и суммированием голосов, нарастающим итогом. Каждый последующий блок присоединяется к предыдущему на основании предыдущего значения хеш-кода и затем после формирования блока и подсчета голосов опечатывается собственным хеш-кодом, который затем является основой формирования следующего блока. Ввиду чего блоки образуют последовательность баз данных, которые опечатаны хеш-кодами, хранящимися у пользователей, и поэтому эту базу данных невозможно подделать, не изменяя значений хеш-кодов.
Рис. 2. Формирование блоков информации с суммированием результатов выборов нарастающим итогом, их опечатывание хеш-кодами с последующей отправкой информации пользователям (избирателям и наблюдателям) с целью ее хранения. А также проверка информации после формирования блока на основе данных, поступающих к пользователю и от пользователя.
Таким образом, каждый блок из 10 голосований запирается хеш-кодом и присоединяется к предыдущему блоку. Тогда как хеш-коды промежуточных блоков из 1000 голосований рассылаются по компьютерам избирателей и там хранятся вместе с результатами голосований каждого блока и суммарным голосованием, подсчитываемым при присоединении каждого блока нарастающим итогом. Ввиду чего, когда закончится присоединение последнего блока, вместе с ним будут подсчитаны результаты голосования, присоединяемые при подсчете каждого блока к предыдущему результату.
База данных всех голосований будет разбита на блоки и будет находиться на серверах избирательной системы в открытом виде. А также на компьютерах наблюдателей. Так что каждый заинтересованный избиратель сможет сравнить в ней результаты своего голосования на компьютере с результатами, хранящимися в базе данных. Равно как и сравнить хеш-коды, запирающие блоки. Что гарантирует защиту базы данных голосования от подделки.
Каждый избиратель на своем устройстве для голосования (компьютере, смартфоне, сотовом телефоне) сможет в режиме непрерывного времени отслеживать рост суммарных результатов голосования. И в определенный момент, когда закончится голосование, без всякой избирательной комиссии уже будет знать результаты голосования и может проверить их на каждом шаге этого голосования.
Третий этап — действует только в том случае, если система состоит не из одного, а из нескольких серверов, ведущих обработку блоков независимым образом. В этом случае с каждого сервера происходит отправка информации на конечный сервер (компьютер, смартфон), где она суммируется. Например, таким сервером может быть устройство каждого пользователя с установленной на нем соответствующей программой подсчета голосов.
Рис. 3. Группировка информации, полученной по отдельным субъектам федерации (штатам), муниципалитетам или районам, в единый блок на сервере Х. Этот пункт осуществляется, только если информация получена при работе независимых серверов, осуществляющих подсчет данных в соответствующих штатах, муниципалитетах или районах. В том числе в качестве такого сервера может использоваться любой компьютер (компьютеры) с установленной программой голосования — например, компьютер (сотовый телефон, смартфон) каждого наблюдателя или голосующего избирателя.
Общее устройство системы
В целом система голосований должна быть устроена по субъектам федерации. Каждый субъект федерации должен иметь свою сеть защищенных серверов, на которых будет храниться данная информация. Причем в дублированном виде. То есть каждый из серверов будет хранить информацию о базах данных всех субъектов федерации. Благодаря чему будет многократное дублирование данной информации и баз данных. Программа должна быть устроена таким образом, что избиратели и партии, а также другие заинтересованные лица (наблюдатели) могут иметь у себя на компьютере полную базу данных и работать с ней. В том числе выборочно проверять и сличать результаты голосований.
Надежность системы
На самом деле данная процедура абсолютно защищена от подделки результатов голосования не только хакерами, но и самими программистами, обслуживающими базы данных. Так как система многократно дублируется, запирается на замки хеш-кодами, а результаты последовательного суммирования блоков и соответствующие хеш-коды отправляются на компьютеры избирателей и наблюдателей системы, где они хранятся. Поэтому никакое "незаметное" вмешательство в результаты выборов невозможно
Никто не может внести изменения в результаты как промежуточных голосований, так и в конечные результаты. Всё будет подсчитано с точностью до 1 голоса. А то, что результаты голосования каждого избирателя многократно дублируются, как на его компьютере, так и на компьютерах других пользователей, не позволяет их изменить ни одному из проголосовавших избирателей или иным заинтересованным лицам.
Поиск в базе данных по идентификатору быстро находит результат голосования данного избирателя и тот блок, в котором он проголосовал. Ввиду чего можно просто сравнивать результаты своего голосования с результатами, хранящимися в базе данных. То есть сразу после того, как избиратель проголосовал, он сможет сравнить результаты своего голосования с результатами, хранящимися в базе данных и запертыми в блок хеш-кодом, и отправить подтверждение о правильности результатов, которое также будет заперто в следующий блок, следующим хеш-кодом.
Внешняя попытка программистов системы или хакеров внести изменения в результат голосования каждого пользователя в момент формирования блока невозможна, так как в этом случае результаты голосования в базе данных блока не совпадут с результатами, хранящимися в базе данных на компьютере (устройстве) пользователя. Ввиду чего после сравнения (при проверке созданного блока) поступит сигнал о нарушении соответствия данных на компьютере и в сформированной базе данных системы. Таким образом, внесение неверных данных в блоки системы исключено, так как происходит проверка результата голосований после запирания блока.
Если будет происходить массовое несоответствие данных блоков данным, хранящимся в компьютерах и смартфонах (устройствах голосования), то это приведет к массовой фиксации нарушений в программном обеспечении и легко доказуемо посредством сравнения баз данных на компьютерах и баз данных в блоках голосования.
Таким образом, на основе технологии блокчейна может быть создана абсолютно надежная система подсчета голосов с открытыми базами данных для просмотра. Но так как базы данных построены на личных идентификаторах избирателей, известных только им и хранящихся на их компьютерах, то только сами избиратели будут знать свои идентификаторы. Т.е. голосование, будучи полностью фиксированным по идентификаторам, тем не менее останется тайным. Так как никто не сможет соотнести соответствующий идентификатор с личностью того или иного избирателя. Причем результаты каждого голосования могут храниться в данной системе как угодно долго.
Система, вышеописанная нами, применяется как в системах передачи платежей и счетов в платежных системах и банках, так и для формирования баз данных криптовалют. А также и в любых других системах, где необходима надежная защита баз данных от подделки, в том числе подделки самими программистами, следящими за состоянием баз данных и работающими с ними. При этом для хакеров такая система баз данных остается абсолютно недоступной с точки зрения изменения в ней информации. Поэтому данная система абсолютно надежна.
При этом нелишне напомнить, что исходный код данной системы должен быть открыт и общедоступен, как и описание различных функций и блоков программы, и поэтому может быть подвергнут общественной экспертизе.
Отделение избирательной системы от государства
На наш взгляд, избирательная система должна быть отделена от государства. Она должна иметь электронную форму и должна быть подчинена международному сообществу — например, из восьмерки наиболее развитых стран мира и их наблюдательному совету. Что будет гарантировать невозможность вмешательства государства в избирательную систему и выборы. Что, безусловно, благоприятно скажется как на самих выборах, так и на политической системе в целом.
Также и регистрация кандидатов, регистрация партий, праймериз (предварительные выборы) должны проходить в этой электронной избирательной системе. Что не позволит органам государства отказывать в регистрации кандидатов и тем самым влиять на выборы.
Таким образом, электронная избирательная система, отделенная от государства и его влияния, подчиненная гражданам страны и контролируемая демократическими странами, может быть основой современной электронной демократии, не позволяющей вмешиваться в выборы лицам, стоящим во главе государства, или политическим партиям, участвующим в работе парламента, а равно и другим лицам.
P. S. Говорят, что Алексей Навальный выступает против электронной системы голосования.
На самом деле Навальный выступает не против системы электронного голосования в Москве или электронной системы голосования в России в целом как таковой. Он выступает против системы, разрабатываемой правительством Москвы и тем самым, возможно, содержащей в себе соответствующие средства (закладки), позволяющие влиять на результаты выборов и заниматься их подтасовкой в электронном виде.
В целом, как мы показали выше, соответствующие системы могут быть абсолютно надежны и защищены от изменений информации или ее вбросов. Но по каким принципам создается система электронного голосования правительством Москвы, никому не известно. Вполне возможно, что она не имеет соответствующей защиты, и трудно провести ее экспертизу. То есть система, возможно, открыта для манипулирования электронными голосами граждан.
Поэтому мы и говорим о том, что идеальная избирательная система должна быть отделена от государства и подчинена гражданскому обществу и контролю со стороны содружества демократических стран мира.