Введение в курс дела
На мартовских выборах президента я был официальным наблюдателем за федеральным электронным голосованием с доступом к ноде наблюдения. Совместно с коллегами мы обнаружили, что количество голосов в официальных протоколах на 211 тысяч больше, чем было загружено избирателей в систему ДЭГ. То есть в онлайн голосовании в некоторых регионах явка превышает 100 процентов. Как так получилось?
Кто я такой?
Чтобы понять, о чём будет идти речь дальше и чем вообще занимается наблюдатель за электронным голосованием в нынешних реалиях, нужно кратко объяснить процесс наблюдения. Важно не путать федеральный ДЭГ и Московский, у них разная архитектура, поэтому моя критика касается только федеральной системы. Если опустить сложности получения официальных документов, то наблюдателю дается доступ к двум вещам — порталу и ноде наблюдения.
Портал наблюдения — это сайт в интернете, куда Ростелеком загружает данные о ходе голосования, как в виде готовой визуализации, так и в виде исходных данных о работе системы ДЭГ (они же дампы). Проверить, связаны ли эти данные непосредственно с идущим голосованием не представляется возможным, предполагается просто доверять организаторам. Вдобавок были прецеденты, когда подписанные дампы с данными подменяли задним числом. Было даже судебное разбирательство по этой теме, но вы сами понимаете, какое решение вынес российский суд.
Нода наблюдения — вам предоставляют отдельную машину, куда, грубо говоря, транслируется в одностороннем порядке лог работы блокчейна в режиме онлайн. Наблюдатель может следить за ходом выборов или вообще скачать все транзакции с начала работы системы для последующего анализа. Имеют ли эти данные отношение к непосредственному голосованию доподлинно неизвестно, но, судя по всему, туда идет реальная информация, так как достоверно подделать ее практически невозможно. В теории данные с портала и с ноды должны быть одинаковыми.
Я как раз работал с нодой, скачивал с неё данные для последующего анализа, чтобы найти аномалии. Поскольку у ДЭГа во время работы на президентских выборах был крупный сбой, все моё внимание было приковано к нему. И только спустя несколько месяцев после выборов Виктор Толстогузов привлёк моё внимание к тому, что данные о количестве избирателей разнятся в дампах работы электронного голосования и в официальных документах. Я копнул глубже и очень удивился тому, что нашёл.
К делу!
Оказалось, что в выгрузках как с ноды, так и с портала на 211 тысяч голосов больше, чем избирателей, что делает в некоторых регионах явку выше 100 процентов. И сразу возникает очевидный вопрос: это вброс? После расследования оказалось, как говорил классик, что это кое-что получше, чем вброс — это рисунок вброса.
Таблица сравнения официального количество избирателей из протокола и в дампах для наблюдения:
Регион |
Избирателей в дампе |
Избирателей в протоколе |
Разница |
Алтайский край |
238299 |
276808 |
38509 |
Камчатский край |
5125 |
44042 |
38917 |
Калининградская область |
7684 |
67794 |
60110 |
Новосибирская область |
188922 |
245767 |
56845 |
Томская область |
73048 |
90049 |
17001 |
Сумма |
513078 |
724460 |
211382 |
Количество голосов в протоколе и в дампах приблизительно совпадает, разнятся только избиратели. Например, в Камчатке всего 5125 избирателей в дампе, а это в 8,8 раз меньше, чем заявлено в итоговом протоколе. Но если посмотреть по голосам в дампах, то их там те же 40 тысяч, что и в официальных данных. Похоже, что это не добавили голоса сверху, а скорее убрали избирателей. Но как такое возможно?
С очень высокой вероятностью это была банальная техническая ошибка, а не попытка махинации. Об этом говорят относительно малые объёмы и локальное распределение "исчезнувших" граждан по регионам. По моим инсайдам от разработчиков ДЭГ, это был сбой загрузки списка избирателей в блокчейн; программа некорректно отработала и просто не залила часть базы. Верить этой версии? На самом деле ответ на этот вопрос не так уж важен, мы это не сможем достоверно проверить, здесь самое важное и интересное другое.
![Ошибка показывает истинную архитектуру ДЭГ Ошибка показывает истинную архитектуру ДЭГ](https://habrastorage.org/getpro/habr/upload_files/adf/4f0/8e4/adf4f08e4114913a208bb023ab5e53de.png)
Ошибки системы зачастую говорят о ней намного больше, чем её документация или заявления разработчиков. Что нам показывает факт возможности присутствия в ДЭГ голосов больше, чем избирателей? Это значит, что они в блокчейне существуют отдельно друг от друга без каких-либо прочных связей, т. к. очевидно, голос не может взяться из ниоткуда без избирателя. И это уже очень весомый аргумент в пользу того, что реальная архитектура ДЭГ не завязана на открытый наблюдателям блокчейн, что открывает пространство для гипотез о вмешательствах в выборы.
Если отсутствует связь между избирателем и его бюллетенем, то тогда теоретически в систему можно добавлять голоса или “мертвые души”, и поймать это наблюдателям будет практически невозможно.
По пропавшим избирателям даже был суд, но он сказал, что все корректно и никаких нарушений выявлено не было.
Я построил схему бизнес-процессов федерального ДЭГ с учётом открывшихся фактов архитектуры для того, чтобы понять, где может быть уязвимость.
Чтобы разобраться, как можно реализовать реальный вброс, я построил схему бизнес-процессов ДЭГ, используя свой многолетний опыт реверс-инжиниринга и внешние консультации со знающими людьми. Я сознательно не прибегал к официальной документации, потому что в ней может быть написано всё что угодно, и непонятно, как она вообще коррелирует с реальностью. Более того, это ГОСТ 34, который, по слухам, даже не дописан до конца уже после многолетней эксплуатации системы. Поэтому реверс-инжиниринг — наше всё.
![Схема основных бизнес-процессов ДЭГ (Будет дополняться) Схема основных бизнес-процессов ДЭГ (Будет дополняться)](https://habrastorage.org/getpro/habr/upload_files/d3c/88b/e85/d3c88be85c4065cb2e0984c003d2cc5b.png)
Оказалось, что блокчейн работает как бы сбоку: в него загружаются избиратели перед голосованием и, по сути, он больше не трогается, а вся работа идет с базой данных внутри Ростелекома. В неё можно добавить или убрать избирателей, и это никак не сможет увидеть внешний наблюдатель.
![Уникальный идентификатор избирателя для наблюдателя различен между моментами выдачи и приемки бюллетеня Уникальный идентификатор избирателя для наблюдателя различен между моментами выдачи и приемки бюллетеня](https://habrastorage.org/getpro/habr/upload_files/224/be8/7ab/224be87abd8786d15d7ecc57460d4fad.png)
Ещё важно отметить, что уникальный идентификатор (GUID) избирателя в блокчейне для выданного и сданного бюллетеня генерируется из разных мест: в одном случае из паспорта, в другом — из СНИЛСа. И это приводит к невозможности наблюдателю сопоставить идентификаторы голосующего и понять, проголосовал ли избиратель тем же бюллетенем, который он получил.
Учитывая все эти обстоятельства, возникает широкое поле для скрытого вмешательства организаторов в выборы.
Инструкция по вбросу
Я посоветовался с несколькими аналитиками ДЭГ и разработчиками подобных систем и пришёл к следующей схеме потенциального вброса голосов, исходя из вышеописанных фактов. Неформально мне подтвердили, что такая схема манипуляции в теории возможна.
Важно! Я не утверждаю, что подобный вброс был; я лишь говорю о том, что он технически возможен.
![Ростелеком может редактировать списки избирателей незаметно для наблюдателей Ростелеком может редактировать списки избирателей незаметно для наблюдателей](https://habrastorage.org/getpro/habr/upload_files/d18/61f/4a4/d1861f4a45e14e0eb153fafb11f02dc1.png)
В блокчейн и базу Ростелекома загружаются реальные избиратели, начинается голосование, люди голосуют, но внезапно явка оказывается недостаточной для руководства. Чтобы решить эту проблему, внутри Ростелекома в свою внутреннюю базу заливают дополнительных избирателей, которые отдают голос за того, кого нужно. Чтобы совсем скрыть улики и избежать путаницы в цифрах, можно дополнительно удалить такое же количество реальных непроголосовавших избирателей. Со стороны наблюдателей понять, что голоса идут не от тех людей, которые изначально были в списках, невозможно. В итоге получается, что явка необходимого уровня, а в списках избирателей, доступных для наблюдения, неконфликтующее количество избирателей и голосов — менее 100 процентов. Все довольны.
Для наглядности приведу пример:
Представим, у нас есть выборы с 10 реальными избирателями. Это количество заливают в блокчейн и в базу Ростелекома. Начинается голосование, но из этих 10 голосуют только 5, то есть явка 50 процентов. Эти 5 голосов видны для наблюдателей в блокчейне. Для коррекции результатов кто-то добавляет в базу РТК ещё 5 избирателей, и они тоже голосуют, то есть явка получается уже 100 процентов. Со стороны блокчейна обнаружить вмешательство невозможно из-за отсутствия связи между голосом и избирателем, т. е. мы не понимаем, пришёл ли голос от избирателя, который был в списках изначально или нет. Нужная явка достигнута, но на самом деле избирателей в сумме 15, а не 10. Чтобы совсем не оставлять следов, можно перед добавлением "мертвых душ" убрать из списка избирателей такое же количество непроголосовавших.
Ну и выводы:
Главный вывод банален и повторялся много раз: система непрозрачна для наблюдения, и вся власть над ней находится в одних руках, которые могут манипулировать ходом голосования как угодно. И в нынешних условиях вряд ли что-то изменится. Есть ли фальсификации или нет — не так уж важно. Если в теории их возможно осуществить, то система порочна.
Чтобы устранить возможность такого типа вбросов, нужно, как минимум, всю работу с избирателями проводить через блокчейн, а не через свою внутреннюю базу данных, которая недоступна наблюдению. И, разумеется, формировать идентификаторы избирателей (GUID) из одного места, чтобы можно было понять, что тот же избиратель, который получил бюллетень, тем же бюллетенем и проголосовал. Но это всё полумеры.
Чтобы хотя бы начать говорить о честности ДЭГ, нужен, как минимум, открытый код и гарантия того, что именно он используется в ходе голосования. Но пока этого нет как в Московском ДЭГ, так и в федеральном.
Спасибо за внимание!
Комментарии (42)
Skipy
03.09.2024 10:53+6А я с момента появления первой системы ДЭГ говорил, что без физического носителя голоса можно сделать всё что угодно. Насмотрелся на то, что творили с помощью ГАС Выборы, даже с бумажными бюллетенями, как там результаты меняли как надо. А без возможности проконтролировать, пересчитать и т.п. - выборы закончились как явление.
mihmig
03.09.2024 10:53+2Здесь есть люди с математическим/криптографическим аппаратом?
Я правильно понимаю - задача "статически неопределима", то есть:
1. Я, проголосовав, получаю некий UUID
2. После выборов, я могу скачать vibory_blockchain_2024.zip
3. Найти там свой UID
4. Проверить, что мой голос учтён именно за ID того кандидата, что я голосовал.
5. Отправить начальству некую ссылку на ту часть блокчейна, где я якобы проголосовал за нужного кандидата (бюджетники, вояки - привет!)
6. Проверить, что голос моего соседа-алкаша, который валялся в отключке все три дня голосования на даче (самолично видел) не "закаруселен"?Ytugator
03.09.2024 10:53+1Держим только в голове, что 6 незаконно, а 5 тоже можно считать принуждением, но кого это волнует, да?
SuharkovMP
03.09.2024 10:53+2Бюджетников никто ни к чему не принуждает, они сами это делают, добровольно. Спросите любого из них, прежде чем тут выводы свои голословные выводить.
mlnw
03.09.2024 10:53Держим только в голове, что 6 незаконно, а 5 тоже можно считать принуждением, но кого это волнует, да?
Ну почему незаконно, голосовал ли сосед тоже должно быть известно (при условии, что не известно за кого голосовал, т.е. принцип тайности голосования не нарушен). Я ведь это и так легко могу увидеть при голосовании по бумаге, придя на участок, и взглянув в ведомость выданных бюллетеней.
Более того, во многих развитых странах (например, Бельгия) пошли дальше: по закону проголосовать обязаны все без исключения.
xi-tauw
03.09.2024 10:53+3Скорее всего, пункты 4 и 6 вместе, не позволяют сделать голосование тайным.
Peterlos Автор
03.09.2024 10:53+1Вы не можете проверить свой голос, потому что он находится в зашифрованном виде и вы не сможете понять за кого вы проголосовали
mlnw
03.09.2024 10:53+1Нет, обезличенные голоса должны быть доступны для просмотра за кого голосовали, для дальнейшего подсчёта результатов. Иначе теряется смысл.
Sadler
03.09.2024 10:53+15 и 6 несовместимы. Если вы можете проверить чужой голос, почему ваш работодатель не сможет проверить ваш голос? Если это требует паспортных данных или паролей, то будут собирать их. Если в блокчейне замешана куча фэйковых данных, и их нельзя отфильтровать, то невозможно достоверно узнать, за кого вы проголосовали. Если же фэйковые данные отфильтровать можно, то на вас можно давить.
Поэтому чисто физически: либо открытое голосование (хотя бы на уровне ID, которые вам выдают) и прозрачность результата, либо голосование тайное, и подсчёт на совести считающих. Просто потому, что государство контролирует выдачу любых уникальных идентификаторов гражданина, нет никаких независимых центров проверки подлинности личности избирателя.
roginvs
03.09.2024 10:53+1Теперь понятно почему мне и супруге не приходили sms с госуслуг во время голосования - чтобы можно было подсунуть другие бюллетени вместо наших и при этом количество бюллетеней сошлось. Как только голосование закончилось всё сразу стало приходить.
Напоминаю что без sms с госуслуг было невозможно проголосовать
Peterlos Автор
03.09.2024 10:53Да, есть гипотезы, что так можно нагнать голосов, хотя я не уверен, что в вашем случае это не технический сбой, с дэгом такое часто бывает
grishkaa
03.09.2024 10:53+4Фундаментальная проблема любых систем электронного голосования в том, что к ним есть два требования, которые невозможно выполнить одновременно:
Голосование должно быть тайным
Голосовать должны мочь только те, у кого есть на это право, и только один раз
Если сделать "в лоб", что государство так или иначе выдаст каждому гражданину с правом голоса специальный приватный ключ для подписи бюллетеней, а себе в базу положит публичный, такое голосование не будет тайным, потому что у государства будет достаточно информации, чтобы проассоциировать каждый бюллетень с конкретным гражданином.
Всякие схемы с одинаковым ключом на каждые N человек не сработают, потому что тогда ничего не помешает одному из законных владельцев ключа проголосовать и за всех остальных.
Если дать голосовать с ключом, который человек сам себе генерирует на своём устройстве, не будет возможности соблюсти второе условие, голосовать сможет кто угодно.
И в итоге как-то даже кажется, что вариант с бумажными бюллетенями — единственный жизнеспособный и есть. Разве что, если очень хочется, можно его модифицировать для возможности удалённого голосования: ты заранее лично и в запечатанном конверте получаешь ключ для подписи бюллетеня, так же, как ты бы получал обычный бюллетень на обычных выборах, а потом в назначенный день откуда угодно голосуешь.
sintech
03.09.2024 10:53+1Кто мешает привязать бумажный бюллетень к человеку в момент его выдачи в ИК? Выдача производится по паспорту, бюллетени пронумерованы(или нет?).
grishkaa
03.09.2024 10:53Я тоже почему-то думал, что они пронумерованы, но нашёл фотку своего бюллетеня с выборов в марте, и они таки нет. Там только в углу наклейка с голограммой и печать с номером участка. Но даже если бы они были пронумерованы, достаточно легко было бы визуально проследить, что в процессе выдачи номер никуда не переписали.
konst90
03.09.2024 10:53+1При наличии хорошей камеры, которая смотрит на стол со списком избирателей и стопкой бюллетеней, можно (при наличии номеров на бюллетенях, причем не обязательно видимых - достаточно, чтобы они лежали по порядку) выяснить, кто за кого голосовал. Конечно, за исключением случаев, когда кто-то после выдачи бюллетеней поменяется ими. Но в случае с базой отслеживание намного проще, конечно.
vadimk91
03.09.2024 10:53У нас на участке в последние выборы стояли только электронные урны (фактически это сканер), всех предупреждали, чтобы не сворачивали и не мяли бюллетень, иначе мол сканер его не примет. То есть идти из кабинки до урны надо с бюллетенем "во весь рост". И да, ты такой стоишь под камерой около урны, тут же и твоя морда лица на записи и результат твоего голосования, всё "в одном флаконе"
haqreu
03.09.2024 10:53Ну математики не зря хлеб едят. Вот система, которая позволяет выполнить ваши два требования:
https://www.belenios.org/howitworks.htmlgrishkaa
03.09.2024 10:53By default, the election server generates and sends one credential for each voter. The public part of each credential is stored on the election server while the private credentials are discarded.
А что мешает этому серверу сохранить рядом с публичным ключом СНИЛС или номер паспорта? Хотя с другой стороны,
In the context of a standard election, one does not have access to the individual votes because the ballots are never decrypted one by one. We use a property of the encryption system which allows to aggregate all the votes into one and decrypt only the result.
Но всё равно кажется, что слишком много доверия серверу. Например, как он докажет, что не сохранил приватный ключ? Это же невозможно доказать.
haqreu
03.09.2024 10:53Там разделены авторизация и голосование, используя одно, нельзя проверить другое. Дальше в протоколе гарантируется тайность и полная проверяемость голосования. Полная проверяемость гарантируется при предположении, что регистратор и непосредственно урна не являются нечестными одновременно. Это возможно обеспечить опубликованием списков голосующих.
Я не призываю использовать непосредственно этот протокол, я просто говорю, что математики работают над вопросом, и подвижки очень даже есть.
Skipy
03.09.2024 10:53Вообще-то еще должна быть возможность пересчета, чтобы исключить злоупотребления на уровне ПО
event1
03.09.2024 10:53Чтобы разобраться, как можно реализовать реальный вброс, я построил схему бизнес-процессов ДЭГ, используя свой многолетний опыт взаимодействия с ним и внешние консультации со знающими людьми
= "Я выдумал схему бизнес-процессов"
Оказалось, что блокчейн работает как бы сбоку
Могли бы выдумать другую схему и там бы оказалось, что блокчейн работает "как бы снизу". Или наискосок
Инструкция по вбросу
Хотите я вам предложу метод вброса, который проще, надёжней и дешевле, чем вот эти ваши фантазии? Держите:
отменяете и даже запрещаете всякие электронные голосования
разрешаете голосовать по почте без ограничений
разрешаете в каждой деревне иметь собственный избирательный закон
делаете схему голосования двух-, а лучше трёхступенчатой
....
Profit
Теперь, проверить ваше голосование будет невозможно. А если и получится где-то что-то оспорить, то дело погрязнет в судебных разбирательствах.
Кстати
И это приводит к невозможности наблюдателю сопоставить идентификаторы голосующего и понять, проголосовал ли избиратель тем же бюллетенем, который он получил.
Очевидно нужно для сохранения тайны голосования. Я думаю, что наблюдателям надо выбрать пару тысяч бюллетеней, найти избирателей и проверить верно ли записаны/подсчитаны бюллетени.
В целом, построить систему где будут одновременно соблюдаться, и тайна голосования, и возможность валидации собственного голоса, и возможность наблюдения трудно. Неудивительно, что есть шероховатости.
konst90
03.09.2024 10:53+1Двухступенчатая схема голосования наоборот, "гасит" вбросы на нижнем уровне. Есть в некотором регионе кандидат А набрал больше половины голосов, то рисование 99% голосов при 99% явке никакого смысла не имеет, потому что никак не "усилит" его результат. А вот в одноуровневой системе такое рисование имеет смысл - и при этом чем больше реальная поддержка кандидата А, тем проще нарисовать ему дополнительные голоса, потому что его противники имеют меньше возможностей наблюдения за выборами.
А в регионах, где результат непредсказуем, наблюдение будет самым интенсивным, и рисовать будет сложнее.
event1
03.09.2024 10:53Есть в некотором регионе кандидат А набрал больше половины голосов, то рисование 99% голосов при 99% явке никакого смысла не имеет, потому что никак не "усилит" его результат
Никто не рисует 99%. Это сложно сделать и ещё сложнее сделать незаметно. А вот докинуть 1000 бюллетеней, что бы выиграть весь регион, это да. И сделать легко, и шансов попасться мало.
konst90
03.09.2024 10:53+1Никто не рисует 99%. Это сложно сделать и ещё сложнее сделать незаметно.
Посмотрите на результаты по Чечне, например. Президентские '24: явка - 97%, Путин - 99%. В одноуровневой системе это имеет смысл, потому что каждый голос из этих 99% приближает победу своего кандидата. В двухуровневой системе эти аномальные голоса не повлияют на общую картину, что снижает возможность достижения общего результата за счёт такого рисования.
Скорее всего, такая система и появилась именно потому, что центральная власть была слаба, а власть на местах сильна и неконтролируема: никто из Вашингтона не проверит, что нарисовали в далёком Техасе, поэтому все жители Техаса представлены некоторым зависящим от числа жителей числом выборщиков, которые выражают консолидированную волю штата.
event1
03.09.2024 10:53Посмотрите на результаты по Чечне, например. Президентские '24: явка - 97%, Путин - 99%
И у вас разумеется есть обоснованные доказательства, что это не настоящие результаты? Не "так не бывает, потому что такова моя вера", а нормальные.
sal0ma
03.09.2024 10:53А в советское время небыло тайного голосования.
Мы голосовали своими комсомольскими билетами все разом и прелюдно.
vadimk91
03.09.2024 10:53+2Ну на первые выборы я ходил ещё при советской власти в Ленинграде в 1989 и голосовал бюллетенем тайно, это были выборы народных депутатов СССР.
PS минус не мой, я вообще считаю минусовать оппонента не написав аргументацию - по меньшей мере некрасиво
Herdan
03.09.2024 10:53"Чтобы хотя бы начать говорить о честности ДЭГ, нужен, как минимум, открытый код и гарантия того, что именно он используется в ходе голосования."
Это уже не смешно и выглядит как беседа в детском саду. Давайте тогда уж заставим производителей оборудования и программного обеспечения на котором построена инфраструктура выкладывать исходный код в публичное пространство.не забывайте что это КИИ и исходные коды к инф. системам так или иначе принадлежит государству в котором оно используется и может охранятся законом о государственной тайне.
Kirikekeks
03.09.2024 10:53Поправьте, не спец, но блокчейн - распределённая система владения, которая пропадает сама при концентрации в одних руках одного владельца. Не может же быть блокчейна Гагарина, блокчейна РосТК, и блокчейничка Аделии? Что -то близко к "колобок повесился!"
ifap
Первая мысль администратора ДЭГ после прочтения статьи: черт, спалили! Вторая мысль: постойте, все можно было сделать так просто?! А мы-то схемы мутили... ;)
konst90
Пила Чурова с 2011 года намекает, что да, можно.
Harwest
Вы таки правы на все 146% )