На днях мне пришло сообщение от портала Госуслуги с предложением поучаствовать в тестировании дистанционного электронного голосования (ДЭГ). Стало интересно, начал гуглить и поисковик сразу же выдал ссылку на хабровскую статью «Обзор системы дистанционного электронного голосования ЦИК РФ». Ознакомился…и…после прочтения, испытал противоречивые чувства, которые вылились в эту статью, созданную на базе идеи, описанной мной еще в 2018 году. Подобно продвижению среди искусных воинов доспеха, с полностью отсутствующей защитой от тяжелого металлического ботинка в задней части чуть пониже спины, я искренне не понимаю, как можно было всерьез пытаться продать систему-решето из упомянутой выше статьи хабровчанам? Ведь, очевидно, что в процессе проведения выборов возникает конфликт интересов между  власть имущими, не желающими уступать дорогу другим теми, кто власти пока не имеет, но желает её получить  теми, кто хорошо устроился при действующей власти и ничего менять не хочет.  простыми гражданами, радеющими за принципы сменяемости власти и соблюдения своих избирательных прав. И главная проблема любой избирательной системы – представители первой группы, потому что у власть имущих есть доступ к данным всех жителей страны, которые могут быть использованы для формирования потока фейковых бюллетеней. Есть огромный админ ресурс. Есть доступ к бюджетным деньгам. Под рукой имеется силовой аппарат и карманная судебная система. Каким образом система, предложенная ЦИК-ом защищена от организатора выборов? Да, никак. И дочитав эту статью до конца, вы поймете почему. Например, ничто не мешает государству посадить за компьютеры бригаду троллей и начать вбивать данные мертвых душ, формируя проправительственный рой бюллетеней. Да собственно, вполне возможно армия виртуальных людей, уже затаилась в базе данных ЕСИА и лишь ждёт своего часа? А ввиду того, что задача регистрации голосов распараллеливается простым увеличением количества троллей, а также учитывая тот факт, что у троллей есть целых три дня, - приходим к выводу, что с помощью этой «выдающейся» системы, можно изменить результаты любых выборов... Причем сделать это можно тайно, без возможности дальнейшего расследования и проверки… И лично у меня создается ощущение, что «циковская» система специально для этого и создана… :) Главная же проблема заключается в том, что тайно сфальсифицировать выборы – это одно, а вот заставить людей поверить в итоговые цифры – это совершенно другое.  Но довольно критики, друзья, давайте перейдём к конструктиву…и подумаем над тем какая она должна быть, рыба нашей мечты… Как вы уже могли догадаться, ключевой критерий оценки успешности избирательной системы, - это высокий уровень доверия со стороны граждан. Это действительно, самый важный аспект, потому что именно он позволяет избежать волнения среди населения в пост-выборный период. И, как следствие, даёт возможность стране перейти в светлое будущее без серьезных потрясений. И чтоб сделать успешную избирательную систему, нужно добиться беспрецедентной прозрачности как в бизнес процессах, так и в технических аспектах. А это в свою очередь невозможно при абсолютной анонимности. Анонимность – враг прозрачности. Задача построения избирательной системы, в которую поверят люди, -  сложна, но всё-таки можно пройти по краю, между анонимностью и прозрачностью, и получить все плюшки как с одной, так и, с другой стороны. Для начала давайте пойдем от проблемы, и перечислим типы фальсификаций на «классических» выборах, от которых новая избирательная система должна защищать: Внесение фиктивных имен в списки избирателей или «Мертвые души» (F) Фальсификация итоговых цифр голосования. Это когда глава избирательной комиссии УИК No 666, приезжает с итоговым протоколом в ТИК No 777, там его встречают, отводят в сторонку, и перед внесением протокола в систему ГАС-выборы «немного» правят протокол (T)  Вбросы (в урну закидывают пачку бюллетеней) (F) «Хитрый палец» - порча бюллетеней, заполненных в пользу нежелательного кандидата (M) Перестановка результатов голосования, - это когда кандидата, занявшего последнее место, меняют с первым (T) Неправильный подсчет бюллетеней сотрудниками избирательной комиссии (M-T) Подмена сейф пакетов и избирательных урн темной безлунной ночью (M) Приезд пожарных, с последующим досрочным закрытием участка (T) Забор сейф пакетов сотрудниками МВД на ночное хранение. С целью препятствования подмене бюллетеней и фальсификации выборного процесса. Наша доблестная всегда на страже наших интересов (M-T) Голосование по паспортным данным. Если избирательным комиссиям будут известны не только ФИО и адреса избирателей, но и их паспортные данные, то не исключено, что недобросовестные члены комиссий смогут внести в журнал за непрошедших на участок избирателей их данные, взять бюллетень и проголосовать (F) Изъятие или признание недействительными бюллетеней, заполненных в пользу нежелательного кандидата (M) Карусель – это когда группа небритых лиц ездит по разным избирательным участкам и голосует на каждом, подобно бродячему цирку, устраивающему представление в каждом уездном городке (F) «Волшебная урна» или выездное голосование на дому (F) «Пустышка» - члены избирательных комиссий могут специально выдавать недействительные бюллетени, не имеющие подписей двух членов избирательной комиссии или печати (M) Все эти проблемы можно разбить по трем классам: Изменение существующего бюллетеня (M) Вброс фантомных бюллетеней (F) Фальсификация итоговых цифр (T) И подобно требованиям ACID к базам данных, давайте озвучим минимальные требования к избирательной системе: Immutability. Неизменяемость голоса сразу после того как человек проголосовал. Защита от проблемы (1)(M) Accuracy. Точное соответствие проголосовавших людей количеству бюллетеней в базе данных. Защита от проблемы (2)(F) Countability. Возможность избирателя, самостоятельно подсчитать итоговые цифры. Защита от проблемы (3)(T) Итого, если избирательная система удовлетворяет требованиям «IAC» – то это значит, что можно её обсуждать в сообществе. Ну а так как система предложенная ЦИК, удовлетворяет только первому требованию IAC (Immutability)*, то и тратить время на её дальнейшее полоскание смысла не вижу. Теперь настало время привести пример избирательной системы, удовлетворяющей требованиям «IAC». Процесс голосования. Вы приходите на избирательный участок, подходите к компьютерному терминалу, вводите свои серию и номер паспорта, также указываете способ обратной связи (например, мобильный телефон) и выбираете за кого голосуете. Далее подтверждаете свой голос на выборах, путем сканирования лица (признак вашего физического присутствия на участке). В дополнение может быть еще записан тембр голоса в ответ на просьбу произнести определенную короткую фразу, просканирован отпечаток пальца, - но это уже опционально. После завершения процедуры, терминал распечатывает вам квиток, на котором написан уникальный номер вашего бюллетеня, номер участка и имя кандидата за которого вы проголосовали. На каждом участке ведется видео контроль количества проголосовавших, эти результаты затем публикуются.  Тут стоит отметить необходимость физического присутствия на участке. Именно этот аспект, на мой взгляд, является самым большим препятствием на пути вливания «левых» бюллетеней. Ведь если идет дистанционное голосование, вы никогда по факту не знаете, кто на другом конце провода. Все электронные паспорта, сертификаты и подписи, - это синтетические сущности, которых можно наштамповать хоть миллион, особенно когда у тебя полный контроль над виртуальным пространством, бизнес процессы протекают на твоих серверах и есть небольшая фабрика по производству виртуальных людей в придачу. А когда человек на своих двух приходит на участок, то вот оно доказательство его существования! По крайней мере до тех пор, пока не изобрели человекоподобных биороботов. Получается за счет требования присутствия вашего тела на участке, мы нехило прокачиваем принцип Accuracy у нашей избирательной системы. Теперь рассмотрим, что происходит под капотом, в контексте данного сценария. В помещении избирательного участка настроена локальная сеть, которая изолирована от внешнего мира. Терминал, на котором вы только что голосовали, связан кабелем с сервером, располагающимся в соседней комнате. Ваш голос, попадая на локальный сервер, размещается в двух локальных базах данных. Одна база с публичной информацией - это номер вашего бюллетеня, номер участка и информация о том, за кого вы собственно проголосовали. Вторая же база, с вашей приватной информацией, - номер вашего бюллетеня, ваши паспортные данные, контактный телефон, хэш скана вашего лица и собственно скан вашего лица. И публичная и приватная базы данных находятся на носителях, которые на хардварном уровне позволяют только писать информацию, без возможности перезаписи. За счет невозможности перезаписи носителей, мы достигаем выполнения принципа Immutability. Далее наблюдатели могут проверить подключение провода терминала к серверу, также убедиться, что к серверу не идут левые провода неизвестно откуда. Как уже сказал, локальная сеть на участке является автономной, без подключения к интернету. Immutability в этот момент достигает значения «100%». Когда голосование на участке заканчивается, из сервера вынимают носители, сканируют их серийные номера, снимают хэши с файлов баз данных. Вся эта информация должна быть отражена в итоговом протоколе. После кладут носители в сейф под семь замков, но перед этим, по VPN-соединению отправляют публичную и приватную базы данных на центральный сервер. Этот процесс происходит под наблюдением камер, и живых человеческих глаз всех заинтересованных сторон. Когда голосование по всей стране завершилось, на центральном сервере, единый агрегирующий механизм, собирает всю информацию вместе и после проводит ряд операций: Анализирует данные об избирателях с целью выявления нарушений. В качестве примера можно привести модуль обнаружения каруселей, который выискивает одно и тоже лицо, мелькавшее сразу на нескольких участках одного населенного пункта. После выявления нарушителя, подключается оператор, который принимает решение о том нужно ли исключить подозрительные бюллетени из общей выборки. Данная процедура само-собой подотчетна и полностью публична. Подсчитывает и публикует итоговые результаты выборов Выкладывает в открытый доступ базу данных агрегирующую публичные данные всех избирательных участков по всей стране. Как упоминал ранее эта база, не содержит конфиденциальных данных, ибо в ней обезличенная информация о бюллетенях без привязки к людям. Каждый может скачать эту базу данных и пописать запросы, чтоб проверить правильность итоговых цифр. Также предоставляется программа-интерфейс, доступа к БД, на случай, если человек не знаком с языком запросов к базам данных. Таким образом у каждого гражданина появляется возможность проверить свой голос и голоса своих родных, по квитку, который распечатал для них терминал в момент голосования (тут мы достигаем выполнения принципа Countability) Открывает доступ к публичной базе данных, участка, где проживает зарегистрированный на госуслугах человек. Каждый избиратель может скачать базу своего участка и точно также проверить свой голос.  Также на центральном сервере есть приватная информация о людях и их номерах бюллетеней. Суть в том, что можно дать доступ к приватной информации Независимым наблюдателям и контролерам, которые могут совершить звонок конкретному человеку и убедиться, что именно он отдал свой голос за того или иного кандидата. Таким образом мы позволяем проводить выборочную проверку, и это второй шаг в сторону выполнения принципа Accuracy. Напомню, что первый шагом было требования физического присутствия человека на участке. Причем тут надо отметить немаловажный момент, группы контролеров создаются по населенным пунктам из людей, представляющих интересы разных сторон, и каждая группа получает доступ к приватным данным «не своего» населенного пункта. Подотчетный населенный пункт может определятся, например, с помощью генератора случайных чисел. Если в ходе проверки выясняется, что на каком-то участке человек не голосовал, то начинается детальная проверка данного участка с целью выявления масштаба фальсификаций. Открывается сейф с оригинальными дисками, обзваниваются другие люди, голосовавшие на данном участке, поднимаются данные с камер наблюдения. Задача данной проверки локализовать точку взлома системы и выяснить масштаб фальсификации на данном участке. Далее в зависимости от масштаба фальсификаций, из голосования исключаются либо отдельно взятые голоса, либо весь участок целиком.  У всего программного обеспечения, используемого в выборном процессе открытый исходный код. Сборка кода происходит под камерами при общественном контроле, непосредственно перед выборами. После сборки эталона, считываются контрольные суммы кода и бинарных файлов. Проводится автоматизированное тестирование программных продуктов. После этого, эталон разворачивают на избирательных участках, где позднее наблюдатели на участках проверят хэш-суммы на соответствие эталону и внесут пометку в проколах УИК-ов.  Таким образом общественность может быть уверена, что посторонние лица не вносили каких-либо изменений после того, как программное обеспечение было скомпилировано.  Также, поправьте меня если я ошибаюсь, можно взять хэш от секции кода собранных библиотек. А также секций импорта/экспорта. Тут идея в том, чтобы любой программист мог скачать исходники, собрать бинарные файлы, и проверить полученный хэш на соответствие. Этот шаг необходим для того, чтобы можно было провести соответствие между версией исходного кода, скачанного программистом, и хэшами эталонных бинарных файлов, опубликованными ЦИК-ом. Если в изначальных исходниках был вредоносные код, рано или поздно это вскроется. Соответственно атака на избирательную систему с этой стороны становится бессмысленной. В итоге мы имеем систему, удовлетворяющую требования «IAC», для которой характерны: Прозрачная система подсчета голосов, допускающая общественный контроль Система, позволяющая препятствовать вбросам голосов и легко их локализовать на уровне базы данных участка. Всегда можно сравнить оригинал базы с загруженной на центральный сервер версией. Количество людей, необходимых для сопровождения системы, сведено к минимуму. Следовательно, получаем удешевление обслуживания системы. А также имеем повышенную надежность системы, ввиду уменьшения роли человека. Каждый может проверить результаты голосов самостоятельно в домашних условиях, проверив свой голос на соответствие полученному на участке бумажному квитку, а также сравнив общее количество голосов в базе с опубликованными данными о количестве проголосовавших на веб портале, либо на участке. В описанной выше избирательной системе не используется блокчейн, слепая подпись ключа избирателя или схема шифрования Эль-Гамаля на эллиптических кривых. Но это не мешает ей быть простой, понятной и надежной. На этом у меня всё, друзья. Надеюсь не сильно загрузил деталями и вы всё-таки читаете эти строчки. Примечания: * - непосредственное доказательство этого утверждения выходит за рамки данной статьи. Если в комментариях 200 раз попросят разобраться этот момент подробней, то ждите вторую статью) Материалы использованные для написания статьи: 1)      Статья «Способы фальсификаций на выборах» Программист