Единая система электронного отзывного голосования (ЕСЭОГ). Проект
По просьбе @sociumR, (извиняюсь за недельное опоздание) спроектировал решение по следующему ТЗ:
Нужна надёжная избирательная система соответствующая критериям:
1. Работает в он-лайн формате.
2. Позволяет голосовать из любой точки Земли.
3. Позволяет в любой момент отозвать свой голос.
4. Голосование и отзыв голоса полностью анонимные.
5. Система должна работать в изначально скомпрометированном окружении (находящемуся под контролем лиц желающих повлиять на результаты).
Итак, ИТ - полностью управляемая среда. Это означает, что с той или иной степенью сложности всё, что было занесено в реестры информационных систем может быть отслежено. Следовательно для решения п. 4 часть операций (анонимизация) должна быть вынесена оффлайн. Задача состоит в том, чтобы во-первых выдать некоторый идентификатор человеку, во-вторых выданный идентификатор невозможно было бы привязать к конкретному лицу. При этом все участники должны иметь возможность гарантировано проверить идентификатор не раскрывая анонимность.
Алгоритм работы:
1. Раз в установленный период проводится день выдачи ключей голосования. Он состоит из:
1.1. Генерирования асимметричных ключей ЭЦП.
1.2. Открытые ключи и их отпечатки вносятся в БД подтверждения голоса.
1.3. Закрытые ключи в виде QR-кодов записываются на защищённый бумажный носитель в форме конверта (как пин-код банковской карты)
1.4. Изберком за неделю до дня голосования, выдаёт ключи избирателям с обязательной ежедневной фиксацией количества выданных ключей.
2. День голосования. Процесс голосования:
2.1. С использованием мобильного приложения или стационарного считывателя считывается QR-код ключа голосования.
2.2. Пользователь выбирает за кого он голосует (идентификатор).
2.3. Формируется строка из прошлой подписи по участку + отпечаток ключа + выбор пользователя
2.4. Генерируется подпись строки
2.5. Запись передаётся на голосование. Сервер возвращает коды операции:
НЕТ СВЯЗИ - нет доступа к серверу голосования. Система ждёт несколько секунд и возвращается на п. 2.5
ОШИБКА ЛОГА [новая подпись] - пока шла обработка кто-то внёс свой голос и нужно заменить прошлую подпись.
ОШИБКА КЛЮЧА - ключ не зарегистрирован в системе: ключ проверяется Изберкомом => носитель передаётся на уничтожение => человеку выделяется новый носитель => человек переходит к п. 2.1
ПОДТВЕРЖДЕНО - человек проголосовал, всё хорошо.
3. Отзыв голоса и отзывные даты:
3.1. Для отзыва ключа производится процедура п. 2.1-2.5, при этом человек отдаёт свой голос за другого кандидата.
3.2. Каждый период (например 3 месяца) изберком смотрит на текущее число голосов, если оно меньше проходного то кандидат снимается, на его место назначается новый кандидат.
4. Нарушения
4.1. При голосовании большим числом голосов, чем было выдано ключей - сажаем комиссию и начинаем с п. 1.1.
4.2. При обнаружении избирателем голосования, которое он не проводил:
4.2.1. Избиратель обращается с заявлением в изберком.
4.2.2. Ключ подписи аннулируется.
4.2.3. Избиратель начинает с п. 1.4.
Подобная система в полной мере организует анонимное отзывное голосование, при этом даже полностью скомпрометированная система не может повлиять на результаты голосования. Данные защищены блокчейном на уровне единичной записи. Отпечаток ключа позволяет найти все записи привязанные к конкретному ключу и проверить результаты в системе.
Кому нужна? У нас есть общество. В рамках этого общества, есть группы людей которые конкурируют между собой сначала за деньги, а после - за власть. Власть, принятие законов, голосование, сми, полиция как механизм принуждения к исполнению законов, и прочие - находится сейчас в руках одной группы людей. Вторые, третьи и десятые - отстранены от управления обществом вокруг себя и максимум могут влиять - только на себя лично. Им эта система бесполезна - ее нечем "наполнить", нечем заставить остальную часть общества исполнять ее результаты. Чтобы реформировать лично себя - она не нужна. Той же части общества в руках которой власть - она тоже бесполезна, легитимизации власти прекрасно происходит и через старую.
На пункте 1.2 ваши ключи однозначно сопоставляются с реальными людьми и вся анонимность рушится
Далее как вы собираетесь проверять подписи? Документ подписанный чем-то, вы бежите по всей вашей базе и проверяете валидность подписи каждым ключом?
Проблему отзыва у меня можно закрыть, добавив систему оценки("+","-","0"). И дать доступ всем, а не только избравшим, но поставить "0"(отзыв) смогут только избиравшие. Тогда деанона не будет.
Внедрение моей системы это некий выбор))
Либо государство соглашается, что оно заинтересовано в сохранении тайны голосования, и тогда любой человек может использовать своё право(по сути) на ОТКРЫТОЕ голосование.(ведь главная угроза - раскрытие тайны)
Либо отвергает предложение и подтверждает статус - "не правовое государство".
Голосующим так же оставить этот выбор(бумага - или верификация). Что важнее - тайна или проверяемость результата?
пс. По поводу вашей системы - коллеги уже задали вопросы) У меня тоже много сомнений в части пункта 1.4
Вам могут(как злоумышленнику) выдать несколько ключей, ведь они в конвертах и(как я понял) не привязаны к личности.
Моя жена не голосовала, как убедиться в правильности учёта её голоса?
>> ежедневной фиксацией количества выданных ключей.
Вот тут и выдадут лишних ключей несколько миллионов
>> 1.2. Открытые ключи и их отпечатки вносятся в БД подтверждения голоса.
В которой уже есть несколько миллионов ключей и это не проверить.
Что мешает избиркому на пункте 1.4 придержать себе несколько конвертов, которые не забрали, а после использовать их для голосования за нужного кандидата? Зачем нужен отзыв голоса, если голосование идет один день? Ассиметричные ключи ЭП генерируются для всей России, отдельно для каждого избирательного участка, для каждого гражданина? Пункт 2.3 как-то непонятен: что за предыдущая подпись по участку? В пункте 4.2 как он это поймет, что произведено голосование по его подписи?