Введение в курс дела
На мартовских выборах президента я был официальным наблюдателем за федеральным электронным голосованием с доступом к ноде наблюдения. Совместно с коллегами мы обнаружили, что количество голосов в официальных протоколах на 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 тысяч, что и в официальных данных. Похоже, что это не добавили голоса сверху, а скорее убрали избирателей. Но как такое возможно?
С очень высокой вероятностью это была банальная техническая ошибка, а не попытка махинации. Об этом говорят относительно малые объёмы и локальное распределение "исчезнувших" граждан по регионам. По моим инсайдам от разработчиков ДЭГ, это был сбой загрузки списка избирателей в блокчейн; программа некорректно отработала и просто не залила часть базы. Верить этой версии? На самом деле ответ на этот вопрос не так уж важен, мы это не сможем достоверно проверить, здесь самое важное и интересное другое.
Ошибки системы зачастую говорят о ней намного больше, чем её документация или заявления разработчиков. Что нам показывает факт возможности присутствия в ДЭГ голосов больше, чем избирателей? Это значит, что они в блокчейне существуют отдельно друг от друга без каких-либо прочных связей, т. к. очевидно, голос не может взяться из ниоткуда без избирателя. И это уже очень весомый аргумент в пользу того, что реальная архитектура ДЭГ не завязана на открытый наблюдателям блокчейн, что открывает пространство для гипотез о вмешательствах в выборы.
Если отсутствует связь между избирателем и его бюллетенем, то тогда теоретически в систему можно добавлять голоса или “мертвые души”, и поймать это наблюдателям будет практически невозможно.
По пропавшим избирателям даже был суд, но он сказал, что все корректно и никаких нарушений выявлено не было.
Я построил схему бизнес-процессов федерального ДЭГ с учётом открывшихся фактов архитектуры для того, чтобы понять, где может быть уязвимость.
Чтобы разобраться, как можно реализовать реальный вброс, я построил схему бизнес-процессов ДЭГ, используя свой многолетний опыт реверс-инжиниринга и внешние консультации со знающими людьми. Я сознательно не прибегал к официальной документации, потому что в ней может быть написано всё что угодно, и непонятно, как она вообще коррелирует с реальностью. Более того, это ГОСТ 34, который, по слухам, даже не дописан до конца уже после многолетней эксплуатации системы. Поэтому реверс-инжиниринг — наше всё.
Оказалось, что блокчейн работает как бы сбоку: в него загружаются избиратели перед голосованием и, по сути, он больше не трогается, а вся работа идет с базой данных внутри Ростелекома. В неё можно добавить или убрать избирателей, и это никак не сможет увидеть внешний наблюдатель.
Ещё важно отметить, что уникальный идентификатор (GUID) избирателя в блокчейне для выданного и сданного бюллетеня генерируется из разных мест: в одном случае из паспорта, в другом — из СНИЛСа. И это приводит к невозможности наблюдателю сопоставить идентификаторы голосующего и понять, проголосовал ли избиратель тем же бюллетенем, который он получил.
Учитывая все эти обстоятельства, возникает широкое поле для скрытого вмешательства организаторов в выборы.
Инструкция по вбросу
Я посоветовался с несколькими аналитиками ДЭГ и разработчиками подобных систем и пришёл к следующей схеме потенциального вброса голосов, исходя из вышеописанных фактов. Неформально мне подтвердили, что такая схема манипуляции в теории возможна.
Важно! Я не утверждаю, что подобный вброс был; я лишь говорю о том, что он технически возможен.
В блокчейн и базу Ростелекома загружаются реальные избиратели, начинается голосование, люди голосуют, но внезапно явка оказывается недостаточной для руководства. Чтобы решить эту проблему, внутри Ростелекома в свою внутреннюю базу заливают дополнительных избирателей, которые отдают голос за того, кого нужно. Чтобы совсем скрыть улики и избежать путаницы в цифрах, можно дополнительно удалить такое же количество реальных непроголосовавших избирателей. Со стороны наблюдателей понять, что голоса идут не от тех людей, которые изначально были в списках, невозможно. В итоге получается, что явка необходимого уровня, а в списках избирателей, доступных для наблюдения, неконфликтующее количество избирателей и голосов — менее 100 процентов. Все довольны.
Для наглядности приведу пример:
Представим, у нас есть выборы с 10 реальными избирателями. Это количество заливают в блокчейн и в базу Ростелекома. Начинается голосование, но из этих 10 голосуют только 5, то есть явка 50 процентов. Эти 5 голосов видны для наблюдателей в блокчейне. Для коррекции результатов кто-то добавляет в базу РТК ещё 5 избирателей, и они тоже голосуют, то есть явка получается уже 100 процентов. Со стороны блокчейна обнаружить вмешательство невозможно из-за отсутствия связи между голосом и избирателем, т. е. мы не понимаем, пришёл ли голос от избирателя, который был в списках изначально или нет. Нужная явка достигнута, но на самом деле избирателей в сумме 15, а не 10. Чтобы совсем не оставлять следов, можно перед добавлением "мертвых душ" убрать из списка избирателей такое же количество непроголосовавших.
Ну и выводы:
Главный вывод банален и повторялся много раз: система непрозрачна для наблюдения, и вся власть над ней находится в одних руках, которые могут манипулировать ходом голосования как угодно. И в нынешних условиях вряд ли что-то изменится. Есть ли фальсификации или нет — не так уж важно. Если в теории их возможно осуществить, то система порочна.
Чтобы устранить возможность такого типа вбросов, нужно, как минимум, всю работу с избирателями проводить через блокчейн, а не через свою внутреннюю базу данных, которая недоступна наблюдению. И, разумеется, формировать идентификаторы избирателей (GUID) из одного места, чтобы можно было понять, что тот же избиратель, который получил бюллетень, тем же бюллетенем и проголосовал. Но это всё полумеры.
Чтобы хотя бы начать говорить о честности ДЭГ, нужен, как минимум, открытый код и гарантия того, что именно он используется в ходе голосования. Но пока этого нет как в Московском ДЭГ, так и в федеральном.
Спасибо за внимание!