Более миллиона жителей Москвы и Нижегородской области проголосовали за поправки к Конституции или против них через интернет. «Медуза» выяснила, что паспортные данные этих избирателей лежали практически в открытом доступе. Более того, оказалось, что некоторые интернет-избиратели были записаны в системе дважды, а другие смогли проголосовать, хотя их паспорта МВД считает недействительными. Мы опубликовали список недействительных паспортов, а также простую инструкцию, чтобы вы могли сами проверить нашу находку.
Сперва мы скачали архив degvoter.zip
30 июня источник «Медузы» прислал нам фотографию инструкции по проверке интернет-избирателей на голосовании по изменениям в Конституции РФ. Московская городская избирательная комиссия (МГИК) накануне направила ее председателям столичных территориальных избирательных комиссий. Документ не содержал никаких грифов секретности и конфиденциальности.
Источникам на заметку
Следуя этой инструкции, члены УИК с помощью специальной программы, особым образом оформленных СМС-сообщений или звонка оператору колл-центра могли точно выяснить, записывался ли конкретный гражданин в интернет-избиратели и проголосовал ли он в итоге дистанционно. Проверить избирателя можно было по номеру его паспорта.
Такая проверка требовалась, чтобы 1 июля на своем избирательном участке могли проголосовать только те из записавшихся на интернет-голосование, кто с 25 по 30 июня не воспользовались этой возможностью.
Чтобы запустить программу, ее нужно было сначала скачать. В инструкции были указаны ссылка на зашифрованный архив degvoter.zip и пароль от него. Архив располагался на одном из государственных сайтов. При этом доступ к архиву был свободным: 1 июля как минимум с 9 до 12 часов по Москве его мог скачать любой желающий.
Мы не публикуем ссылку по двум причинам:
- Ссылка на государственный сайт уже не работает, но она до сих пор позволяет найти и скачать архив.
- Архив оказался очень слабо защищен.
У нас был пароль, но мы решили выяснить, насколько сложно его подобрать. Для этого мы воспользовались программой John the Ripper.
- Сначала мы извлекли из архива хешированный пароль, запустив в терминале команду zip2john degvoter.zip > hash
- Затем запустили перебор паролей командой john hash (без дополнительных параметров, как если бы мы ничего не знали о пароле — ни его длины, ни набора используемых символов)
На стареньком процессоре Intel Core i3-4160 пароль от degvoter.zip был подобран за пару дней.
В этом архиве оказались паспорта всех интернет-избирателей
Программа для проверки интернет-избирателей представлена в виде небольшого исполняемого файла degvoter.exe. Она предлагает ввести серию и номер паспорта гражданина России — после чего сообщает, был ли предоставлен человеку с этим паспортом «доступ к бюллетеню на дистанционном электронном голосовании» или нет. Если попробовать ввести случайные серию и номер, скорее всего, вам сообщат, что этот паспорт не найден «в списке участников дистанционного голосования».
При этом сами сведения о паспортах интернет-избирателей с пометками о голосовании лежали в базе данных db.sqlite, не защищенной паролем. Серии и номера паспортов находились там не в открытом виде. Они были закодированы в виде цифро-буквенных последовательностей (хеш-сумм). Работало это так: программа degvoter.exe вычисляла хеш-сумму от вводимых пользователем серии и номера паспорта, а потом искала в базе данных db.sqlite эту хеш-сумму и соответствующую ей отметку о голосовании.
Но с тем же успехом можно было обойтись и без хеш-сумм. «Медуза» выяснила, что расшифровать паспортные данные интернет-избирателей оказалось очень просто.
Мы извлекли хеш-суммы, записанные в db.sqlite. Все они оказались длиной 256 битов (64 символа в шестнадцатиричной записи). Есть много разных хеш-функций, которые могут генерировать строки такой длины. Чтобы найти нужную, мы вычислили с помощью этих функций хеш-суммы паспортных данных нескольких реальных интернет-избирателей и попытались их отыскать среди хеш-сумм из db.sqlite.
Оказалось, что серия и номер каждого паспорта хешированы по алгоритму SHA-256. Данные для хеширования были представлены в виде одного десятичного числа — между серией и номером паспорта не было пробела.
Дальше все было просто. Паспортные данные интернет-избирателей удалось восстановить с помощью программы John the Ripper. На этот раз мы использовали несколько опций:
- явно указали, какую хеш-функцию нужно использовать для перебора --format=raw-sha256
- сузили перебор до чисел в диапазоне от 0000000000 до 9999999999 --mask='?d?d?d?d?d?d?d?d?d?d'
Мы запустили в терминале команду john --mask='?d?d?d?d?d?d?d?d?d?d' --format=raw-sha256 hashes > passports и через несколько часов восстановили все серии и номера паспортов россиян, записавшихся на дистанционное голосование.
В итоге у нас оказались 1 190 726 записей с паспортными данными. Ровно столько избирателей, по данным властей, записалось на дистанционное электронное голосование. То есть с учетом слабой защиты и свободного доступа к архиву degvoter.zip российские власти фактически выложили в открытый доступ персональные данные всех интернет-избирателей Москвы и Нижегородской области.
Это уже не первая утечка персональных данных участников дистанционного голосования. Осенью 2019 года, сразу по окончании выборов в Мосгордуму, в распоряжении Фонда борьбы с коррупцией оказались данные московских интернет-избирателей. «Медуза» тогда выяснила, что они с высокой вероятностью были подлинными.
Подробнее про 2019 год
Мы проанализировали данные — они выглядят настоящими
В описании бланка российского паспорта из Постановления правительства России № 828 от 08.07.1997 говорится, что нумерация паспорта состоит из трех групп цифр: «Первые 2 группы, состоящие из 4 цифр, обозначают серию бланка паспорта, третья группа, состоящая из 6 цифр, обозначает номер бланка паспорта».
Мы решили изучить серии паспортов интернет-избирателей. Первые две цифры серии зависят от региона, в котором паспорт выдан. Последние две цифры серии примерно указывают на год выпуска бланка паспорта.
После группировки паспортов из базы данных db.sqlite у нас получилась 1881 серия паспортов в диапазоне от 0100 до 9999. Вы можете скачать эти данные — series.csv.
Регион выдачи паспорта (как правило, одному из них соответствуют первые две цифры номера)
По официальным данным, на интернет-голосование записались 1 051 000 москвичей и 139 726 жителей Нижегородской области. Изученные нами серии паспортов хорошо укладываются в эти рамки: 921 176 паспортов имеют код Москвы (45), 135 723 — Нижегородской области (22). На третьем месте с 47 463 паспортами находится Московская область (46), в каждом из других регионов выдано меньше трех тысяч паспортов.
Первые две цифры серии паспорта не всегда строго соответствуют конкретному региону. Например, известно, что в 2017 году в Саратовской области временно выдавали паспорта, начинавшиеся с цифр 09, а не 63, как обычно.
Мы не знаем, в каких регионах выдавались паспорта, начинавшиеся с 02, 06 и 23. Но это редкие серии — на каждую приходится только по одному интернет-избирателю.
Год выпуска бланка (это вторые две цифры)
Первые российские паспорта начали выдавать в 1997 году. Большая часть паспортов интернет-избирателей укладывается в эти рамки.
В базе данных мы обнаружили только 89 паспортов с последними числами в сериях, которые не получается соотнести с годом выдачи бланка.
Некоторые избиратели могли проголосовать дважды
Судя по меткам из базы данных, интернет-избирателям было выдано 1 107 594 электронных бюллетеня (некоторые из зарегистрировавшихся избирателей в итоге не участвовали в голосовании). Это немного меньше официального числа в 1 107 648 бюллетеней.
«Медуза» обнаружила 97 паспортов, которые оказались записаны в базе данных интернет-избирателей дважды. То есть общее число реальных интернет-избирателей (проголосовавших и только зарегистрировавшихся), возможно, на самом деле было еще меньше официального числа (почти на сто человек).
Возле шести из этих паспортов в обеих записях стоит отметка, что избиратель не участвовал в интернет-голосовании. Для остальных 91 паспорта одна отметка утверждает, что избиратель уже проголосовал дистанционно, другая — что нет, еще не голосовал.
Программа degvoter.exe, которой могли пользоваться члены УИК, по-разному реагировала на такие двойные записи с разными отметками (в зависимости от того, какая из них была записана раньше). В 25 из 91 случая программа утверждала, что избиратель с таким паспортом еще не голосовал, хотя вторая отметка утверждала обратное. То есть теоретически избиратель с таким паспортом мог прийти на свой избирательный участок 1 июля и «доказать» членам УИК, что он имеет полное право получить бумажный бюллетень.
Тысячи паспортов интернет-избирателей оказались недействительными
На сайте Главного управления по вопросам миграции МВД России находится сервис проверки российских паспортов по списку паспортов, признанных недействительными. Там же кроме конкретного паспорта можно скачать всю базу недействительных паспортов; она периодически обновляется. В нашем распоряжении есть две такие базы, загруженные с сайта МВД 22 мая 2020 года и 3 июля 2020 года. То есть до объявления даты всероссийского голосования и в день подведения итогов этого голосования.
Мы сверили сведения обо всех паспортах интернет-избирателей с этими базами. В обоих случаях тысячи паспортов участников дистанционного голосования, по данным МВД, считаются недействительными: 2347 по базе 22 мая и 4720 по базе 3 июля.
При этом 209 паспортов интернет-избирателей, которые считались недействительными 22 мая, к 3 июля исчезли из базы МВД.
«Медуза» проверила отметки о голосовании — оказалось, что большая часть владельцев этих недействительных паспортов приняла участие в интернет-голосовании. 2060 из 2347 (22 мая) или 4233 из 4720 (3 июля).
Не верите? Проверьте сами
- Выберите любой паспорт из 4720 недействительных, которые мы опубликовали ниже.
- На сайте МВД РФ убедитесь, что этот паспорт и правда недействительный.
- Наконец, проверьте, что этот паспорт использовался для записи на интернет-голосование, с помощью специального сервиса на сайте ЦИК РФ.
Исх. № 02-02/968 от 30.06.2020
Инструкция по использованию автоматизированного сервиса информирования о факте получения гражданином доступа к бюллетеню для дистанционного электронного голосования.
ЦИК РФ
МГИК
ТИК
Недействительные паспорта
МВД включает в их число утраченные и похищенные паспорта; паспорта, оформленные на утраченных и похищенных бланках; признанные недействительными паспорта (например, после выдачи нового).