Экспертная колонка Кирилла Полякова, начальника управления технологий распределенных реестров ДИТ Москвы
Впервые дистанционное электронное голосование или, как мы его еще называем, — ДЭГ — прошло как эксперимент на выборах депутатов в Мосгордуму 8 сентября 2019 года в трех избирательных округах. Решение было создано и апробировано внутренними силами ДИТ Москвы менее чем за один год буквально с нуля. Большинство ключевых участников и заказчиков признали опыт успешным, система прошла все проверки и оказалась устойчивой ко взломам. Это доказало, что ее можно применять для проведения иных голосований. Подробнее про тот опыт можно прочитать на Habr.
Тогда, в 2019 году, была создана Техническая рабочая группа, которая продолжила работу и на последующих проектах (в нее попасть может любой желающий, ниже расскажу, как). Она стала главным критиком и одновременно мотивировала разработчиков постоянно совершенствовать проект. Тогда же мы получили много справедливой и очень полезной обратной связи, в том числе от международного эксперта по криптографии и избирательному праву Пьеррика Годри. В целом мы поняли, насколько важен внутренний аудит с привлечением лучших команд для ревью системы — включая поиск уязвимостей, разработку модели угроз с различных сторон, анализ кода и функционала. В результате ДИТ Москвы стал первым в мире представителем госсектора, который показал открытый исходный код решения, именно бекенд и ключевые модули.
Главным в том электронном голосовании было то, что это был эксперимент. Нужно было понять, реализуемо ли в принципе такое решение. Поэтому даже не столько важно конкретное выбранное техническое решение, сколько проект в целом — то, как он будет воспринят и как система отработает на боевом голосовании.
Самое полезное при первом запуске ИТ-системы — это открытые боевые тестирования. У нас их было четыре. Во время тестирований мы отрабатывали различные риски из модели угроз: отключение света, перебои с интернетом, DDoS-атаки и т.д. Этот опыт был повторен и в следующих голосованиях.
C 25 июня по 1 июля 2020 года прошло общероссийское голосование по изменениям в Конституцию РФ. В Москве, а также в Нижегородской области оно было организовано в том числе в дистанционном электронном формате с применением блокчейна (что в условиях пандемии было очень актуально).
При имеющихся вводных, мы ожидали нагрузку в 1 млн избирателей. Было понятно, что используемая ранее в системе электронного голосования блокчейн-платформа Ethereum нагрузку просто не потянет. Стали искать другие варианты и остановились на одном из самых быстродействующих блокчейнов — Exonum. Нам также было важно, что он преимущественно заточен на решение задач как приватный блокчейн.
Еще одной новой вводной в 2020 году стала задача обеспечить «бессмертный» бюллетень. То есть бюллетень с неограниченным сроком действия на всем периоде голосования, который не пропадет, если у избирателя завис компьютер, произошел сбой связи и т.п. «Бессмертный» бюллетень оставался доступным на том же устройстве под управлением того же браузера, на котором был открыт изначально, при условии сохранения ссылки на него.
В электронном голосовании по изменениям в Конституцию РФ участвовала не только Москва, но и Нижегородская область, поэтому мы дали возможность избирателям авторизоваться не только через mos.ru, но и через федеральный портал gosuslugi.ru. Попытки авторизоваться через обе системы автоматически блокировались (учитывалось только первое поданное заявление на участие). Мы также учли критику в части криптографии в голосованиях 2019 года и в этот раз внедрили более современное решение, основанное на эллиптической кривой Curve25519, она используется как обмен ключами по умолчанию в OpenSSH, I2p, Tor, Tox и даже в IOS.
Дополнительной сложностью был рост нагрузки на все системы правительства Москвы из-за режима самоизоляции: жители стали активнее пользоваться электронными сервисами и нагрузка на каналы существенно возросла.
Чтобы повысить отказоустойчивость системы дистанционного голосования, мы использовали распределенную архитектуру — задействовав географически разнесенные центры обработки данных (ЦОД). Это обеспечило отказоустойчивость: система смогла бы продолжить работу даже при отключении электроэнергии в целом районе Москвы. Мы тестировали такой сценарий перед голосованием — отключали один из ЦОДов и проверяли стабильность работы отдельных компонентов и системы в целом. Мы также использовали площадки-сателлиты для обеспечения требований по нагрузке.
Сам блокчейн был распределен по две ноды на каждый ЦОД — всего шесть нод в трех центрах обработки данных, плюс нода наблюдателя (о ней скажу дальше). Так как система является одноранговой, то работа в режиме, когда один ЦОД является ведущим, а второй резервным, невозможна.
Самый известный пример того, что публичная блокчейн-сеть Ethereum не может «переварить» высокую нагрузку, произошел в конце 2017 года. Тогда транзакции не подтверждались по несколько дней, а иногда и просто не проходили. Примечательно, что на тот момент не работало ни само верхнеуровневое приложение, вызвавшее чрезмерную нагрузку, ни основная сеть, хотя на приложение приходилось лишь 10% от общего количества транзакций. Очевидно, что такая точка отказа для процесса голосования не применима, поскольку он строго регламентирован по таймлайну и нельзя просто так задержать транзакции даже на несколько минут, не говоря о часах.
Сеть Bitcoin обладает пропускной способностью порядка 10 транзакций в секунду, что также делает ее использование неприемлемым. При такой нагрузке за полные сутки смогут проголосовать только 860 тыс. человек — и это при условии, что никакие другие транзакции в это время обрабатываться не будут, что невозможно. Мы понимали, что единственный возможный для нас путь — приватная сеть с возможностью подключения внешних наблюдателей.
Мы реализовали ноду наблюдателя так, чтобы можно было в режиме реального времени смотреть за результатами. Нода была представлена как веб-интерфейс с возможностью просмотра и скачивания зашифрованных результатов в режиме реального времени. Следующим шагом будет использование полноценной ноды, однако в рамках работы с такой высокой нагрузкой нужно предусмотреть опасность воздействия на сеть через ноду наблюдателя. Главное преимущество электронного голосования — простота наблюдения за процессом. Но важно найти баланс между прозрачностью и уязвимостью. Поэтому наш следующий обязательный шаг — анкоринг в публичную сеть (механизм проверки данных из приватного блокчейна на неизменность путем их публикации в более крупную сеть с большим количеством участников и блоков – прим.).
В дальнейшем мы планируем расширить систему электронного голосования на мобильные устройства — сделать возможной синхронизацию с нодой, предоставлять мощности процессора для обеспечения контроля и возможного дополнительного канала для вычисления результата. В планах — также развитие функционала веб-интерфейса. Здесь мы смотрим в сторону больших возможностей для совместной работы и верификации результата на уровне наблюдателей.
Самым защищенным компонентом системы дистанционного электронного голосования являлся бюллетень. Ввод SMS-подтверждения и доступ к электронному бюллетеню означали факт участия в ДЭГ.
Мы предусмотрели несколько мер на случай, если у пользователя что-то пошло не так. Например, полученную ссылку на бюллетень можно было открыть в том же браузере и на том же устройстве в любое время до окончания электронного голосования (20:00 30 июня) — при условии, что устройство не было выключено, перезагружено или очищена его память. Если на устройстве прерывалось интернет-соединение или происходили какие-либо другие сбои в его работе, достаточно было обновить страницу с бюллетенем после восстановления подключения к интернету — это возвращало бюллетень на шаг назад в режим «предпросмотр» и позволяло продолжить процесс голосования.
Кнопка «Проголосовать» появлялась сразу после выбора варианта ответа в бюллетене. После ее нажатия бюллетень зашифровывался на устройстве избирателя и отправлялся в блокчейн. Если в момент отправки интернет-соединение прерывалось, бюллетень в зашифрованном виде отправлялся сразу же после восстановления связи.
При проектировании системы были заложены два фундаментальных механизма для сохранения тайны голосования и анонимности избирателя — анонимайзер и миксер.
Анонимайзер не позволяет отследить или каким-либо образом идентифицировать пользователя, поскольку сама страница никак не связана с идентификационными данными о нем, не содержит никаких артефактов и информации о человеке.
Миксер, в свою очередь, перед отправкой голосов в блокчейн складывал их в группы и перемешивал голоса внутри случайным образом. Это исключало даже теоретическую возможность сопоставления голоса по времени его получения.
У нашей системы дистанционного электронного голосования было несколько функций и элементов, которые на первый взгляд могут показаться странными и ненужными, но которых, однако, требует действующее законодательство. Самым ярким примером может служить передача результатов голосования в государственную автоматизированную систему (ГАС) «Выборы». Этот процесс намеренно не автоматизировался и производился вручную оператором от Московской городской избирательной комиссии со специального защищенного компьютера в помещении Территориальной избирательной комиссии по дистанционному электронному голосованию (ТИК ДЭГ). Это требование к ГАС «Выборы» — она должна обеспечивать повышенную безопасность.
Другой пример — использование так называемых блокчейн-принтеров, которые в режиме онлайн «оставляли бумажный след», т.е. печатали в режиме онлайн зашифрованные ключевые транзакции: предоставление доступа к бюллетеню, запись в блокчейн зашифрованного голоса. Эти принтеры позволяли провести ручной пересчет бюллетеней, если бы поступил такой запрос. Это тоже одно из обязательных требований.
Для проверки отказоустойчивости системы мы проводили нагрузочные тестирования (комплекс мероприятий для проверки всех компонентов сети с нагрузкой, приближенной или превышающей ожидаемую) каждый день вплоть до дня старта голосования. Публичный тест системы (реальное голосование для москвичей и жителей Нижегородской области) проводили в течение двух дней в связи с необходимостью отработки на бою аварийных сценариев. При этом уже шел прием заявок на основное голосование, который не прекращался и в период проведения тестового голосования.
Как и в 2019 году мы объявили приз в 2 млн рублей за взлом системы (во время тестирования, не в дни голосования). Но сделать это снова никому не удалось.
После завершения ДЭГ 30 июня в 20:00 мск в ГАС «Выборы» были переданы данные об избирателях, которые зарегистрировались на электронное голосование, но данным способом не проголосовали. Их добавили в списки избирателей на УИКи по месту регистрации, предоставив таким образом возможность проголосовать обычным офлайн-способом в день голосования — 1 июля. Все это время, до начала расшифровки, система была закрыта для приема бюллетеней, но все средства наблюдения работали, так можно было убедиться, что никаких манипуляций не происходит, блокчейн исправно генерил нулевые блоки транзакций.
По опыту 2019 года мы знали, что такие проекты требуют вовлечения широкого круга отраслевых специалистов. Для аудита системы были привлечены компании Positive Technologies и «Лаборатория Касперского» как одни из наиболее компетентных и авторитетных игроков рынка информационной безопасности.
Техническая рабочая группа включала критически настроенных ИТ-специалистов, в ее состав в 2020 году вошли и новые члены. Например, добавились представители Партии прямой демократии, которая по сути является конкурентом, так как ее повестка существует вокруг разработки собственного электронного голосования. Однако это именно тот случай, когда совместное участие в подобных проектах усиливает и обогащает каждую из сторон.
Из-за пандемии почти все совещания проводились онлайн с обязательной записью эфира. Для оперативного общения членов Технической рабочей группы был создан чат в Telegram. В нем присутствуют представители ДИТ Москвы от разных направлений, которые отвечают на вопросы. Кстати, они продолжают это делать и после завершения проекта, чат активен постоянно.
Что же касается Пьеррика Годри, который в 2019 году дал очень ценные замечания в части механизма шифрования голосов и работы системы в целом, то в этот раз он отказался участвовать в аудите системы, сославшись на отсутствие документации на систему на английском языке.
Расшифровка самих голосов была запущена после завершения общероссийского голосования (после 20:00 мск 1 июля). Она заняла порядка 10 минут. Результаты электронного голосования в двух субъектах РФ — Москве и Нижегородской области — были публично представлены по завершению расшифровки, а также переданы в ГАС «Выборы» для подведения общих результатов голосования в стране.
Мы приглашаем к дискуссии в технической плоскости (не затрагивая политические аспекты) всех интересующихся и всех неравнодушных. Площадкой для отработки организационно-технических моментов проекта может служить Habr, а для вопросов по коду и предложениями по усовершенствованию системы предлагаем использовать GitHub.
Чтобы войти в Техническую рабочую группу, пришлите нам на почту (support-vybory@mos.ru) ФИО и контактную информацию, а также кратко опишите свои компетенции и то, почему вам интересно попасть в состав группы.
Тренды умных городов за 2024 год
ICT.Moscow
Нажимая на кнопку, вы соглашаетесь с политикой конфиденциальности
ICT.Moscow — открытая площадка о цифровых технологиях в Москве. Мы создаем наиболее полную картину развития рынка технологий в городе и за его пределами, помогаем бизнесу следить за главными трендами, не упускать возможности и находить новых партнеров.