Что же не так с ДЭГ в Москве


Последние три дня я занимался тем, что анализировал результаты ДЭГ в Москве по одномандатным округам в Госдуму. У меня есть некоторые результаты, которыми я бы хотел поделиться с общественностью. Однако основная цель этого поста — поделиться накопленными знаниями, чтобы кто-то ещё мог взглянуть на те данные, что лежат в блокчейне и перепроверить результаты.

Где лежат результаты и как их проверять


Часть исходного кода системы лежит в репозитории github.com/moscow-technologies/blockchain-voting_2021. Там лежит исходный код той части, которая про блокчейн, транзакции и тд, а также какой-то код фронтенда, написанный на JS. Отдельно отмечу некоторый забавный факт, что вместо общего репозитория со всем кодом там лежит несколько .tar.gz архивов, внутри которых уже есть код. В репозитории всего 4 коммита, сам код публиковали только 2 раза: 22 августа и 6 сентября. Никакой истории разработки у нас нет. Чтобы не приходилось распаковывать эти архивы — я залил распакованный репозиторий к себе на Github, можете читать код из браузера, если кому лень загружать и распаковывать самостоятельно: github.com/PeterZhizhin/blockchain-voting_2021_extracted

На сайте observer.mos.ru/all можно скачать дампы системы электронного голосования по одномандатным выборам, внутри которого будет лежать база с транзакциями, результаты расшифровки голосов и блоки в блокчейне. По кнопке “Скачать SQL дамп” загружается gz архив, внутри которого лежит один .sql файл.

Чтобы загрузить этот файл вам необходимо поднять у себя PostgreSQL базу. Я сделал это как-то вот так:

createdb -U postgres observer_20210920_090000
psql -U postgres -d observer_20210920_090000  -f <путь до распакованного SQL файла>

Процесс занимает достаточно много времени, зависит от скорости вашего диска, а итоговый размер базы данных будет около 15-17 гигабайт для одномандатных выборов в ГД для базы с сайта observer.mos.ru/all/servers/1/txs.

Внутри базы будет лежать три таблицы:
blocks, decrypted_ballots, transactions
.

Схема баз данных
CREATE TABLE public.blocks (
    height bigint NOT NULL,
    tx_count bigint DEFAULT 0,
    prev_hash character varying(64) NOT NULL,
    tx_hash character varying(64) NOT NULL,
    state_hash character varying(64) NOT NULL,
    error_hash character varying(64) NOT NULL,
    additional_headers json NOT NULL,
    precommits json NOT NULL,
    txs json NOT NULL,
    datetime timestamp with time zone NOT NULL
);

CREATE TABLE public.decrypted_ballots (
    store_tx_hash character varying(64) NOT NULL,
    decrypt_tx_hash character varying(64),
    decrypted_choice bigint[],
    status json NOT NULL
);

CREATE TABLE public.transactions (
    hash character varying(64) NOT NULL,
    message text NOT NULL,
    block_height bigint NOT NULL,
    position_in_block bigint NOT NULL,
    location_proof json NOT NULL,
    instance_id integer NOT NULL,
    method_id integer NOT NULL,
    status json NOT NULL,
    datetime timestamp with time zone NOT NULL,
    author character varying(64),
    payload json,
    signature character varying(128),
    internal_error text
);


Немного про каждую из баз данных:
База transactions содержит внутри себя все записи, которые включаются в блокчейн. Это основная база, с которой я работал. Транзакции бывают разных типов и отличаются полем method_id (число от 0 до 11 включительно). Вот все типы транзакций в порядке возрастания method_id, они указаны на сайте (https://observer.mos.ru/all/servers/1/txs), там же можно посмотреть примеры данных, которые лежат внутри транзакции, кликнув на любую из транзакций с данным типом в интерфейсе:

method_id
Расшифровка
0 Создание голосования
1 Регистрация избирателей
2 Остановка регистрации избирателей
3 Отказ избирателя от онлайн-голосования
4 Выдача бюллетеня
5 Проверка доступа голосующего
6 Приём бюллетеня
7 Остановка приёма бюллетеней
8 Публикация ключа расшифровки
9 Расшифровка бюллетеня
10 Завершение голосования
11 Завершение голосования с результатом


Внутри транзакции “Создание голосования” лежит маппинг ID кандидата в его имя, а также некоторые технические настройки голосования.

Внутри транзакций “Регистрация избирателей” лежат списки с уникальными ID голосующего — voter_id. Одна транзакция содержит в себе до 100 регистраций разных voter_id на данное голосование. Наверное, интересно тут ещё то, что для заданного voter_id в транзакции с его регистрацией не указан округ, куда он был непосредственно зарегистрирован. Информация об округе есть только в транзакциях на выдачу бюллетеня и на приём бюллетеня.

Внутри транзакции “Выдача бюллетеня” лежит упоминание о том, что данному voter_id был выдан (успешно или неуспешно) бюллетень. Пример payload такой транзакции:

{"voting_id":"ea067e1ad71565daff55627e4b35340620d53d644820478ee798e125efe657c2",
"voter_id":"66226133256418595367941344536751838140319057399092269074519877057970658693635",
"district_id":197,
"seed":"3877720680732874652"}

В данной транзакции мы видим, что заданному voter_id 66226133256418595367941344536751838140319057399092269074519877057970658693635 был выдан бюллетень на выборах по округу 197. voting_id — это ID всего процесса голосования, он один и тот же на все бюллетени.

Внутри транзакции “Приём бюллетеня” лежит один голос за конкретного кандидата. При этом сам голос зашифрован, для его расшифровки нужен приватный ключ, который публикуется после завершения голосования. Это сделано, чтобы до окончания дня голосования по зашифрованным голосам невозможно было понять, кто побеждает. Вот пример payload такой транзакции:

{
"voting_id":"ea067e1ad71565daff55627e4b35340620d53d644820478ee798e125efe657c2",
"district_id":199,
"encrypted_choice":{
  "encrypted_message":"32f384b35b17816d0b227e240dbdd0405b03902bab8b547eb2",
  "nonce":"5ca72f89ea94f8035e66e129cbad40e8f8154878b65e60af",
  "public_key":"dae3d8a3863eded175fec99b6a4c78dfbf8f340c3d1a1ba8d481c615bf912303"
}}

При этом отмечу, что внутри транзакции “Приём бюллетеня” лежит только сам голос, привязки к тому voter_id, который получил этот бюллетень, нет. Таким образом сохраняется тайна голосования. Непонятно, как проголосовал (по крайней мере по публичным данным) каждый из voter_id.

Транзакция “Публикация ключа расшифровки” публикует ключ голосования, который можно также найти в футере страницы под заголовком “ПРИВАТНЫЙ КЛЮЧ ГОЛОСОВАНИЯ”. Ещё её можно найти в самих транзакциях:

select payload from transactions where method_id=8 limit 1;

{
"voting_id":"ea067e1ad71565daff55627e4b35340620d53d644820478ee798e125efe657c2",
"private_key":"54e3cf70f712b2ff727bde3849772fa811a9d5de796aa7d788d205aa86af04ad",
"seed":"14901105027823071500"
}

После публикации ключа расшифровки начинается сама расшифровка. Это транзакции с типом “Расшифровка бюллетеня”, внутри которого лежит некий расшифрованный бюллетень. Связка между бюллетенем, полученным системой в транзакции “Приём бюллетеня”, и расшифрованным бюллетенем проходит через базу decrypted_ballots. Нужно джойнить хэши store_tx_hash и decrypt_tx_hash с базой transactions. По полю store_tx_hash можно найти транзакцию “Приём бюллетеня”, а по dectrypt_tx_hash можно проверить, как этот бюллетень был расшифрован.

В базе block содержится информация о блоках в блокчейне. Туда я особенно не смотрел. Вероятно, по этой базе можно проверить, что транзакции в базе transactions не модифицировались в ходе голосования. Но я этого не делал.

Мои претензии


Результаты голосования так и не были подведены системой (публичной системой)


Если вы откроете сайт наблюдения за ДЭГ по одномандатным выборам в ГД, то увидите, что там отсутствуют транзакции с типом “Завершение голосования” и “Завершение голосования с результатом”. Более того, не все голоса были расшифрованы (по крайней мере публично). При этом ЦИК пишет (http://www.cikrf.ru/analog/ediny-den-golosovaniya-2021/p_itogi/), что учёл 100% бюллетеней, однако, по крайней мере публично, расшифровка голосов до конца не проводилась, видимо это было сделано как-то отдельно, непублично.

Если посмотреть, то транзакций с типом “Приём бюллетеня” в базе 2021969 штуки:

SELECT COUNT(*) FROM transactions WHERE method_id = 6;

А расшифровано всего 1319943 бюллетеней:

SELECT COUNT(*) FROM transactions WHERE method_id = 9;

Это даёт нам 702026 голосов (34%), которые публично расшифрованы не были. Дальше я покажу, как расшифровать оставшиеся голоса. Однако никакой сенсации в них нет, в нерасшифрованной части тоже не побеждает оппозиция.

Однако мне всё равно непонятно, какова причина того, что не все голоса были расшифрованы. У меня есть дамп SQL базы от 00:30 20 сентября 2021 по Московскому времени, она в точности совпадает с той выгрузкой, которая доступна сейчас на сайте. Последняя транзакция с типом “Расшифровка бюллетеня” была записана в 21:19 по Московскому времени:

SELECT MAX(datetime) FROM transactions WHERE method_id = 9;

После этого расшифровка голосов остановилась. Причина этого мне непонятна. После того, как расшифровка голосов остановилась — я поставил скрипт скачивать базу каждые 30 минут и проверять, может быть база была обновлена. Однако по сей момент времени отличий от той базы, которая была в 00:30 20 сентября 2021 года и тем, что есть сейчас — нет. Более ранних дампов у меня нет.

Из-за этого некоторые избиратели, которые воспользовались инструкцией Голоса (https://www.golosinfo.org/articles/145370), не смогли проверить, как их голос был расшифрован в системе. Мне написал избиратель с хэшом 60b7b467f454fc80e41ac90008b03220aded815b41d619011d4a16155f3f3a18. Как можно заметить, его голос расшифрован не был.

Релевантный код, который расшифровывает голоса, можно найти вот тут.

На основании этого кода я написал утилиту, которой можно расшифровать те голоса, которые не были расшифрованы системой.
Независимо от меня такую же утилиту написали на Питоне.

Все расшифрованные голоса по одномандатным выборам в Москве можно найти вот тут (формат хэш записи транзакции “Приём бюллетеня” → ID проголосованного кандидата).

Расшифровка всех голосов в 24 потока у меня заняла где-то 30 минут (без учёта поиска и написания релевантного кода для расшифровки). Это при том, что код мой для этого совсем не оптимален (простите за качество кода, это всё в очень авральном режиме писалось). Есть ещё альтернативный код, который не использует subprocess.run (https://gist.github.com/SaveTheRbtz/246eab8557b0217ab3945e15cef6ffe8#file-zbatchdecrypt-ipynb), но я писал как додумался за имеющееся время: я нашёл кусок кода в системе ДЭГ, который отвечает за расшифровку, и перенёс его в отдельную программу.

Мой код вот тут
import subprocess
from joblib import Parallel, delayed
import tqdm
import pandas as pd
from sqlalchemy import create_engine

engine = create_engine('postgresql+psycopg2://postgres:<пароль от базы>@localhost/observer_20210920_090000')
conn = engine.connect()

def decode_vote(private_key, public_key, nonce, encrypted_result):
    return subprocess.run(['simple_decode_code.exe', private_key, public_key, nonce, encrypted_result], capture_output=True).stdout.decode('utf-8').strip().split(';')

def decode_vote_with_hash(h, *args):
    return {'tx_store_hash': h, 'decoded_vote': decode_vote(*args)}

PRIVATE_KEY = '54e3cf70f712b2ff727bde3849772fa811a9d5de796aa7d788d205aa86af04ad'


all_encrypted_ballots = pd.read_sql_query("""
SELECT
hash,
payload->>'district_id' as district_id,
payload->'encrypted_choice'->>'encrypted_message' as encrypted_message,
payload->'encrypted_choice'->>'nonce' as nonce,
payload->'encrypted_choice'->>'public_key' as public_key,
datetime
FROM
public.transactions
WHERE method_id = 6
""", con=conn)


decoded_votes_evaluated = Parallel(n_jobs=-1, backend='threading')(delayed(decode_vote_with_hash)(x.hash, PRIVATE_KEY, x.public_key, x.nonce, x.encrypted_message) for i, x in tqdm.tqdm(all_encrypted_ballots.iterrows(), total=all_encrypted_ballots.shape[0]))


Если кто-то сталкивался с проблемой, что вы не нашли свой расшифрованный голос в системе, то можете воспользоваться утилитой. Я сверил те 1.3млн голосов, которые были расшифрованы публично с моей расшифровкой — результат расшифрования совпадает.

Подсчёт выборов МГД


Тут я немного отвлекусь от одномандатных выборов в Москве и хочу обратить внимание на те выборы, где системой результаты всё-таки были подведены. Давайте посмотрим на выборы депутатов МГД через ДЭГ. Мы увидим что там результаты подведены всё-таки были. Вот транзакция с типом “Завершение голосования с результатом”: observer.mos.ru/all/servers/3/txs?methodId=11. Давайте посмотрим на код, как же появляются результаты этой транзакции. Публичный API в виде протобуфа: github.com/PeterZhizhin/blockchain-voting_2021_extracted/blob/main/blockchain/dit-blockchain-source/services/votings-service/src/proto/transactions.proto#L102-L106. Код обработки данной транзакции: github.com/PeterZhizhin/blockchain-voting_2021_extracted/blob/main/blockchain/dit-blockchain-source/services/votings-service/src/transactions/finalize_voting_with_results.rs#L66-L115. По коду видно, что данный обработчик принимает на вход заданные результаты выборов и просто публикует их, не производя при этом подсчёт. В finalize_voting.rs есть вызов функции ballots_storage.tally_results (функция подсчёта голосов), а в finalize_voting_with_results.rs только ballots_storage.publish_results (публикация заданных результатов).

При этом результаты по МГД попытались подвести 3 раза, 2 из них оказались неуспешными. Видимо, забыли опубликовать транзакцию с окончанием голосования, о чём можно судить по сообщению об ошибке. Почему это произошло — мне непонятно.

За подсчёт должна отвечать транзакция “Завершение голосования” (код github.com/PeterZhizhin/blockchain-voting_2021_extracted/blob/main/blockchain/dit-blockchain-source/services/votings-service/src/transactions/finalize_voting.rs), она производит подсчёт. Однако она в транзакциях отсутствует, поэтому я могу с уверенностью сказать, что система (по крайней мере публичная, на исходной код которой я могу посмотреть) результаты выборов не считала.

Более того, она и не могла посчитать выборы из-за переголосований, о чём будет ниже.

Как же подводили итоги в ГАС Выборы?


Подробнее про то, какие расхождения в протоколе ГАС Выборы я нахожу, и откуда они могут браться, будет написано ниже. Тут я хочу скорее обратить внимание на то, каким именно образом был утверждён протокол. Публичного подсчёта, по факту, так до сих пор и не было. Но протокол откуда-то всё равно должен был взяться?

По сообщениям наблюдателей за ДЭГ, членам комиссии протокол просто откуда-то спустили, который им достаточно было подписать (комментарий достаточно эмоциональный, но я считаю, что конструктивный):

Как работает УИК ДЭГ. Им принесли откуда-то распечатанные протоколы, они пустили их по кругу на подпись. Проголосовали за утверждение. Вуаля. Комиссия легализовала результаты электронного голосования, которые никто из них не проверял и не участвовал в подсчёте результатов. Но единогласно у членов комиссии нет оснований не доверять.

t.me/shendernews/1886

У меня не было бы к нему претензий, если было бы возможно публично установить, что результаты с протоколом сходятся. Однако этого сделать на данный момент невозможно.

Более того, протокол ДЭГ ещё и пришлось потом переделывать. Так как, по сообщениям наблюдателей:

Не сошлись цифры итоговые, когда их стали вбивать в ГАС Выборы. Потому что протоколы составляли… руками в табличке Эксель, а не как мы все думали — автоматической выгрузкой результатов из блокчейна

t.me/shendernews/1951

Количество избирателей, включенных в ДЭГ


Проблема с транзакцией “Регистрация избирателей”


Как я писал выше, в базе данных с транзакциями есть тип транзакций “Регистрация избирателей”. Внутри одной транзакции находится до 100 voter_id избирателей, которым потом выдаются бюллетени. Однако замечу, что внутри данной транзакции невозможно узнать, к какому округу приписан избиратель.

В протоколе ГАС Выборы по каждому округу при этом эти цифры есть. К каждому из ОИК был приписан “виртуальный” УИК ДЭГ с номером №50xx, в котором есть результаты отдельно по ДЭГ на каждом из округов. Так, например, согласно протоколу ГАС Выборы в 198 округе (виртуальный УИК №5003) было в списки включено 137036 избирателей, строчка “Число избирателей, внесенных в список избирателей на момент окончания голосования”
Скрытый текст
(привет тому, кто придумал эту фигню со скремблером на сайте ГАС Выборы)
: www.vybory.izbirkom.ru/region/izbirkom?action=show&root=774050015&tvd=4774050194611&vrn=100100225883172&region=77&global=&sub_region=77&prver=0&pronetvd=null&vibid=4774050194611&type=463

Однако в транзакции “Регистрация избирателей” не указан округ избирателя. Таким образом, мы не можем проверить, что бюллетени, которая выдаёт система, действительно выдаются по тому округу, к которому они приписаны. По крайней мере, в коде у меня про это найти ничего не удалось. Но буду рад, если кто-то подскажет, вдруг я не нашёл, где реализована эта логика.

Мы можем посчитать только общую сумму по избирателям, которые были включены на ДЭГ по одномандатным выборам: 2014765 избиратель.

SELECT SUM(voters_in_transaction) FROM
(SELECT json_array_length(payload->'voters') as voters_in_transaction FROM transactions WHERE method_id = 1) as t;

Несостыковки с количеством заявок на mos.ru и включенными в ГАС Выборы


На сайте mos.ru есть сервис проверки включения избирателей в систему ДЭГ: www.mos.ru/proverka-deg

Я скачал данные об одобренных заявлениях, чтобы проверить, как согласуется количество поданных заявок на mos.ru и количество избирателей, включенных в списки ДЭГ по данному округу (с одобренным статусом заявки). Количество избирателей, включённых в ДЭГ по данному округу, всегда больше, чем заявок на mos.ru (сырые данные можно найти вот тут docs.google.com/spreadsheets/d/1gVHMrxHurtBFWbYUOXKVjYHxsv15SD1CYcw5g37tZCA/edit?usp=sharing)



На сайте указано, что через сайт gosuslugi.ru также было подано дополнительно 455230 заявлений. Однако мне не удалось узнать, сколько из этих заявлений было одобрено, и не получилось узнать, как эти заявления распределились по округам. Как и проверить, реальные ли люди подавали эти заявки (впрочем, тут и заявки с mos.ru сложно проверить).

UPD: Тут раньше было написано, что нужно было попросить наблюдателей посчитать заявки на каждом из участков. Мне подсказали уже после публикации этого поста, что количество этих заявок есть в системе ГАС Выборы. Надо теперь проверить, реальные ли это люди записались на электронное голосование и реально ли они голосовали. Я думаю, что было бы хорошо истребовать книги избирателей (или список заявлений на ДЭГ), чтобы проверить.

Невозможно понять, какие из бюллетеней переголосованные


Перейдём, наверное, к самой главной проблеме этого электронного голосования. Именно по этой причине процесс подведения итогов оказался непубличным и, на данный момент, абсолютно не перепроверяемым.

На выборах ДЭГ в Москве была введена функция повторного голосования. Я предпринял попытки понять, каким именно образом нужно учитывать переголосования.

Я нашёл человека, который проголосовал два раза на выборах по одномандатному округу и два раза сохранил хэши голосования по инструкции от Голоса.

twitter.com/f8f82/status/1439978015698587663

При этом, если открыть эти две транзакции в системе наблюдения за ДЭГ, то между ними не найдётся ничего общего:
observer.mos.ru/all/servers/1/txs?query=91f3b76042cfc23a18210fc4bf3b5d679a5b9740b35c90f27550566374e965b2&methodId=6
observer.mos.ru/all/servers/1/txs?query=8627f07a2c50fd33bd683cd5672a97655ffb023fcfd208aa6cd93694771f2e94&methodId=6

Мы не видим никакого флага или идентификатора, который бы помог нам установить, что эти бюллетени пришли от одного человека. На основании какой-либо публичной информации, кажется, никому ещё не удалось это сделать.

Судя по интервью Артёма Костырко на Эхо Москвы это сделать, похоже, и невозможно. Нужна какая-то дополнительная информация, которую обещали выложить позже. Я пока не понимаю, каким именно мы можем проверить достоверность той информации, которая будет выложена ДИТ Москвы. Так я и не понимаю, почему информация, необходимая для подсчёта голосов, появляется уже после подведения итогов.

Я попытался поискать по коду, на что влияет флаг revote_enabled, но так и не понял, как учитывать переголосования.

Нужен бы был какой-то ID, который бы по данному бюллетеню указывал, что это переголосование. Я не знаю, как вообще, в теории, можно реализовывать переголосования, если у вас нет базы ID голосующего → ID всех бюллетеней этого человека.

UPD: Тут было раньше написано, что у нас нет исходного кода тех программ, которые считали голосование. На самом деле есть. Он лежит вот тут: github.com/PeterZhizhin/blockchain-voting_2021_extracted/tree/main/blockchain/dit-blockchain-private-source
Конкретно за переголосования отвечает код внутри исходников «приватной» части блокчейна: actual_ballots_storage.rs. Конкретно надо смотреть на работу с encrypted_group_id. Эти группировки необходимы, чтобы подвести итоги голосования. Однако лежат они в «приватном» блокчейне, о существовании которого я до написания поста ещё даже и не знал. Прошу ДИТ опубликовать этот приватный блокчейн с этими группировками, чтобы мы хотя бы независимо могли подвести итоги в ГАС Выборы.

Масштаб проблемы: голосов в системе ДЭГ по каждому округу больше, чем было выдано бюллетеней



Давайте посчитаем по каждому из округов, сколько там было выдано бюллетеней (транзакций с типом “Выдача бюллетеня”), и сколько голосов оказалось “в урнах” ДЭГ (транзакций с типом “Приём бюллетеня”).

Общий подсчёт по всем округам доступен прямо на сайте observer.mos.ru/all/servers/1/txs:

104% конверсия: выдано бюллетеней 1 ‍943 ‍590, а принято бюллетеней 2 ‍021 ‍969.


Давайте поймём, откуда берутся эти цифры. Цифра 1 943 ‍590 — это количество успешных транзакций с типом “Выдача бюллетеня”:

SELECT
COUNT(*) as cnt
FROM public.transactions WHERE method_id = 4 and status->>'type' = 'success';


Цифра 2 ‍021 ‍969 — это количество успешных транзакций с типом “Приём бюллетеня”:

SELECT COUNT(*) FROM transactions WHERE method_id = 6 and status->>'type' = 'success';


Давайте теперь посмотрим на распределения по округам. Сколько лишних бюллетеней попало в каждом из округов (сырые данные есть вот тут: docs.google.com/spreadsheets/d/1gVHMrxHurtBFWbYUOXKVjYHxsv15SD1CYcw5g37tZCA/edit?usp=sharing):



Так, по округу 198 было системой выдан 131 930 бюллетень. А в “урнах” оказалось уже 133 283 голоса. Это означает, что как минимум 1 353 бюллетеня в системе в 198 округе лишние, в других округах этот разрыв ещё больше. При этом надо понимать, что некоторые избиратели имели право получить бюллетень на ДЭГ, но его не использовать. Поэтому реальная цифра корректных “бюллетеней” должна быть меньше, чем количество выданных бюллетеней.

Каждый избыточный бюллетень — это те самые переголосования. Они должны быть учтены в протоколе ГАС Выборы. Давайте посмотрим, сколько голосов было “выкинуто” из-за переголосований в каждом из округов (разница между “Число действительных избирательных бюллетеней” и количеством бюллетеней в “урнах” ДЭГ).



Например, согласно протоколу ГАС Выборы, в 198 округе “Число действительных избирательных бюллетеней” — 120 207. То есть какие-то 13 076 бюллетеня при подсчёте учтены не были. Какие именно это были бюллетени — мы не узнаем до тех пор, пока ДИТ не опубликует, как же нам по записям в списке транзакций понять, какие именно из голосов были переголосованы, и какие именно голоса надо учитывать.

Как меняются проценты за кандидатов после учёта “переголосовавших” в ГАС Выборы


Последнее, что я сделал с этими данными — это посчитал проценты за каждого из кандидатов, если подсчитать все голоса в системе блокчейна. При этом, так как мы не можем никак учесть правильно переголосования, будем считать каждый “избыточный” бюллетень за действительный. И как эти проценты соотносятся с тем, что указано в ГАС Выборы (где результаты должны быть учтены уже с исключением переголосований).

Функция переголосования рекламировалась как функция защиты от административного давления. Например, когда тебя заставили проголосовать на работе за кандидата, который тебе не нравится, но потом ты переголосовал за нужного тебе кандидата. Если эта функция и правда использовалась так, то мы бы ожидали, что от корректного учёта переголосований процент административного кандидата стал бы в округе ниже, чем если бы мы учитывали все бюллетени (скорее выбрасываются голоса за административного кандидата, чем за оппозиционного).

Для этого я использовал свой расшифровщик всех голосов и сравнил проценты за каждого из кандидата, если пользоваться результатами из транзакций и не учитывать переголосования. И процентами в ГАС Выборы за каждого из кандидатов.

Проценты есть все вот тут: docs.google.com/spreadsheets/d/1L1SUilxRVWXLn3YOPmOWAfTlcv08NCP6KvexwxaEKk4/edit?usp=sharing

По факту получается всё ровно наоборот. Если сравнить результаты, когда переголосования считаются как реальные голоса, и результаты в ГАС Выборы (где из переголосований должны быть корректно учтён только последний голос), то процент административного кандидата не очень сильно, но растёт во всех округах (примерно на 1%).

Если мы считаем, что переголосование использовалась именно как защита от административного давления (“сначала голосую за административного кандидата, потом за оппозиционного”), то публичные данные показывают, что в результатах в ГАС Выборах по ДЭГ что-то не так. Однако надо сказать, что таким результатам в ГАС Выборах может быть и другое объяснение: например, что оппозиционные избиратели несколько раз переголосовывали за того же самого оппозиционного кандидата, а избиратели административных кандидатов этого не делали.

Выводы


Я хотел обратить внимание на те странности, которые сделали систему ДЭГ непрозрачной на этих выборах:

  • Результаты выборов ДЭГ на основании публичных данных установить невозможно, так как нехватает данных из «приватного» блокчейна. На одномандатных выборах в ГД подсчёт системой если и производился, то с нарушениями, так как не все голоса были расшифрованы. А на выборах в МГД в систему вместо подсчёта голосов просто загрузили итоговый протокол. Подсчёт голосов из-за системы переголосований проводился в каких-то других системах, не подконтрольных наблюдению, на основании данных из «приватного» блокчейна. В публичных системах недостаточно данных для подведения итогов.
  • Мы не можем по публичным данным отследить, какой голос был переголосовавший, а какой — единственный для данного человека. Это делает подсчёт голосов по публичным данным невозможным.
  • Масштаб переголосований по каждому округу в Москве был очень серьёзный. Количество бюллетеней, принятых системой ЭГ, всегда оказывалось больше, чем она выдала в каждом округе.
  • В каждом из округов, в системе ГАС Выборы не была учтена значительная часть бюллетеней, которые приняла в себя система ДЭГ. Из-за непрозрачности системы подсчёта мы не можем достоверно узнать, какие именно бюллетени были учтены системой как недействительные.
  • Если предположить, что переголосования в системе ДЭГ действительно используются как защита от давления, то процент оппозиционных кандидатов должен был вырасти. На практике в ГАС Выборы от учёта переголосовавших процент административного кандидата тоже вырос.

Что ещё надо сделать


  1. Требовать публичного подсчёта голосов в ДЭГ. Подсчёт голосов в ДЭГ был сделан на основании данных из приватного блокчейна, надо публиковать этот блокчейн.
  2. Надо подождать, что нам выдадут для подсчёта переголосовавших бюллетеней. Исходя из этого можно продолжить анализ: надо посмотреть, какие именно бюллетени переголосовывались и как.
  3. Я вообще не касался того, что связано с блокчейном. Надо проверить, действительно ли все транзакции корректны.
  4. Надо сравнить выгрузку транзакций до подведения итогов и после публикаци ключа голосования. Старые транзакции не должны быть изменены. Мне отправляли дампы SQL до окончания голосования, надо их сравнить, правда ли, что данные только добавлялись, но старые не изменялись.

На будущее


  1. Достаточно сложно было найти людей, которые сохраняли хэши своих транзакций во время голосования. Ещё сложнее было найти людей, которые бы переголосовывали и записывали хэш голосования. Надо научить сторонников, которые пользуются ДЭГ записывать хэши голосований, чтобы у нас потом было с чем сравнивать.
  2. Было трудно найти базы с транзакциями за моменты до подведения итогов голосования. Наблюдателям ПСГ/ПРГ на УИК ДЭГ предлагаю в будущем сохранять все промежуточные выгрузки, чтобы смотреть, что никакие из транзакций не были подменены.
  3. В системе ДЭГ очень не хватает большей грануляции по УИК. Мы не можем узнать, как в данном конкретном районе результаты на “бумажном“ УИК отличаются от “электронного” голосования в этом районе — есть только общие цифры по всему округу.

По горячим следам объявленного “пересчёта ДЭГ”


Как я постарался объяснить в этом посте, основная моя претензия к системе ДЭГ — это то, что итоги голосования были подведены на основании данных из некоего приватного блокчейна. У нас есть исходной код этого приватного блокчейна, но для подведения итогов не хватает данных из «приватного блокчейна».

Я бы хотел ещё раз отметить, что в списке транзакций не указано, какие именно бюллетени были переголосованы, и непонятно, как список переголосованных бюллетеней можно было бы получить. Для учета переголосований необходимы данные приватного блокчейна, именно там лежат данные по переголосованиям. Я хочу, чтобы ДИТ Москвы опубликовал алгоритм, который бы позволил получить список переголосованных транзакций “Приём бюллетеня”, используя только ту выгрузку, которая доступна сейчас публично на сайте observer.mos.ru/all. Если данные по переголосам в публичной выгрузке учесть невозможно, то это, конечно, очень плохо.

Будет очень нехорошо, если ДИТ просто опубликует базу “вот эти транзкции Приём бюллетеня мы считаем переголосованными вот этой транзакцией Приём бюллетеня” без каких-либо доказательств, что она настоящая.

UPD: На пост начинают ссылаться журналисты. Я поправил некоторые недочёты, которые у меня в посте нашлись. Во-первых меня поправили, что данные по количеству заявок на ДЭГ по каждому УИК есть в ГАС Выборы. Во-вторых мне показали, что код приватной части блокчейна у нас на самом деле есть и конкретно указали, где в этом коде учитываются переголоса. Однако без данных из второго «приватного» блокчейна, по крайней мере сейчас, мы не можем независимо подвести итоги выборов.

Комментарии (318)


  1. unxed
    22.09.2021 15:23
    +56

    Хотелось бы также отметить, что для обжалования результатов голосования на избирательном участке законом отведено 10 дней с момента опубликования результатов. Никаких исключений для электронных избирательных участков нет.

    Через десять дней мы можем говорить что угодно об ошибках в системе — изменить будет уже ничего нельзя.


    1. ole325
      22.09.2021 17:18
      +9

      У нас получается 78К лишних голосов, которые могли бы ошибочно быть учтены (избыток 4%),
      так же 702К не расшифрованных публично и .... 14М лишних голосов по версии Шпилькина, из которых ну вычтут несколько десятков участков и все.
      По статистике же Шпилькина только каждому пятому не нравится текущий курс, остальным все равно (не пошли), все нравится (за), не нравится, но хочется работать (за)


      1. jryj
        22.09.2021 19:48
        -1

        остальным все равно (не пошли)


        Нет, не всё равно. Но голосованием сегодняшняя проблема не решается.


        1. flx0
          22.09.2021 21:17
          +54

          Люди, которые не готовы приложить даже минимальные усилия (пусть и с минимальным выхлопом) — проголосовать, более серьезных усилий для решения проблемы не приложат тем более.


          1. Aplgt
            23.09.2021 11:09
            +2

            Вы опрометчиво приравниваете неучастие в выборах нежеланием прилагать усилия.

            Для большого числа избирателей эти понятия противоположны, так как в их системе координат участие в выборах только вредит, а их активная гражданская позиция заключается именно в неучастии.


            1. dimoff66
              23.09.2021 12:38
              +9

              При наличии УмГ, о которой звонят из каждого утюга, неучастие никак не можно назвать "активной гражданской позицией", скорее пофигизмом


              1. Aplgt
                23.09.2021 13:38
                +1

                Вы также правы ровно до того момента, пока УмГ считается единственно верной выборной стратегией. Но меньше всего мне бы хотелось тут вступать в политическую дискусию о преимуществах и недостатках свободного волеизъявления, УмГ и бойкота.

                Тем не менее, пофигисты, которых тоже в достатке, не имеют ничего общего со сторонниками демонстративного бойкота в плане прилагаемых усилий.


                1. Storan
                  23.09.2021 23:13
                  +17

                  Одна заковыка. Мировая политология (как нормальная наука, работающая с данными), знает только один работающий механизм бойкота выборов — когда при объявлении оных, бойкот объявляют все оппозиционные партии/лидеры, согласовано отказываясь участвовать в данном мероприятии, которое они (объединившись по данному вопросу) не признают выборами из-за нарушений. В итоге либо недобор до обязательной минимальной явки и срыв выборов сугубо по законам того государства; либо (б) таки-состоявшиеся выборы, с результатом 100% за предыдущую правящую группировку, легитимность которого (этого 100% результата) возможно не признают ни за рубежом, ни население внутри страны. В случае (б) уже появляются вероятности — в принципе, в доброй половине пост-советских стран, включая современную Россию, сама верховная власть по такому принципу работает, «бойкотируя» всю реальную оппозицию, и выставляя против себя оппонетнов-клоунов.

                  Сами избиратели же, при отсутствии минимального порога явки, в принципе своим неучастием ничего бойкотировать и блокировать не могут. Это просто идиотизм, как в его первоначальном, так в принципе и в современном понимании, и не более того. С таким же успехом, можно при любом наблюдении (ТВ, газета, портрет) Путина/депутата от ЕР/министра_правительства/подставить_что_кому_нелюбо, каждый раз крутить фигу в кармане (главное, чтобы никто не увидел), и считать из-за этого действия себя самым умным и оппозиционно настроеным жителем своего района.


                  1. jryj
                    24.09.2021 08:17
                    -1

                    Изменения надо начинать с другого. Не с выборов. Ничего вы не сможете решить просто проголосовав.

                    Самообразование, просвещение людей вокруг себя и объединение с единомышленниками. Вот когда таких единомышленников будет много и они своей волей смогут влиять на экономику и политику, вот только тогда можно чего-то добиться.

                    Сначала надо создать профсоюз, который сможет вывести на забастовку рабочих и остановить работу заводов и фабрик, тем самым нанести материальный ущерб владельцам и принудить их выполнять свои требования, вот только тогда можно идти на выборы и принуждать властьпридержащих соблюдать законы и выполнять ваши требования.

                    Без этого твоим голосам подотрутся и ты ничего с этим сделать не сможешь. Единственное что ты сможешь выбрать это кто будет тебя обирать — Петя или Вася.


              1. Vilgelm
                23.09.2021 18:49
                +1

                Вы бы посмотрели комментарии только на Хабре в околополитических постах, там куча сторонников бойкота есть.


            1. Nimtar
              24.09.2021 14:48
              +4

              Системы координат надо очищать от ошибок, значит. Для одномандатных округов в РФ бойкотирование невозмжоно в принципе (если просто кандидат придёт и проголосует за себя -- выборы состоятся).
              Математически любая неявка избирателя на выборы в ГД РФ -- голос за Едро (за любого победителя, но последние 15 лет это Едро). Испорченные бюллетени, дописывание своих кандидатов -- голоса за Едро.

              На президентских криво заполненные бюллетени будут голосами "против всех", что потенциально может привести ко второму туру. Но и там неявка -- голос за бывшего президента.


          1. HellWalk
            26.09.2021 16:03
            -1

            Люди, которые не готовы приложить даже минимальные усилия (пусть и с минимальным выхлопом) — проголосовать

            В Белоруссии проголосовали, ну и что, поменяли власть?


            1. Anarmus
              29.09.2021 02:15
              +2

              Ну вообще-то да. Они заменили легитимного Лукашенко на нелегитимного, со всеми вытекающими.


        1. ole325
          23.09.2021 12:34
          +5

          когда не приходят 2/3, вбросы сделать проще всего бюллетени есть свободные, если бы пришли 3/4, то пришлось бы уже править цифры, т.е. посчитали одно, а написали другое.


          1. tyomitch
            23.09.2021 13:41
            +5

            И ещё


          1. telobezumnoe
            24.09.2021 02:27
            -1

            да не нужно никаких вбросов, даже в идеально честных подсчетах мнения большинства будет нужный результат, всё контролируется СМИ, которые формируют информационное поле, и тут они сами создают тот зоопарк партий для каждой целевой аудитории, зацепив их своим "нарисованным" имиджом, чтоб предоставить интересы этих таргет групп, это как мальчиковая попгруппа, где есть "романтик", "плохиш" и тд.. не особо важно кто там из них победит. важно что большинство в контролируемом информационном поле. зато люди думают что от них что то зависит)) а на деле зависит только кто будет новым ведущим шоу, в новом сезоне. Как вообще большинство может выбрать различного уровня управленцев, только по их имиджу сформированным СМИ?. повторюсь, но это как главу академии наук выбирать по имиджу и их предвыборным роликам, тогда какие нибудь Петрики или Фоменко уже давно стали бы ее возглавлять (конечно же сильно утрировано) но .. конечно главных редакторов шоу есть конкуренция, но имея административный ресурс всё инакомыслие быстро выпиливается, и этим занимается не ведущий шоу, он максимум только озвучивает что ему говорит главред, а у того вообще не известно заказчики)) так что голосуй - не голосуй... отсюда просто не желание тратить время на такие шарады в иллюзию выбора


      1. sungod
        23.09.2021 11:23

        Вы не понимаете как устроены выборы, что такое федеральный округ и что такое округ одномандатный, отсюда ваша глупая реплика


        1. ole325
          23.09.2021 12:11
          +1

          Прекрасно понимаю, текущая система позволяет воровать из этих 225 мест, что и показали результаты при накрученных 49% взяли 198 из 225 мест одномандатных, по ним даже порога в 50% не нужно и не какого второго тура, в таких условиях это подарок для кандидата от основной партии. Причём не так давно были просто по спискам выборы, но сейчас бы не набрали конституционное большинство.


          1. indium_antimonide
            23.09.2021 12:25
            +1

            Немалая часть одномандатников вышла в думу, набрав у себя в округе 25-35%. Официально. Пример, Санкт-Петербург.


            1. ole325
              23.09.2021 12:30

              ну без второго тура это не выборы, т.е. надо набрать хотя бы 25% и быть первым, и так везде, а мнение остальных 75% игнорируется.

              Одномандатники вполне нормальная практике при двух-партийной системе, а при многопартийной это 198/225 "честных мест"


          1. sungod
            23.09.2021 13:38
            +1

            вы говорите что 78к в голосов в мск ничего не значат из-за 14М вробшенных по рф
            это совершенная глупость
            эти 78к вероятно решают судьбу 15 мандатов из 450


            1. ole325
              23.09.2021 15:10
              +2

              ок, а как появились другие 183 мандатов вам не интересно?

              Что весомее 15 из 450, или 183 из 450?


    1. NNikolay
      23.09.2021 05:18
      -13

      А сейчас ещё что-то можно изменить? Есть надежда на справедливый суд, только подать жалобу нужно успеть за 10 дней? Вот потому у оппозиции с народом и не получается контакт - они просто инопланетяне.

      Есть хороший разбор от Каца - https://www.youtube.com/watch?v=4ffEHROI8WI - на обеденном перерыве фальсификаторы палятся легко. Но есть подозрение, что те голоса были собраны с людей в ручном порядке. Люди просто сдавали пароли. Отдать пароль - это тоже политическая позиция. Так что народ сказал своё слово - хотят царя, своему голосу не доверяют.

      Оппозиции пора бы понять уже суть проблемы.


      1. chemistmail
        23.09.2021 08:37
        +1

        У оппозиции с народом не получается контакт ))
        Xорошо сказали. ))


      1. altai2013
        23.09.2021 11:29
        +7


  1. navferty
    22.09.2021 15:32
    +112

    Имхо самое главное что не так с электронным голосованием - его наличие, в условиях недоверия к его организаторам. Как бы ни был прозрачно опубликован код, мы не сможем узнать, что для формирования транзакций/подсчёта голосов используется именно он. Мы не можем быть уверены, что до голосования не добавили несколько сотен тысяч учётных записей в госуслугах (а если можем - как быть с сохранением тайны голосования). Да и "блокчейн", в данном случае - какой в нём смысл, если все узлы контролируются одним лицом.


    1. ole325
      22.09.2021 17:10
      +5

      ну ок, мы не верим идем ногами, кто то верит и либо отдает свой голос ЕР, либо за него это делают, по вашей логике, ну и кто виноват?

      Более того какие вы результаты ожидали, если все так боялись, что украдут их голос электронный, как бы вот и перекос в результатах.


      1. Azya
        22.09.2021 19:37
        +9

        А в 2020 не боялись?

        Между тем результаты онлайн и офлайн были почти одинаковые в Москве.


        1. ad1Dima
          23.09.2021 07:11
          +2

          Голосование по изменениям в конституцию - это намного более простой вопрос во всех аспектах: и меньше вариантов ответов, и проще решить, как ты хочешь голосовать. Не удивительно, что при выделении группы людей, которые интересуются новым и готовы голосовать в итернете, мы получаем примерно те же цифры.

          А вот то что среди людей, интересующихся новым и готовых голосовать в интернете, меньше людей, готовых голосовать за КПРФ - я как раз не очень удивлён.


          1. ole325
            23.09.2021 10:16

            там сомнительных всего 300К, но все сомнительные были решающими, есть даже случаи сомнительных за яблоко, что бы от КПРФ от УГ не прошел


            1. ad1Dima
              23.09.2021 10:38

              ну какие 300к, вон в статье же написано, что в блокчейне побеждает ЕР, а проголосовало там порядка 2млн.


              1. ole325
                23.09.2021 12:08

                Сегодня выступал наблюдатель программист, аномальных там всего 300к голосов, остальные могут быть по указке, но это уже вообще не доказуемо, может и все 49% тоже по указке по федеральным спискам


          1. Azya
            23.09.2021 12:20
            +7

            Интересующихся новым - это вы про Единую Россию сейчас?) Все же знают, что самая популярная партия в интернете - это ЕР, да?)

            Вообще, речь не только про КПРФ и ЕР - по одномандатным округам в Москве провластные кандидаты были не обязательно от ЕР а их главные соперники не только от КПРФ но это никак не меняло расклада.

            Вот соотношения результатов голосования в Москве по спискам между ДЭГ и ногами:

            ЕР: 1,49

            КПРФ: 0.51

            ЛДПР: 1.08

            CР: 0.86

            НЛ: 1.21

            Не обращая внимания на КПРФ, как так получается, что "интересующиеся новым" больше поддерживают ЕР чем тех же СР или Новых Людей? ЕР более модные, молодежные?

            По одномандатным округам ситуация примерно такая же, но там эти соотношения для главных соперников сохраняются, даже если провластный кандидат был не от ЕР а ближайший соперник не от КПРФ. Получается "интересующиеся новым" почему-то очень очень любят провластных кандидатов, независимо от партийной принадлежности, и очень не любят их главных конкурентов, тоже независимо от партии.


      1. ClearAirTurbulence
        23.09.2021 13:43
        +3

        ок, мы не верим идем ногами

        Это не поможет, ведь сколько бы ног не пришло (в определенных пределах), электронные голоса все равно перевесят, их можно рисовать как угодно и сколько угодно (упрощаю, ну суть такова).


        1. smx_ha
          23.09.2021 16:50
          +1

          Тут важно чтобы не было возможности отмазки "ну вы не верили вот электронное голосование и отличается потому что оппозиция голосовала на участках". То есть парадоксально но неверие в электронное голосование должно приводить к тому чтобы агитировать людей так голосовать чтобы половина голосовала электронно а половина нет.


          1. DesertFlow
            23.09.2021 22:16
            +9

            Тем не менее, если убрать из электронного голосования аномальные всплески, типа ухода сторонников ЕР на обед (сторонники других партий при этом не уходят) или резкое прекращение сторонников ЕР голосовать в 14:30 в воскресенье (сторонники остальных партий при этом продолжают голосовать как обычно), то графики электронного и оффлайного голосования становятся примерно одинаковыми. Что и логично, так как все мы видели очереди из бюджетников в первый день, а также призывы голосовать электронно. То есть, у сторонников власти нет радикального перекоса в ту или иную систему голосования. Голосовали и там, и там.


            Кроме того, если сторонники власти большинство голосовали в первый день, а противники в последний, то откуда у ЕР огромный всплеск в воскресенье, в последний день? И переголосования почему-то тоже добавили голоса в ЕР, это вообще как? И ВЦИОМ впервые в истории не стал публиковать экзитполы на оффлайн участках (где в большинстве победили кандидаты от УГ), почему?


            На фоне этого более вероятным выглядит, что изначально в электронное голосование вбросили много мертвых душ. Поэтому бюджетников просили проголосовать в первый день, чтобы оценить реальное положение, чтобы под конец добавить нужное число голосов. Отсюда и всплеск у ЕР в воскресенье. Возможно, мертвых душ даже не хватило и админы переголосовали за обычных людей. Отсюда и аномальное число переголосования 300 тыс из 2 млн. Каждый шестой из двух миллионов независимых и не связанных между собой людей? Выглядит подозрительно. При этом в прессе не появлялось сообщений о массовых смс срочно голосовать в воскресенье утром, да и слухи о лотерее от числа голосований тоже не циркулировали массово. А проверить нет возможности, подсчет переголосований вёлся по тайному скрытому второму блокчейну (который так и не опубликован). Защиты от сброса государством несуществующих профилей там вообще нет в принципе. Да ещё и к округам не приписаны, чтобы проверить число избирателей по спискам в этих округах. Это вообще выглядит как диверсия.


            В итоге недоверие противников к системе электронного голосования и призывы голосовать пешком в последний день только чётче выявило аномалии в нем. Имхо, недоверие к ЭГ преувеличено, электронно голосовать удобно и наверняка большинство противников так и сделали, кому лень идти на участок или вообще раньше не участвовал. А вот непрозрачность системы и аномалии в результатах это для электронного голосования прям огромный косяк, ставящий под сомнение его честность.


            1. smx_ha
              23.09.2021 22:43

              "Обед" это да, подозрительно.

              Но надо заметить что совпадение всплесков голосов за оппозицию и за ер легко объясняется спущенными в бюджетные организации разнарядками: "чтоб к такому то времени все проголосовали", тогда и резкое прекращение сторонников ЕР голосовать объясняется: просто перестали требовать. Впрочем конечно возможно что у них был скрипт вбрасывающий голоса в зависимости от кол-ва голосующих, но это как то сомнительно, ибо зачем? К тому же тогда надо еще как то объяснить всплески голосов за оппозицию.


              1. Ndochp
                25.09.2021 00:30
                +3

                Так git это блокчейн.


          1. PsyHaSTe
            22.09.2021 21:00
            +13

            Но в блокчейне блоки будут подписаны приватным ключом ноды которая инициировала блок, а про ваш цсв спокойно можно сказать что он снят на американской квартире. Ну и синхронизировать гигабайтные цсв по сети не самая простая затея.


            В общем, троллейбус из хлебушка сделать можно, но зачем?


            1. unxed
              22.09.2021 21:27
              +8

              Если CSV подписан ЭЦП оператора, сказать можно что угодно, но вот она подпись. Блокчейн для этого не требуется.


              1. PsyHaSTe
                22.09.2021 22:12
                +3

                И чем это лучше чем готовый экзонум/эфир/...? Т.е. я не против, это можно сделать, просто разговор из разряда "зачем мне nginx если я tcplistener на порту открыл и погнал"… Ну просто потому что это уже рабочее коробочное решение, которое умеет всё, что нужно?..


                1. tyomitch
                  22.09.2021 22:16
                  +1

                  … а в соседнем топике стыдили ФБК за то, что для сайта из одной страницы и одной формы ввода они развернули Kubernetes.


                  1. PsyHaSTe
                    22.09.2021 22:22
                    +2

                    Такое ощущение, что клиент эфириума это кубернетс кластер а не приложение с парой флагов, запускаемое кем угодно за 5 минут. У меня даже готовый докер-композ есть для особо ленивых.


                1. unxed
                  23.09.2021 00:48
                  +8

                  Потому что любое усложнение затрудняет аудит и создаёт новые векторы атаки. Система голосований должна быть максимально проста. Любое усложнение должно тщательнейшим образом изучаться на соотношение пользы от его внедрения и риска от злоупотреблений за счёт усложнения, новых потенциальных дыр, затруднений при аудите результатов.

                  Тут же усложнение есть, а выгод нету.


                  1. PsyHaSTe
                    23.09.2021 01:00
                    +3

                    Усложнение по сравнению с чем? Все ваши подписанные цсв и постгресы это как раз сложнее, чем простая математическая структура для которой есть проверенные временем реализации. Это как писать своё шифрование вместо использования openssl потому что оно там сложное, а значит будут векторы атаки, а своё простое как раз защищено


                    1. unxed
                      24.09.2021 18:43
                      +2

                      Некорректная аналогия. Адекватная аналогия была бы такая: цеплять OpenSSL там, где и встроенной в стандартную библиотеку языка реализации SHA512 для решения имеющихся задач вполне достаточно.

                      Будем теперь везде блокчейн использовать вместо обычной электронной подписи, просто потому что «есть проверенные временем реализации»? Зачем, чёрт побери?

                      Это ненужное переусложнение системы, затрудняющее её аудит и создающее ложное чувство безопасности. А любой инфобезник вам скажет, что false sense of security is worse than no security at all.


                      1. PsyHaSTe
                        24.09.2021 19:13

                        Некорректная аналогия. Адекватная аналогия была бы такая: цеплять OpenSSL там, где и встроенной в стандартную библиотеку языка реализации SHA512 для решения имеющихся задач вполне достаточно.

                        Ну покажите рабочее решение, гарантирующее неизменяемость данных, возможность подключения сторонних клиентов для синхронизации и чтобы это все быстро работало? А то опять в аналогиях потеряли лес. Вы сами написали про постгрес + какие-то подписи — если есть готовый продукт, то давайте название. Для эфира вот я говорю есть готовый продукт parity/geth — запустил и оно работает. Теперь вы — назовите имя продукта чтобы подключил и все нужные свойства есть.


                      1. wataru
                        24.09.2021 19:53
                        +2

                        Ну покажите рабочее решение, гарантирующее неизменяемость данных, возможность подключения сторонних клиентов для синхронизации и чтобы это все быстро работало?

                        Тупо сквозная нумерация и криптографическая подпись через приватные ключи. Качать записи по мере их поступления можно хоть WGET'ом, хотя тупенькое REST API и тривиальный скрипт на питоне получше бы смотрелись.


                        Это про синхронизацию. Что касается неизменяемости — если данные перепишут, то у выкачавших данные заранее уже будут записи с такими же номерами, гарантированно подписанные сервером голосования. Подлог отлично виден. Если же данные по мере голосования никто не выкачивает, чтобы потом сравнить, то в любой системе после голосования сервер может что угодно как надо партии уже сгенерировать и отдать.


                      1. Contrabondo
                        28.09.2021 18:31

                        Аналогия корректная особенно потому, что клиенты ДЭГ шифруют трафик неким ГОСТ TLS, с кузнечиком видимо. Стандартный то TLS "не подходит".

                        Поэтому ни с какого Firefox или chrome никто голосовать не мог.

                        (испанский стыд)


                      1. Shrike
                        02.10.2021 23:33

                        Т.е. как? А откуда надо было голосовать? Из IE с ActiveX'ами что ль? 8-()


            1. PsyHaSTe
              22.09.2021 22:23
              +2

              Ну, дерево меркеля нам и обеспечивает по сути сквозную нумерацию.


    1. PsyHaSTe
      22.09.2021 19:03
      +11

      Смысл в блокчейне все же есть, если есть возможность подключиться к корневым узлам любому желающему и синхронизировать базу с собой. Делается это для защиты от подлога — блочейн не магия, и если взять и откатить физически на 1000 блоков назад блокчейн то данные из него испарятся. Если сделать это на всех корневых нодах, то данные из блокчейна исчезнут. Если же есть хотя бы одна нода которая была синхронизированна со старой версией блокчейна то расхождение будет замечено, более того, в этой ноде останутся оригинальные транзакции, подписанные авторити нодами.


      Прозрачный код тоже проверяется — если это смарт контракт на эфире, то вы можете убедитсья, что конкретно вызывается и как. Другой вопрос, что насколько я помню по опыту активного гражданина, в блокчейне (в виду его технических ограничений) не находится никакой особой логики, там есть просто функции "сохрани голос/перезапиши голос". При этом вся логика, что сохранять и нужно ли перезаписывать находится снаружи, и вот она уже не проверяемая никак.


      1. MaximRV
        22.09.2021 19:19

        А ведь можно эту логику всё же и туда заложить. но...


      1. unxed
        22.09.2021 20:04
        +12

        Но если обычную БД стягивать в реальном времени, и если записи подписаны ЭЦП и имеют сквозную нумерацию, то же самое будет справедливо и без всяких блокчейнов же?


        1. askv
          22.09.2021 20:46
          +2

          Думаю, что так и есть. В блокчейне есть очень большая избыточность, так как каждый участник вынужден хранить полную копию всего блокчейна. Хотя на практике достаточно, чтобы а) эта копия была у нескольких независимых сторон и б) была доступна любому желающему.


        1. PsyHaSTe
          22.09.2021 21:00
          +6

          Но если мы сделаем БД с синхронизацией в реальном времени, подписями, сквозной нумерацией и всем осталньный… То мы как раз и получим блокчейн (или что-то похожее).


          В том же и суть, что блокчейн != криптовалюта. По сути блокчейн это способ организовать персистентный журнал с историей и автоматической синхронизацией. Это идеальное решение для задач вроде электронных очередей, голосований и т.п. Единственный вопрос доверия. И вот с ним проблема, но в областях где уровень доверия выше (например ярмарки выходного дня на блокчейне) — это отличное решение, которые из коробки много чего умеет. Чем и хорошо.


      1. 0xd34df00d
        26.09.2021 20:06
        +2

        Зачем вообще что-то откатывать, если (в текущей реализации) можно нагенерировать произвольное число мертвых душ?


        1. tyomitch
          27.09.2021 11:26
          +2

          Было аж три инструмента, любого одного из которых хватило бы для любого нужного результата: мёртвые души, переголосование, и подмена/откат публичного блокчейна.


  1. anonymous
    00.00.0000 00:00


  1. anonymous
    00.00.0000 00:00


  1. anonymous
    00.00.0000 00:00


    1. lolhunter
      22.09.2021 23:59
      +4

      Я просто скажу, что онлайн голосование это прямое нарушение конституции, согласно которой на выборах у нас всеобщее ТАЙНОЕ голосование. Голосование через онлайн с авторизацией по паспортным данным на сайте подконтрольному текущему правительству по определению не тайное голосование.

      Тайное голосование используется везде именно для того, что бы вас не могли преследовать за ваше мнение. А тут могут. И надо быть довольно недальновидным человеком, что бы голосовать онлайн за кого-либо. Сегодня победило ЕР и преследует голосовавших за оппозицию, а завтра условные КПРФ и преследует тех кто голосовал за ЕР.


      1. kmeaw
        23.09.2021 08:48
        -5

        Чем обычное оффлайн-голосование более тайное? Я точно так же прихожу с паспортом, и ничего не мешает мотивированному сотруднику избирательного участка запомнить связку "номер паспорта"-"номер бюллетеня", нарушая таким образом тайну в момент извлечения бюллетеня из урны для подсчёта.

        Так и в онлайн-голосовании - достаточно разнести на разные сервера процедуру аутентификации с авторизацией (выдаёт сертификат "предъявителю можно голосовать") с процедурой заполнения бюллетеня (проверяет сертификат, в котором гражданин анонимизирован).

        В любом случае тайна обеспечивается доверием гражданина к огранизаторам, что они не будут пытаться сопоставлять идентификаторы избирателей с идентификаторами бюллетеней.


        1. bars_arseniy
          23.09.2021 09:30
          +7

          Серверов всего два. А мотивированных сотрудников с ручкой и бумажкой надо посадить на каждый участок. Поэтому сопоставить данные двух серверов организационно на порядки проще чем записать связку «номер паспорта» — «номер бюллетеня» — «голос в бюллетене».


        1. tyomitch
          23.09.2021 10:03
          +15

          На бумажных бюллетенях нет номеров.


        1. joyfolk
          23.09.2021 10:51
          +2

          Разнести на разные сервера не достаточно. Нужно еще, чтобы стороны контролирующие эти сервера были независимы. И при этом частично деанонимизировать голосующих все равно будет можно, если они не будут сами предпринимать каких-нибудь дополнительных мер. Например, можно скоррелировать время аутентификации и время заполнения бюллетеня, дополнить ip-шником...


          1. lolhunter
            25.09.2021 23:44
            -2

            Это теоретическая ситуация. Проблема в том, то победившая сторона получает власть, а значит возможность эту самую "независимость" сломать. Ну или мы приходим к тому, что контролирующие выборы сервера находятся не в стране => под контролем другой страны, которая может вмешаться в выборы и нарушить суверенитет.
            То есть выборы онлайн ни в каком виде не могут быть тайными и это надо осознавать. И голосовать за ЕР как бы тоже не факт - а вдруг победит КПРФ и пойдет всех кто голосовал за ЕР поражать в правах? Ну или КПРФ, допустим, укрепляется во власти и начинает увольнять с госслужбы всех, кто голосовал за ЕР?
            То есть голосуя онлайн ты рискуешь иметь проблемы из-за своей гражданской позиции, какой бы она ни была.
            Я уже не в том возрасте, что бы "доверять" власти и уж тем более подставляться.


        1. lolhunter
          23.09.2021 14:29
          +12

          Чем обычное оффлайн-голосование более тайное? 

          Тем что мое решение невозможно узнать после опускания бюллетеня в корзину.

          Я точно так же прихожу с паспортом, и ничего не мешает мотивированному сотруднику избирательного участка запомнить связку "номер паспорта"-"номер бюллетеня", нарушая таким образом тайну в момент извлечения бюллетеня из урны для подсчёта.

          Бюллетени не нумеруются, Они имеют подпись и печать председателя комисии, не более того. Можно помечать как-то бюллетени, но это невозможно в рамках хочу знать как кто голосовал на всех участках. Это возможно, скажем, если вам лично дадут помеченный бюллетень и вы этого не заметите..

          Так и в онлайн-голосовании - достаточно разнести на разные сервера процедуру аутентификации с авторизацией (выдаёт сертификат "предъявителю можно голосовать") с процедурой заполнения бюллетеня (проверяет сертификат, в котором гражданин анонимизирован).

          И то и другое контролируется ЦИК (иначе кто-то может лупануть сертификатов от души) - что как бы говорит о том, что ЦИК может одним движением сопоставить вас как личность с вашим голосом в системе.

          В любом случае тайна обеспечивается доверием гражданина к огранизаторам, что они не будут пытаться сопоставлять идентификаторы избирателей с идентификаторами бюллетеней.

          Что бы это было не на доверии, а by design - бюллетени у всех одинаковые и считается только количество. Привезли на выборы условные 100, проголосовало 50 (в урне 50 штук), голосов 45 (5 испорчены), еще 50 утилизированы. Так это работает.


      1. askv
        24.09.2021 00:07
        -1

        А где Вы увидели в Конституции тайное голосование? Тайное голосование предусмотрено на выборах Президента РФ (ч.1 ст.81), про выборы в Госдуму сказано, что всё определяется федеральными законами (ч.2 ст.96).


        1. symbix
          24.09.2021 00:29
          +4

          Федеральный закон "Об основных гарантиях избирательных прав и права на участие в референдуме граждан Российской Федерации" от 12.06.2002 N 67-ФЗ, статья 7.


          Это вообще основополагающий закон о выборах и референдумах в РФ, с опытом наблюдения он заучивается наизусть :)


        1. askv
          30.09.2021 00:41

          Неистово плюсующим и минусующим: прежде чем реагировать на что-то, полезно ознакомиться хоть немного с предысторией и контекстом.


          1. symbix
            30.09.2021 07:58
            +1

            Да, я не понимаю, почему вас заминусовали, а меня заплюсовали. Я ведь дополнил ваш комментарий, согласившись с ним и указав конкретный ФЗ, а не опроверг его.


  1. BDI
    22.09.2021 15:44
    +8

    Однако надо сказать, что таким результатам в ГАС Выборах может быть и другое объяснение: например, что оппозиционные избиратели несколько раз переголосовывали за того же самого оппозиционного кандидата, а избиратели административных кандидатов этого не делали.


    По некоторым данным(не скажу точно источник, но слух проскакивал) во время выборов ходила информация что шанс выиграть приз(в Москве «премировали» желающих проголосовать через ДЭГ) повышается с числом попыток переголосования — как раз могло повлиять на ситуацию когда переголосовывали за того же кандидата повторно :).


    1. Mako_357
      22.09.2021 20:01
      +5

      Песков что ли накрутил переголоса?


      1. BDI
        23.09.2021 09:29
        +1

        Хм… А только Песков в ДЭГ участвовал?

        Я, например, с дачи проголосовал(за спойлера, а не за ЕР), и выиграл туже минималку — вот только список «партнёров» какой-то несолидный, даже сходу не знаю на что баллы потратить :). А когда начинают показывать выигравших главные призы, и кто-то вбрасывает что переголосование увеличивает шансы — не уж-то не найдутся те кто если и не поверит, то подумает «а вдруг?!»?

        P.S. Переголосованием не занимался, правда в первую попытку(утром первого дня голосований) попал на нестабильную работу сервиса — бюллетеня ждать не стал, пошел в лес за белыми :). На следующий день проголосовал без тормозов.


    1. ImNoOne
      23.09.2021 01:01
      +1

      Сейчас бы слухам верить.


      1. BDI
        23.09.2021 09:31
        +5

        Вред прививок, ковид выдумка тайного мирового правительства, вышки 5g убивают людей — и правда, кто в наше время верит слухам :).


  1. ChePeter
    22.09.2021 15:55
    +20

    Мое электронное голование было гораздо веселее.

    Вначале голосование казалось традиционной легкой прогулкой, но ...

    Захожу в госуслуги, далее на "проголовать", она проверяет браузер и получаю код на телефон. После ввода кода строчка "формируем бюллетени" висела 10 минут и сессия отвалилась со словами "сайт недоступен"

    Ну думаю, бывает, перегруз, мало ли чего. Захожу через через другого провайдера ( через телефон ). Всё тоже, получил смс, только в конце выдала, что уже проголосовал и теперь могу поменять бюллетень через 3 часа. Интересно стало, это система сама заполнила бюллетень или приняла без единого голоса?

    Через 3 часа опять та же ровно история, после нескольких "сайт перегружен, зайдите через 15 минут "так уверенно выдает "вам не доступна услуга оперативного изменения" ( не помню точно текст, просто противно пересматривать видео, второй то раунд с экрана мака записал ) и всё, выборы окончены ?!

    На следущий день утром поразмыслил, сопоставил - включил передачу данных на том номере, что зарегистрирован в госуслугах и этого телефона на маленьком экранчике уже правильно проголосовал.

    Это как то очень кривые руки писали этот сервис, вот такое мое мнение.

    P.S. очень интересно стало, может там бюллетень по умолчанию, ну, традиционный такой с поставленным чекбоксом ?


    1. GooG2e
      22.09.2021 16:42
      +5

      Я так понимаю они под "проголосовали" имели в виду, что бюллютень вам выдали, а бросили вы его или нет это уже не важно


  1. rumatavz
    22.09.2021 16:00
    +3

    Я вчера тоже пол ночи пытался понять как устроено переголосование. И ничего не смог найти в открытых источниках.

    Без него все оч похоже на федеральные выборы, когда невозможно отследить голосовавшего(см https://habr.com/ru/post/574360/#comment_23408446, только комент а не статью, тк в статье скорее всего ошибка.)

    Но если я могу переголосовать, то кто то уметь мачить мой старый голос и новый(те операции с типом 6, которые по очевидной причине не имеют voter_id)


    1. GooG2e
      22.09.2021 16:43
      +4

      Самое наивное и простое - похоже где-то они всё таки отдельно хранят список выданных бюллютеней для пользователя, а дальше выбирают по последнему.


      1. PsihXMak
        23.09.2021 06:59
        +3

        Венедиктов сказал, что они 8 часов вычисляли переголосовавших. Они действительно сделали систему самым тупым образом, что пришлось парсить всю базу на каждую запись.


        1. GooG2e
          23.09.2021 10:13
          +3

          Круто конечно, но как они это собирались масштабировать на всю страну - вот большой вопрос. Да и даже так - судя по тексту нужно, чтобы выложили алгоритм этого вычисления по имеющимся данным и какое-никакое мат обоснование того как это работает.


        1. MaximRV
          23.09.2021 13:30
          +3

          Там скорее всего конкатенация идентификатора бюллетеня и идентификатора транзакции хешировалась, и потом нужно было проверить их сочетания опять, чтобы понять какие бюллетени переголосовали. Не было индекса по бюллетеням даже в закрытой части базы.

          А вот защиты от того, чтобы не нагенерировать бюллетеней на всех, не проголосовать разок за всех, и потом просто ждать что некоторые придут и проголосуют, а точнее Переголосуют. Причем самим можно голосовать примерно равномерно на протяжении всего процесса голосования, и никто не проверит по пикам частоты выдачи бюллетеней.


          1. PsihXMak
            23.09.2021 15:16
            +2

            Причем самим можно голосовать примерно равномерно на протяжении всего процесса голосования, и никто не проверит по пикам частоты выдачи бюллетеней.

            Главное случайно не уйти на обед и не поставить процесс на паузу XD

            А вообще, я не очень понимаю, чего плохого в индексах. Разве можно будет по индексу вычислить конкретного пользователя?

            Ну, допустим проще сделать хэши. Тогда, уж лучше вычислять хэш прямо во время голосования.

            Или, сколько времени займёт поиск хэша по базе 2 миллиона? 20ms? За сколько отработает DISTINCT MAX?

            И всё можно сделать встроенными средствами того же постгреса, к примеру.


            1. MaximRV
              23.09.2021 16:36

              Если бы я знал как они там сделали, я лишь предположил. Я сам в шоке.


              1. MaximRV
                24.09.2021 18:31

                Главное случайно не уйти на обед и не поставить процесс на паузу XD

                А они и уходили в воскресенье днём.


            1. tyomitch
              23.09.2021 18:19

              А вообще, я не очень понимаю, чего плохого в индексах. Разве можно будет по индексу вычислить конкретного пользователя?

              Ну, допустим проще сделать хэши.

              Допустим, в блокчейне записаны пары (хэш(фио), голос).
              Что помешает начальнику Васи Пупкина вычислить хэш(«Вася Пупкин») и найти в блокчейне его голос?


              1. ilammy
                23.09.2021 18:24
                +3

                Соль.


                1. DesertFlow
                  23.09.2021 22:24
                  +2

                  Это если она неизвестна начальнику Васи Пупкина. А если известна (систему делали одни и те же люди), то легко вычислит и с ней.


                  В смысле, самому начальнику ничего не нужно вычислять. Ему просто от разработчиков системы придут списки сотрудников, кто неправильно проголосовал. Разработчики-то знают соль и легко сопоставят ФИО и голос в блокчейне.


                  1. PsyHaSTe
                    24.09.2021 03:48
                    +3

                    Вы какие-то сложности выдумываете. Зачем там какая-то соль, что мешает между бекндом и блокчейном поставить эластик? Чай с клиента голоса не напрямую в блокчейн летят, а в mos.ru (или куда там), где с ним что угодно можно делать. Да и даже если в блокчейн, то между ним наверняка стоит реверс прокси, которая может логгировать все что душе угодно.


  1. rumatavz
    22.09.2021 16:04
    +2

    Операция 5 у вас не очень точно названа. В коде это add_voter_key. На фед выборах это по сути защита от переголосования. Потому что voter_key подписан сервером выдачи бюллетеней, но он его не знает, тк подписывал вслепую. Тк сервер приема голосов должен проверить что я не сдал один бюллетень два раза добавляется эта транзакция. Новый voter_key мне серевер выдачи бюллетеней не подпишет, тк он знает что Вася Пупкин уже получил бюллетень, а сервер приема полагается на уникальность ключа.

    А вот какова его роль когда переголосовать можно не очень ясна.


    1. Borro
      22.09.2021 16:10
      +2

      Это на https://observer.mos.ru/all/servers/3/txs?methodId=5 он так назван. Можете проверить.


      1. rumatavz
        22.09.2021 16:25

        Я верю:) Но иногда полезно глянуть в код:

        #[interface_method(id = 5)]
        fn add_voter_key(&self, ctx: Ctx, tx_args: TxAddVoterKey) -> Self::Output;


        1. g_DiGGeR
          22.09.2021 18:01
          +4

          так это может потому, что код из гитхаба не тот что в реальности исполнялся.


  1. unxed
    22.09.2021 16:07
    +32

    Я правильно понял, что они взяли готовую неплохую реализацию голосований на блокчейне, и потом гвоздями сбоку прибили переголосование в условную эксель-табличку, причём голос в эксель табличке имеет финальный приоритет? И, если так, зачем там тогда вообще блокчейн? ????????‍♂️????


    1. GooG2e
      22.09.2021 16:45
      +33

      Чтобы Веник мог во все уши кипятком разливать, что у нас блокчейн, всё чисто и прозрачно и подделать низзя


      1. ole325
        22.09.2021 17:07
        +2

        Беда в не подделать, беда в голосовании в пт на работе под присмотром.
        А сколько потом стали заморачиваться дома раскрыто в этой статье - не много, еще и не понятно учлись ли их голоса, но даже если не учлись это не много, сильно меньше странных результатов по ЕР.


        1. GooG2e
          22.09.2021 17:09
          +1

          Это примерно везде реально устроить. Говорят в военных частях голосовали так - приходили, расписывались и отдавали бюллютени старшему по званию.


          1. ole325
            22.09.2021 17:26
            +3

            Если был бы некий чатик или опрос, в котором 1М ДЭГ проголосовал так то, то можно было бы сопоставить. А так, я и знакомые использовали ДЭГ и на этом все, ну результат то не 100%, вот мы то О-малое, которые не испугались ДЭГ, ну а дальше как у Трампа - не голосуйте по почте, а потом "данные по почте надо анулировать, т.к. мы там проиграли" .


        1. asmolenskiy
          22.09.2021 17:29
          +12

          Беда в не подделать

          Ничего не жмет тащить хоть 10 блокчейнов параллельно - один трушный, а остальные те, в которых голоса на лету заменяются на нужного кандидата (по разным алгоритмам) еще до попадания в блокчейн.

          А потом по ситуации уж выбрать тот который больше нравится.

          А еще же можно их просто заранее сформировать несколько штук и выбирать из них наиболее подходящий в текущей ситуации.


          1. Gorthauer87
            22.09.2021 17:35
            +10

            Там exonum, в нем есть анкоринг на биткойн от такой вот бухгалтерии. Но его предсказуемо не прикрутили.


      1. unxed
        22.09.2021 18:07
        +15

        С Венедиктовым, увы, случилось дурное. Эту ситуацию, имхо, хорошо описала Шульман.


        1. Materializator
          22.09.2021 20:30
          +13

          Ключевой сотрудник "Газпром Медиа" в ключевой момент сработал в интересах собственников "Газпрома".


  1. Mox
    22.09.2021 16:16
    +2

    Для меня самое непонятное вот что - исходя из вот такого прецедента - https://habr.com/ru/news/t/561094/ - где гарантия что переголосовывали сами люди?



    1. Borro
      22.09.2021 16:18
      +4

      Как я понял, гарантия в sms-подтверждении (чтобы получить бюллетень, нужно ввести код из пришедшего sms).


      1. A1054
        22.09.2021 20:12
        +10

        СМС как защита от государства?


    1. ole325
      22.09.2021 17:30
      +2

      гарантии нет, но вероятность, что человек пойдет голосовать ногами или зайдет к себе в кабинет очень высока именно в Москве, и подставляться из за 1М голосов так явно очень странно, проще выгнать наблюдателей из УИК, что мы видели не раз из регионов.


    1. PsyHaSTe
      22.09.2021 19:19
      +14


      1. vyacheslavchulkin
        23.09.2021 11:39
        +6

        Жесть, проверил на сайте пенсионного фонда пару СНИЛС https://es.pfrf.ru/checkSnils и они оказались действительные, видео похоже настоящее


        1. vis_inet
          23.09.2021 13:13
          +2

          И неудивительно - много раз про это были публикации.

          Многие бюджетники поступают именно так, подчиняются давлению и незаконным требованиям руководства.


      1. dimavs
        24.09.2021 03:00

        А в чем проблема? Они сами сознательно отдали свои пароли.


        1. tyomitch
          24.09.2021 13:39
          +1

          В том, что система ЭГ в принципе позволяет отдать свои пароли.

          При бумажном голосовании такой проблемы нет.


          1. dimavs
            24.09.2021 13:47

            Например, я вам предлагаю 500 рублей за то, что принесете мне пустой бланк для голосования и даю вам уже заполненный, которым вы и проголосуете.


            1. tyomitch
              24.09.2021 15:17
              +4

              Например, я ваши 500 рублей возьму, а с вашим заполненным бланком схожу в туалет.

              «Предложить избирателю проголосовать определённым образом» != «проголосовать за избирателя самому».


  1. DesertFlow
    22.09.2021 16:30
    +3

    Спасибо за ваш труд.

    А в голосах хранится время момента голосования? Вроде говорили, что в блокчейн голос вносится со случайной задержкой, чтобы сложнее было сопоставить голосовавшего с его бюллетенем. Но если время хранится, то кажется есть способ проверить вброс мертвых душ (основная, как мне кажется, претензия к принципу электронного голосования, где бюллетени выдает государство).

    Допустим, им изначально был известен ключ расшифровки и они могли оперативно следить за результатами. И вбрасывать недостающие мертвые души для нужного процента. Но любой процесс управления происходит с задержкой. Сначала посмотрели какие сейчас проценты, а потом добавили липовые голоса (вброс таких голосов никак невозможно проконтролировать, так как их выдают госуслуги). Даже если они это будут делать со случайным разбросом, чтобы это было незаметно. То все равно, усреднив данные, один график должен получиться со смещением относительно другого. Таким образом можно было бы выявить этот тип фальсификацией, если он был.


    1. tcapb1
      22.09.2021 20:12
      +1

      Находил вот такую картинку по динамике голосования в ДЭГ по 198 округу (Хованская/Брюханова)

      И ещё несколько


      1. duke_pro
        24.09.2021 22:36

        В transactions.datetime, но по идее транзакция с некоторой задержкой совершается, что не критично


  1. Mox
    22.09.2021 16:38

    Я бы на всякий случай проверил - все ли "переголосования" попадают в 24 часовой лимит после первого голосования.


    1. kirushik
      22.09.2021 17:15
      +2

      По блокчейну невозможно определить, это первый поданный бюллетень или переголосование.
      Собственно, поэтому и проверить подсчёт нельзя на основании только опубликованных данных.


      1. Mox
        22.09.2021 17:18
        +1

        А, то есть переголосование не записывается в тот же блокчейн, а храниться отдельно? Ну... А какие вообще шансы доверять вот этому отдельному хранилищу?


        1. torinka
          22.09.2021 17:49
          +4

          "переголосования" записываются в тот же блокчейн, но в нем нет отличий между первым голосом и переголосованием. А факт о том, что какой-то голос является "переголосованием" хранится в где-то в другом месте.


          1. DesertFlow
            23.09.2021 04:45
            +2

            Но ведь более поздний добавленный в блокчейн блок и будет последним голосом... Кроме случаев, когда переголосование случилось сразу же и попало в один блок из 100 голосов, или сколько там в одном блоке, что должно происходить очень редко.

            Однако я так понял, в блокчейн в принципе не заносится идентификатор пользователя, голосование-то обезличенное. Просто зашифрованный голос, но непонятно от того. Поэтому два занесенных голоса невозможно сопоставить с одним пользователем. Кто их вносил. Поэтому где-то должна быть вторая база данных, где хранятся идентификаторы пользователя и его голоса вместе с его переголосованиями. Но тогда прощай анонимность, так как после расшифровки будет ясно за кого именно он голосовал. В общем, непонятно как сделано. На что сетует и автор статьи, что механизм учета переголосований не раскрыт.


            1. DesertFlow
              23.09.2021 05:04
              +2

              По-хорошему, с каждым голосом должен храниться идентификатор пользователя. Тогда можно использовать просто последний голос по времени. Но не простой идентификатор, а обезличенный. По которому невозможно вас найти. Например, это можно сделать так: вы авторизуетесь на госуслугах, получаете с них свое имя и фамилию. Потом зашифровываете их как MD5 хэш. Отправляете его второй независимой стороне, которая снова берет хэш от вашего хэша по неизвестному для госуслуг алгоритму (новый MD5 хэш с неизвестной солью). И возвращает новый хэш вам. А вы записываете его в блокчейн как свой идентификатор вместе с голосом. Этот идентификатор будет постоянным для всех ваших переголосований, что вместе с отметкой времени позволяет очень легко и быстро определить последнее переголосование.

              В итоге госуслуги по такому идентификатору не смогут определить ваше имя и фамилию, чтобы знать как вы проголосовали, так как им неизвестен алгоритм, по которому вторая сторона брала хэш от зашифрованного госуслугами вашего имени. А вторая сторона не знает ваши реальные имя и фамилию, так как видели только MD5 хэш от них. Здесь ключевой момент, чтобы обе стороны не сговорились (госуслуги не сообщили второй стороне, по какому алгоритму берется первый хэш от вашего имени и фамилии, а вторая сторона не сообщит госуслугам по какому алгоритму она берет второй хэш от первого хэша).

              Ну, эту схему я только что сам придумал, как самую очевидную. Наверняка что-то такое или более сложное предусмотрено в реальных и работающих системах электронного голосования, а не этом тайном и непубличном позорище от mos.ru.


            1. torinka
              23.09.2021 10:49

              Идентификатор пользователя в блокчейн заносится. Но связи между идентификатором пользователя и идентификатором бюллетеня с голосом нет (точнее он есть, но в другом, закрытом от посторонних глаз блокчейне).

              >Но тогда прощай анонимность, так как после расшифровки будет ясно за кого именно он голосовал

              Будет ясно за кого проголосовал обзеличенный "идентификатор", к реальному человеку его привязать не так просто, особенно массово. Так что никаких особых нарушений анонимности не произойдет, если и второй блокчейн открыть для всех желающих.


              1. bgBrother
                23.09.2021 19:26

                Но связи между идентификатором пользователя и идентификатором бюллетеня с голосом нет
                Может я чего-то не понимаю, но связь есть (посредством общего voting_id). Внутри транзакции “Выдача бюллетеня”:
                {«voting_id»:«ea067e1ad71565daff55627e4b35340620d53d644820478ee798e125efe657c2»,
                «voter_id»:«66226133256418595367941344536751838140319057399092269074519877057970658693635»,
                «district_id»:197,
                «seed»:«3877720680732874652»}
                Внутри транзакции “Приём бюллетеня”:
                {
                «voting_id»:«ea067e1ad71565daff55627e4b35340620d53d644820478ee798e125efe657c2»,
                «district_id»:199,
                «encrypted_choice»:{
                «encrypted_message»:«32f384b35b17816d0b227e240dbdd0405b03902bab8b547eb2»,
                «nonce»:«5ca72f89ea94f8035e66e129cbad40e8f8154878b65e60af»,
                «public_key»:«dae3d8a3863eded175fec99b6a4c78dfbf8f340c3d1a1ba8d481c615bf912303»
                }}

                Если всё так, то тайна голосования нарушена.


                1. torinka
                  23.09.2021 20:05
                  +2

                  voting_id это идентификатор выборов, а идентификатором бюллетеня в этой транзакции является поле author (вне payload'а), значение которого равно voter_key, появляющееся в транзакции с типом 5 "Проверка доступа голосующего". Идентификатором избирателя является voter_id. Так вот связь между voter_id и voter_key в доступном блокчейне отсутствует.


  1. redneko
    22.09.2021 16:43
    +17

    От создателей алгоритма шифрования "ЛСДУЗ & ЙФЯУ9".

    При поддержке дизайнеров шрифтов "Студии Лебедева"...

    Новый многосерийный сериал

    8ыь()pьi 2о2i

    Базу, наверное, тоже обфусцировали, перед тем как выложить для скачивания


    1. randomfoto
      23.09.2021 17:12
      +1

      «Касперский» создал систему для государственных выборов через интернет

      Команда Polys при «Лаборатории Касперского» разрабатывает систему электронного голосования, ориентированную на проведение государственных выборов и способную масштабироваться на неограниченное число избирателей. Особенностью «Polys.ГОСТ» является возможность гибкой подстройки криптозащиты под требования любого законодательства.


      1. redneko
        23.09.2021 17:23
        +2

        Это как, интересно? Для государства - NULL алгоритм, а остальным - Кузнечик?


  1. Arqwer
    22.09.2021 16:57
    -1

    Ещё любопытно будет проверить криптографию. Я в этом совершенно не разбираюсь, но параметры шифрования в этом файле https://github.com/cikrf/deg2021/blob/master/rtk-encrypt/src/gost.ts мне кажутся странными.


  1. ole325
    22.09.2021 17:04
    +3

    Предположу, что систему не оттестировали на реальном количестве, были тестовые голосования и думаю можно найти их данные и сравнить переговаривавших там. Не исключено, что переголосования либо не были учтены, либо были просто просуммированы или вообще выбранены, но их количество не 50%.

    Вывод +/- получили результаты именно какие и были, а доп время потратили на перепроверку, т.к. сами создатели не поверили в цифры, и вероятно, допустили воздействие из вне.

    Забавно, что всех обувателей (тут речь, не про проделанную работу в рамках данной статьи) заботит судьба 2М голосов, а вот что партия набравшая всего 49%, в ГД получила более 70% мест уже мало кого волнует.

    ИМХО одномандатники главное зло, а ЭГ нужно делать в один день, лучше в воскр, что бы голосовали не на работе.


    1. kirushik
      22.09.2021 17:19
      +4

      Не очень понятно, как можно прийти к выводу про "результаты, какие и были", если это вообще никто (кроме каких-то секретных людей в ДИТ Москвы, которые вообще не члены избиркома) не может проверить.

      Если мы исходим из того, что выборы производят в первую очередь _всеобщее согласие с результатами_, то в этом случае этого вообще нет даже близко.

      Думаю, на Хабре стоит ограничиться обсуждением дизайна системы электронных голосований и проблем с ними, а политический вопрос редизайна избирательной системы РФ оставить для каких-нибудь других площадок.


    1. gremlin244
      22.09.2021 17:42
      +3

      сами создатели не поверили в цифры, и вероятно, допустили воздействие из вне.

      Это создатели то не поверили в то, что по всем округам победили кто надо?) И еще и перепроверить решили, никогдаж такого не было, чудо.


  1. MaximRV
    22.09.2021 17:34

    В фейсбуке есть пост Виктора Толстогузова
    https://www.facebook.com/tolstog/posts/1302318496893467


    1. MaximRV
      23.09.2021 09:22
      +28

      Как сообщает Григорий Мельконьянц, на общественном штабе Москвы принято решение провести общественный пересчёт голосов интернет-голосования по скачанным наблюдателями файлам с сайта https://observer.mos.ru/.

      Забавно наблюдать за тем, как переобуваются на ходу разработчики и организаторы интернет-голосования.

      В течение первых лет разработчики департамента информационных технологий города Москвы (ДИТ Москвы) заявляли, что возможность выгрузки файлов с выпиской из блокчейна может использоваться наблюдателями, для проверки факта, что данные в системе не были подменены после окончания голосования и по ним можно получить результат голосования, зная ключ расшифрования. Конечно, такие заявления моментально приводили к вопросу о возможности подмены голосов до выгрузки файлов, которые раньше обновлялись через достаточные для ручного вмешательства промежутки времени, но пока не будем об этом.

      На проводившихся в сентябре 2020-го года государственных выборах я скачивал эти файлы с доступной тогда периодичностью 30 минут и заметил в них ошибки и последующую подмену файлов. Моя публикация на эту тему (https://www.facebook.com/notes/786771108774083/) вызвала бурное негодование у ответственного за систему интернет-голосования города Москвы Артёма Костырко, который в своём блоге опубликовал мне ответ и неожиданно заявил, что я наблюдал не за тем, за чем оказывается нужно было наблюдать (https://echo.msk.ru/blog/kostyrko/2710137-echo/). Вот что он написал: "Один из членов технической рабочей группы, которого позвал Венедиктов, – сотрудник уважаемого МГТУ имени Баумана Виктор Толстогузов – опубликовал отчет о наблюдении за электронным голосованием 11-12 сентября. Для этих целей он решил пользоваться нашим обзервером, хотя учитывая его обширные технические знания мог бы пойти напрямую в блокчейн и выгружать данные напрямую оттуда. Прежде чем разобрать претензии, которые Виктор высказал в наш адрес, необходимо объяснить, чем обзервер отличается от блокчейна. Обзервер – это внешний интерфейс, который показывает всем, даже тем, кто первый раз слышит слово блокчейн, что процесс идет, что записываются блоки, что голосование не останавливается. Обзервер смотрит в блокчейн и отражает то, что процесс голосования идет. Файлы, которые формируются на сайте обзервера не равны блокчейну, потому что они отражают сайт, а не блокчейн."

      То есть Артём Александрович заявил, что я, как и все ответственные наблюдатели следили, оказывается, совсем не за тем, что нужно, что файлы не равны блокчейну, поскольку они вообще относятся к сайту

      А нужно было мне "пойти напрямую в блокчейн". Однако как это действие осуществить он мне не сообщил, поэтому я воспринял это как ругательство в свой адрес.

      Далее он пишет: “Файлы, которые генерируются каждые 30 минут на сайте observer2020.mos.ru, — это данные, выгруженные с этого самого сайта, а не из блокчейна. Мы называем это гордым словом парсинг. Таким образом, эти файлы – таблицы эксель – совершенно не равны и не являются блокчейном. Основной прием Виктора — это софистика. С его точки зрения, в блокчейне — зашифрованные голоса, в файлах— зашифрованные голоса, значит блокчейн равен файлам. Но это не так.” и “Строки в таблице – это не данные из блокчейна, это автоматически высосанное содержание сайта observer2020.mos.ru. Когда вы копируете текст из документа и вставляете его в другой документ, вы можете случайно не выделить последнее слово. Значит ли это, что в первоначальном документе что-то не так? Не значит. Когда вы открываете чек и случайно отрываете его криво, значит ли это, что банковская транзакция в аппарате прошла неверно? Не значит.”

      Таким образом, с его слов, обсуждаемые файлы это не то, что на самом деле нужно наблюдателям, это не то, что необходимо для установления результатов голосования, они не могут использоваться для проверок, поскольку не гарантируется отсутствие ошибок, а это нечто, которое могут использовать наблюдатели для своих нестандартных целей.

      Если в файлах будут найдены различия, то по мнению Артёма Костырко “Изменения в этих файлах не означат, что что бы то ни было изменилось в блокчейне, потому что в нем изменить ничего нельзя, невозможно изменить голос, невозможно вбросить голос в блокчейн.”

      Заявления Артёма Александровича о том, что блокчейн нельзя изменить и что-то туда вбросить ничем не обосновываются. Место ввода данных с голосами избирателей в блокчейн закрыто от наблюдателей и членов комиссии. Также, вероятно, Артём не знает, что данные блокчейна, если он действительно есть в системе (за 2 года работы в технической рабочей группе нам так и не доказали использование технологии блокчейн в реализации ДИТ Москвы), может быть изменён путём отката цепочки блоков и записи их заново. Заметить это никто из наблюдателей не сможет, поскольку используемый блокчейн не распределен между участниками наблюдения, а скрыт ДИТ Москвы от посторонних глаз. Например, метод отката блокчейна и записи его заново использовался при работе системы интернет-голосования, разработанной компанией Ростелеком (https://habr.com/ru/company/rostelecom/blog/518928/) и этого никто из внешних наблюдателей не заметил. Тогда Ростелеком признался в содеянном сам.

      Как и мне год назад, так и на этих выборах наблюдателям и членам комиссии не была предоставлена возможность сохранять данные из системы напрямую с помощью так называемой “ноды”. Поэтому система интернет-голосования от ДИТ Москвы по-прежнему является недоступным для проверок чёрным ящиком, находящимся в неизвестном месте.

      Сегодня на сайте общественной палаты г. Москвы появилось сообщение, что “Члены технической рабочей группы, участвовавшие в обсуждении и разработке системы онлайн-голосования, смогут убедиться в правильности и корректности подсчета электронных голосов. Для этого руководитель Общественного штаба по наблюдению за выборами в Москве А. Венедиктов предложил им самостоятельно провести аудит результатов электронного голосования.” (https://opmoscow.ru/.../it-eksperty-smogut-ubeditsya-v...). Однако мы этого сделать должным образом не сможем (я являюсь членом ТРГ), потому что нет должной документации на систему, не разработаны методики проверки и не с чем сравнивать. За два года работы мы направили в ДИТ Москвы и общественную палату г. Москвы большое количество предложений, в том числе требования к содержанию технического задания, в которых указывалось о необходимости предоставления документации, разработки методик проверки, внедрения электронной подписи для документов, однако они не были реализованы. Направленные мной в ОП Москвы тревожные письма остались без ответа (прилагаю). В лучшем случае на наши предложения нам отвечали неофициально, после жалоб в ОП Москвы, например, следующим образом:

      - “В среднесрочное ТЗ включены вопросы включенного контроля и наблюдения авторизованными наблюдателями за состоянием самой системы и транзакциями внутри нее.”;

      - “В среднесрочное ТЗ внесены вопросы публикации на специальном портале документации, одобренной регуляторами.”;

      - “В среднесрочное ТЗ включены механизмы интерактивной проверки браузера пользователя на предмет вредоносного кода.”;

      - “По сути стоит отметить, что в среднесрочное ТЗ включены разделы, связанные :

      - реализацией контрольного примера до и после начала электронного голосования,

      - контроля соответствия исполняемого и исходного кода системы,

      - функционала включенного технического наблюдения в ходе электронного голосования.”;

      - “В среднесрочное ТЗ внесено 3 способа контрольного пересчета:

      - на основе проверки случайного объема контрольных транзакций пользователями, согласившимися стать добровольными контролерами и раскрыть для комиссии анонимность своего голосования (но не тайну),

      - на основе выборочной математической проверки с использованием механизмов анкоринга (создание контрольных пользователей для членов комиссии, наблюдателей),

      - на основе непосредственного доступа контролирующих уполномоченных к программно-техническим средствам ДЭГ.”.

      Выяснить что такое среднесрочное ТЗ и увидим ли мы его при нашей жизни выяснить нам так и не удалось. Не увидели мы и реализации всех обещаний.

      Меня, как члена ТРГ, пока не уведомляли о предстоящем аудите и мне неизвестна его методика.

      Аналогичные проблемы с наблюдением есть и в федеральной системе интернет-голосования, но об этом я напишу позднее.

      С самого начала работы я и многие другие заявили, что системы интернет-голосования катастрофически снижают права избирателей, наблюдателей и членов комиссии и вызывают недоверие и много вопросов. Даже при реализации максимума функционала проверить систему без специальных знаний не получится. На основе этого, а также с учётом результатов проведённых экспериментов, считаю, что во избежание нарушения 32 статьи конституции и законодательства о выборах применение систем электронного голосования без возможности выполнения полноценных контрольных проверок членами комиссии и наблюдателями, не обладающих специальными знаниями, должно быть запрещено.

      UPD

      Документы:

      1.1. Письмо в ОП Москвы с предложениями, июнь 2020: https://disk.yandex.ru/i/Qw-hyfLWUY0hJQ

      1.2. Приложение - разработанные технические требования к системе интернет-голосования: https://disk.yandex.ru/i/BM2zFLdOBshlSA

      3. Ответ общественной палаты от 15.03.2021: https://disk.yandex.ru/i/yeyE7JzNmzfGNQ

      4. Письмо о необходимости рассмотреть направленные требования от 24.05.2021 (осталось без ответа до сих пор): https://disk.yandex.ru/i/FnESO3B-lxsAbQ


  1. semenovs
    22.09.2021 17:39
    +2

    Впервые в жизни видел проект качеством ниже чем можно встретить в аутсорсе. То что не бьются итоги нормально. Это не проблема шифрование или блокчейна. Это обычное дело для сетевой архитектуры а-ля спагетти. Она просто такая. Слишком слабосвязанная система. С множеством нюансов. Где непонятно что происходит и ничего нельзя протестировать на уровне "удовлетворительно". Я даже не говорю про то что не были обнародованы обязательные для таких систем тех документы. У нас вообще то ГОСТЫ есть. На ПО. На сами выборы честно скажу мне было все равно. Наблюдал из интереса к отрасли в которой работаю. Очень расстроен. Мы для людей и так как космонавты какие то. А теперь доверия может стать меньше. Просто потому что небыло времени протестировать. Написать методики ввода в эксплуатацию. Обоснования работы и надёжности. Сочувствую программистам. Представляю как выглядил процесс изнутри.


    1. wkia
      22.09.2021 18:24
      +1

      Я не уверен, стоит ли им сочувствовать. Я думаю, там все знали на что шли. Госзаказы такие госзаказы.

      С другой стороны, я могу ошибаться. Поэтому я бы послушал рассказы очевидцев. Кто они? Есть ли они на хабре?


      1. semenovs
        22.09.2021 20:23

        На хабре есть. Вот тут в комментариях Пост. Извините ссылка не ровно в начало получилась


      1. randomfoto
        23.09.2021 17:16
        +1

        «Касперский» создал систему для государственных выборов через интернет

        Команда Polys при «Лаборатории Касперского» разрабатывает систему электронного голосования, ориентированную на проведение государственных выборов и способную масштабироваться на неограниченное число избирателей. Особенностью «Polys.ГОСТ» является возможность гибкой подстройки криптозащиты под требования любого законодательства.

        В «Лаборатории Касперского» рассказали о подсчете голосов в системе ДЭГ

        Функционал системы для онлайн-выборов был разработан специалистами «Лаборатории Касперского». Благодаря особенностям технологии блокчейна, программистам удалось реализовать возможность отложенного выбора, что позволило снизить риск «утраты» голоса избирателя из-за неполадок с интернетом.

        Создатель «Лаборатории Касперского» оценил онлайн-голосование

        Генеральный директор «Лаборатории Касперского» Евгений Касперский рассказал, как он оценивает техническую реализацию дистанционного электронного голосования в этом году


  1. unxed
    22.09.2021 18:05
    +13

    И ещё вопрос. Не могу понять, для чего вообще блокчейн здесь используется и от чего он защищает.

    Его целостность должна подтверждаться скачиванием время от времени всеми желающими и сверкой? Но точно также можно подтверждать и целостность обычной БД, без всяких блокчейнов!

    Если нужно подменить одну транзакцию, то в обычной БД подменяется только она, а в блокчейне придётся подменять все от неё до текущей, да. Но и то и другое палится скачиванием всей базы и сверкой!

    Так зачем тут блокчейн? Ну, кроме заведомого усложнения, которое всех запутает.


    1. navferty
      22.09.2021 19:37
      +16

      Побуду кэпом. Только ради названия, чтобы широкая публика впечатлилась модным, но непонятным словом (ну, блокчейн, там что-то с биткоином связано, наверно надёжно).


      1. unxed
        22.09.2021 19:43

        Ну если дурной умысел искать, то ещё чтобы наблюдение и анализ данных усложнить, да. Но всегда лучше сначала подразумевать добросовестность (бритву Хэнлона никто не отменял, всё-таки). Кто-нибудь может найти добросовестные причины использования тут блокчейна?


      1. semenovs
        22.09.2021 20:28
        +7

        Полностью согласен. Исключительно для хайпа и понтов. Так же как и вчера ростелеком с гордостью заявил что никто не смог взломать систему. Они конкурс объявляли. Нечего и некому было взламывать. Вначале впечатлившись суммой хотел присоединиться. Но почитав условия пошёл ТикТок дальше исследовать. Там точно платят)


    1. unxed
      22.09.2021 19:39
      +13

      Если есть возможность качать и проверять транзакции блокчейна в реальном времени, можно также и записи в обычную базу качать в реальном времени. Если транзакции заверены ЭЦП оператора, сказать «вы неправильно скачали» — не получится. Зачем блокчейн?

      От того, что потом в оригинальной базе обнаружится 100к транзакций, которых у тебя нет (но заверенных ЭЦП, всё как положено), можно застраховаться сквозной нумерацией, опять-таки не ясно, зачем именно блокчейн как способ хранения вводить.

      Я при этом ни в коем случае не хейтер идеи блокчейна, она сама по себе красивая и полезная. Просто зачем она конкретно здесь? Блокчейн, который никого ни от чего не защищает, это как в рассказе Пёстрая лента Конан Дойля: вентиляционная отдушина, которая не вентилирует, и звонок, который не звонит. ОЧЕНЬ ПОДОЗРИТЕЛЬНО черт его дери


    1. iboltaev
      22.09.2021 21:44
      +1

      блокчейн тут для маркетинга. Сверка в блокчейне проще, достаточно хэш последней записи сравнить, а в обычной базе придется шерстить все записи и сравнивать.


    1. DesertFlow
      23.09.2021 05:13
      -2

      Так зачем тут блокчейн? Ну, кроме заведомого усложнения, которое всех запутает.

      Потому что они взяли какую-то известную систему голосования (название пробегало тут на хабре), но вырезали из нее несколько элементов, защищающих от фальсификаций.


  1. K10
    22.09.2021 18:16
    +1

    Когда выложили блокчейн? Или он был доступен все время голосования?


  1. symbix
    22.09.2021 19:26
    +20

    Спасибо большое! Вы четко облекли претензии, которые я, как и многие, озвучивали абстрактно, в конкретную техническую форму.


    К сказанному хочу добавить, что нет никаких следов происхождения конкретных voter ID. Если при "бумажном" голосовании есть списки избирателей, в которых указаны Ф.И.О. и адрес, то тут получается, что мы видим только аналог порядкового номера в строке списка избирателей… и всё. И если на обычном, оффлайновом участке наблюдатели и ПСГ могли посматривать в книги, то на электронных УИК со стороны наблюдателей не было никакого контроля над тем, что избиратель вообще существует.


    Более того, сама "нода наблюдателей" — это, судя по описаниям присутствовавших наблюдателей, вообще фикция. Это не нода блокчейна, а клиент к http-серверу, который отвечает на api-запросы, и вообще большой вопрос, куда именно эти запросы уходили. Наблюдателям вообще не давали ничего делать самостоятельно, запросы по их просьбе отправлял сотрудник ДИТ. И никакого доступа к спискам избирателей через предоставленные API-вызовы у наблюдателей вообще не было. Про прозвон трех номеров из огромнейшего списка — это даже не смешно.


    Про "протухший сертификат" в 20:00 — у меня вообще слов, не нарушающих правила Хабра, нет.


    1. dimavs
      24.09.2021 04:09

      Если "нода наблюдатея" - фикция, то какая разница протух сертификат или нет? :-)


      1. tyomitch
        24.09.2021 13:43

        Задумали вместо наблюдения за ЭГ спектакль, но даже его не смогли провести по-нормальному.


  1. unxed
    22.09.2021 19:33
    +2

    И ещё вопрос. Не стоит ли скинуться на аудит всей этой системы, ну, скажем, теми же ребятами, которые аудит OpenSSL делали? Нам, конечно, может казаться, что мы все тут офигенно крутые специалисты по инфобезу и блокчейнам, но сдается мне, спецы нароют куда больше. Конечно, в 10 дней не факт, что оно уложится, но ценность такой аудит, тем не менее, имел бы — хотя бы для понимания объема возможных дыр в таких конструкциях на будущее. Ну и понимания надёжности/ненадёжности конкретно этой


    1. symbix
      22.09.2021 19:36
      +21

      Да какая разница, если все узлы "блокчейна" находится у комиссии за закрытыми дверьми, и при этом у них есть мастер-ключ, и при этом наблюдатели не имеют доступа к спискам избирателей? Тут хоть миллион аудитов проводи, даже самая идеальная реализация будет иметь уязвимость на уровне внешней аутентификации, которой тут тупо доверяем. Как показать, что это все — реальные избиратели, а не боты?


      Тут проблемы-то в большей части не технического, а прежде всего организационного характера. И все эти проблемы являются прямыми нарушениями федерального закона 67 "Об основных гарантиях...".


    1. tyomitch
      22.09.2021 19:56
      +10

      Какие-то исходники выкладывали на «общественный аудит» месяц назад. Тогда ДИТу задали вопрос: «как убедиться, что использоваться будет именно тот код, который вы сейчас выложили?» — и он остался без ответа.
      Более того, опубликованная версия не поддерживала изменение голоса, а фактически использованная — поддерживала. Т.е. уже доподлинно известно, что на аудит был выложен не тот код, который в итоге пошёл в прод.


      1. unxed
        22.09.2021 20:07

        «Общественный» аудит OpenSSL происходит с момента начала разработки, благо код открыт. Тем не менее, коммерческим аудитом профессионалов они не побрезговали.


        1. semenovs
          22.09.2021 20:31

          Не могли бы поделиться ссылкой. Мне просто интересно кто поменял репутацию на деньги) Или касперкий?)


          1. unxed
            22.09.2021 20:44
            +1

            1. semenovs
              22.09.2021 21:54

              Я видимо не так понял) Я подумал что ростелеком сделал у авторитетного источника аудит ДЭГ. Вашу ссылку я уже видел)


        1. tyomitch
          22.09.2021 20:46

          Я про другое: какая ценность аудита профессионалами открытого кода ДЭГ, если фактически используется не этот код, а непонятно какой? (А даже если бы и этот, мы бы об этом знали только со слов ДИТ и без возможности удостовериться.)


          1. unxed
            22.09.2021 21:03
            +1

            Разумеется, аудиту должен быть подвергнут не только код, а весь процесс. И в резюме должно быть указано про невозможность верификации реально работавшего кода.


          1. dimavs
            24.09.2021 04:16

            nvm


      1. semenovs
        22.09.2021 20:46

        Государственная политика в сфере шифрование и важных данных прямо пропорциона обще мировой. Поэтому никаких алгоритмов никогда не покажут. Как и полного кода системы. Серверную часть так никто и не видел. То что выкладывали это обрезки клиента и мелких сервисов. И то какой то старой версии. И тут долго ничего не изменится. Спасибо что вообще хотя бы делают что то.


        1. unxed
          22.09.2021 21:04
          +7

          Сделали способ голосования, который проверить сложнее, чем офлайновое — за что же тут спасибо?


          1. vis_inet
            22.09.2021 21:21
            +4

            Да не "сложнее", а вообще невозможно!

            В этом-то всё и дело.

            Как можно рассчитывать на доверие к этому в таком случае?


          1. semenovs
            22.09.2021 21:56

            Вода по немногу камень точит. Никуда они не денутся. Рано или поздно будет все по уму сделано. Эволюция жестока к дуракам.


  1. K10
    22.09.2021 19:59

    Как я понимаю, нет проблем генерить voter_id и добавлять нужные голоса в блокчейн во время или после голосования.


    1. rumatavz
      22.09.2021 20:20

      Так не выйдет. Они инициализируются до начала.


      1. symbix
        22.09.2021 20:24
        +9

        А кто мешал нагенерить "мертвых душ" заранее? ;)


        Моя теория в том, что так и сделали, но их не хватило, потому и устроили комедию с "истекшим сертификатом" (например, через rdp подменили) и "переголосованиями" по никому не озвученной процедуре.


  1. unxed
    22.09.2021 21:02
    +11

    О как


    1. vis_inet
      22.09.2021 21:32

      "Да-а-а, уж..." (с)


    1. tyomitch
      22.09.2021 21:38
      -1

      Сложно поверить, что десятки тысяч голосов вбрасываются не скриптом, а вручную сотрудником с перерывом на обед.
      Больше похоже на «мобилизацию» сотрудников госучреждений.


      1. qrazydraqon
        22.09.2021 21:50
        +5

        Ага, в воскресенье.


        1. tcapb1
          22.09.2021 21:55
          +4

          Самое наглядное - округ с Рыжковым, когда в пятницу-субботу вбрасывали за Раззакову, а в воскресенье переключились на Рыжкова. В итоге он и победил в сумме, заняв второе место и на ДЭГ и на участках.


        1. tyomitch
          22.09.2021 22:09
          +1

          Разве мало госучреждений, работающих в воскресенье? От больниц до метро.


          1. tcapb1
            22.09.2021 22:26
            +8

            И все они прекращают работу ровно в 14:30? И несмотря на такое раннее окончание рабочего дня - ровно с 12:20 у них обед? Если бы это были реальные голоса (пусть и под принуждением) из разных госучреждений - было бы больше флуктуаций в графиках. Это мог быть не один человек, а небольшая команда в одном учреждении, но точно не принуждаемые бюджетники.

            На пуши бюджетникам например с mos.ru тоже не похоже. Если бы все пуши пришли в одно время - мы бы увидели резкий пик в момент пуша, а затем плавный спад. Если пуши отсылались порциями в течение первой половины дня вск - всё равно был бы более плавный спад после 14:30, график же обрубается резко. К тому же это никак не может объяснить резкое изменение предпочтений в округе Рыжкова, разве только пуш не был типа "Голосуйте за Рыжкова прямо сейчас по ссылке:"


            1. tyomitch
              22.09.2021 22:49
              +1

              Хорошие аргументы. Но представить себе даже небольшую команду, десятки тысяч раз подряд тыкающих мышкой в одну кнопку, я всё равно не могу. Для скрипта — наоборот, флуктуации слишком сильные. И вся эта история никак не вяжется с 12-часовой задержкой перед подведением итогов: если к 20 часам блокчейн уже был «какой надо», то чего было тянуть?


              1. tcapb1
                22.09.2021 22:52
                +1

                Возможно они сами увидели что натворили и как легко это можно увидеть, и пытались найти способ например переписать блокчейн.


              1. PsyHaSTe
                22.09.2021 23:17
                +1

                Хорошие аргументы. Но представить себе даже небольшую команду, десятки тысяч раз подряд тыкающих мышкой в одну кнопку, я всё равно не могу

                Посмотрите видос на ютубе ниже — и скажите что это нельзя было автоматизировать.


                1. PsyHaSTe
                  22.09.2021 23:56
                  +2

                  Это надо чтобы сильно припекло и то правильно сделать смогут единицы, остальных попалят при анализе фото.

                  Какой анализ фото, вы чего. Каждый первый мелкий директор школы — специалист по кибербезопасности? Если нафотошопить галку может каждая первая барышня (при желании), то вот детектировать ретушь фото — задача на порядки более редкая. При желании конечно всё гуглится, но люди которые умеют гуглить редко оказываются этим самым директором-проверяющим.


                  В теории конечно все возможно. Но практика говорит о том, что так не делают.


                  1. Vilgelm
                    24.09.2021 14:57
                    +1

                    Детектировать фотошоп можно просто посмотрев на EXIF, что умеет даже проводник в Windows. Удалить EXIF можно, но для этого придется открыть файл hex редактором и заменить нулями все упоминания фотошопа (утилиты для очистки EXIF удаляют не все, по крайней мере те, которые я пробовал).

                    Другое дело что всегда можно поставить галочку например ниткой или ручкой, которая стирается (в любой канцелярии такие продают), сделать фото, а потом уже проголосовать как хочешь. И такой вариант куда более распространен среди условных бюджетников, чем фотошоп.


                    1. freeExec
                      27.09.2021 15:37
                      +1

                      Есть форматы не поддерживающих метадату в принципе


                1. 907
                  23.09.2021 09:20

                  Это хорошо если борятся за явку, а не за кандидата

                  И за кандидатов тоже. Знакомый бюджетник рассказал что у них на работе всех заставили регистрироваться на участке , который находится прямо рядом с работой. И заставили голосовать в первый день с утра. Фотографировать бюллетени не заставляли , по его словам... Да и зачем заставлять фотографировать , если есть еще две ночи для подмены бюллетеней...


    1. SaveTheRbtz
      22.09.2021 22:10
      +6

      Могу подтвердить данные в ролике по 198ому округу на основе данных блокчейна (абсолютное и относительное кол-во голосов Брюхановой и Хованской)

      Данные брались из официального блокчейна: (+ ручное декодирование недостающих голосов)

      SELECT datetime, ballot.decrypted_choice[1] as choice
      FROM public.decrypted_ballots as ballot
      JOIN public.transactions as trans_store
      ON (ballot.store_tx_hash = trans_store.hash)
      WHERE ballot.decrypted_choice[1] in (217404809,136749451) ORDER BY datetime


    1. tcapb1
      22.09.2021 22:21
      +2

      https://www.facebook.com/maxim.gongalsky/posts/10224328921105036 - оно же в текстовом виде


    1. symbix
      23.09.2021 02:39
      +4

      Ага!


      Вот этот пик с 8 до 14 в воскресенье — это могли быть переголосования, а могло быть и наоборот — вбросы от имени избирателей, которые еще не проголосовали (причем преимущественно от имени тех, кого в ДЭГ вписали добровольно-принудительно, что в бюджетных организациях происходило сплошь и рядом).


      Переголосовать можно не ранее, чем через 3, но не позднее, чем через 24 часа после первоначального голосования, так что утро воскресенья — вполне подходящее время для таких вбросов.


      Те, кто таки заходили проголосовать, спокойно получали свой бюллетень и голосовали (на самом деле — переголосовывали), а на деталь про отложенное голосование сложно обратить внимание, если видишь эту форму в первый раз. А кто не заходил (например, те, кого на ДЭГ вписали не по их воле, могли вообще не собираться голосовать) — вот и остались в виде вбросов.


      Это объясняет и нереалистичное число переголосований (в районе 15%), и дает возможность при проведении проверки подсчета с выделением переголосований по имеющемуся только в приватном блокчейне group_id (на котором сейчас настаивает рабочая группа) заявить: вот, смотрите, переголосовали-то не в ту сторону, как вы нас обвиняли, а наоборот, так что переголосование, как и задумано, защищает от административного давления!


      Конечно, просто "вброс переголосований" проще, но и вот такой хитрый вариант тоже исключать не стоит.


      1. ole325
        23.09.2021 10:22
        +1

        я бы не называл вбросом, термином обычного голосования, тут либо

        • так все включили ПК и голосуем за... (пт утро);

        • забрать логин/пароль и использовать в вскр;

        • получить доступ к логин/пароль и без ведома голосовать;

        ну и технически не исключено, что переголосования не учитывались, или прибавлялись, 104% не просто так.

        Но дикая явка в пт, больше подтверждает вашу версию, чем совпало и так было


        1. symbix
          23.09.2021 18:59
          +2

          Административно контролируемое голосование, несомненно, тоже было. Но если все им ограничивалось — зачем ДИТу даже после всех скандалов упорствовать и скрывать даже от небольшой группы людей, законно находившимся в помещении ДЭГ УИКов, обоснованно — на основании федерального закона 67 — требующих возможности проверки подсчета, и поле group_id, и сам алгоритм его обработки? В итоге джентельменам из ДИТ предлагается поверить на слово. Как-то подозрительно, не находите?


          1. ole325
            23.09.2021 19:38
            +1

            Несомненно, там будут косяки и тогда придётся отменять все голоса.


            1. symbix
              23.09.2021 19:52

              Вот-вот, и хорошо, если у этих косяков будут какие-то разумные объяснения, кроме фальсификации.


              Потому уверен, что толком ничего проверить и не дадут. В лучшем случае вместо приватного блокчейна дадут какую-нибудь выгрузку по group id, в достоверности которой убедиться невозможно.


            1. PsyHaSTe
              22.09.2021 23:19
              +3

              Сколько ни спрашивал знакомых бюджетников — фоткать заставляют сам факт прихода на избирательный участок, но не бюллетень. Тем более что в мире фотошопа нет никакой проблемы сделать фотографию до простановки варианта и наклеить галку в нужное место — сейчас даже дамы за 50 с одноклассников умеют это делать.


    1. unxed
      23.09.2021 11:02
      +1

      1. MaximRV
        25.09.2021 16:29

        Поскольку в комментах упоминали что не могут прочесть посты в фейсбуке, скопирую его текст сюда:

        Анастасия Брюханова на ютуб-канале Максима Каца рассказала о математических доказательствах масштабных фальсификаций на электронном голосовании. Оказалось, (О, чудо!), что "опрокидывание" результатов есть ни что иное, как банальные вбросы - только теперь электронных бюллетеней в электронную урну. А реальные результаты онлайн мало отличаются от оффлайна. Как соавтор исследования я детально расскажу, как это удалось доказать.

        Результаты голосования опубликованы на официальном сайте. По сути это зашифрованный список бюллетеней, где указано время голосования и выбор избирателя. По этой базе данных (sql dump) мы сделали временную развертку результатов голосования (Рис. 1 - на примере 198 округа). Как будто выборы проходят каждые 30 минут и каждый раз подводят новые итоги.

        Голосование идет очень неоднородно, разделим его на три фазы.

        1. Медленная - это пятница и суббота. Здесь процент за административного кандидата (далее ЕдРо) средне завышенный.

        2. Быстрая фаза - это воскресенье, примерно с 8:00 до 14:00. Процент ЕдРа резко подскакивает (в 1.5 раза), а потом так же резко падает.

        3. Свободная фаза - это воскресенье с 14:30 до 20:00. Процент ЕдРа минимальный и практически не меняется со временем (отрезок короткий, но тем не менее).

        Этот паттерн голосования абсолютно универсален и наблюдается во всех без исключения одномандатных округах Москвы, включая и ГосДуму, и довыборы в МосГорДуму (хотя там есть особенность - о ней ниже). Посмотрите на Рис. 2: все зависимости совпадают с точностью до мультипликативной константы. Вывод можно сделать только один: во время фаз 1 и 2 происходила масштабная интервенция (проще говоря, вбросы), а во время "свободной фазы" ее, по-видимому, не было.

        Это и позволило получить "очищенные результаты" ДЭГ - использовать только свободную фазу (Рис. 3). Как видно из рисунка реальные результаты ДЭГ слабо отличаются от оффлайна. Ну уж точно нету "опрокидывания", т.е. когда оффлайн с отрывом выигрывал один кандидат, а онлайн - другой. Так что объяснение "парадокса" ДЭГ банальное - это привычные нам вбросы. Никаких вам замысловатых теорий про ЕдРо, которое уговаривает своих избирателей голосовать онлайн, и оппозицию, которая, наоборот, отговаривает.

        Любопытно, что результаты ДЭГ хорошо коррелируют с социологией Russian Field (Рис. 4). Показано для 198 округа, но и в 197 и 208 корреляция хорошая. То есть честно посчитанное ДЭГ даже адекватнее оффлайна, значит админресурса там почти нету.

        Забавно, что интервенция в "быстрой фазе" шла с перерывом (Рис. 5 - это кумулятивная функция по всем кандидатам ЕдРа: так удается набрать необходимую статистику). Мы ее шутливо назвали "перерывом на обед", уж не знаю, реально фальсификаторам захотелось поесть или они завершили свою работу, отчитались наверх, а там сочли, что усилий недостаточно и надо бы еще пару часиков повбрасывать.

        Так что, в целом, картина маслом вырисовывается. Сначала решили вбрасывать аккуратенько и по-тихому, размазывая голоса. Но к воскресенью поняли, что дело плохо (посмотрели экзитполы, например) и надо срочно "поддать жару". Тут делали уж как придется, явно лихорадочно советовались с начальством и имели цель к двум часам все доделать, чтобы отчитаться об успехе.

        Что ж, есть и плохие, и хорошие новости. Плохая - у нас опять украли выборы на этот раз с помощью электронных вбросов. Хорошие: нам оставили "честный кусок" и нету никаких сотен тысяч запуганных москвичей, которые боясь начальства, как рабы, в страхе голосуют за едро. Есть жулики в избиркомах. А к этому мы привычные.

        На десерт: увлекательная история в 37 округе на довыборах в МосГорДуму (Рис. 6). Там Екатерина Раззакова от ЕдРа и Владимир Рыжков от Яблока. Так вот, оказалось, что в медленной фазе вбрасывали в пользу Раззаковой, а в быстрой - за Рыжкова. Тут есть два объяснения: либо есть два центра вбросов и они не договорились, либо сначала по ошибке вбрасывали за Раззакову, разумно предполагая, что раз она от ЕдРа, то за нее и надо, а потом надавали по шапке: не за того вбрасываете!

        Вывод короткий: эти результаты электронного голосования должны быть отменены, а вся лавочка закрыта (и московская, и федеральная).

        В комментариях: ссылка на ролик Анастасии; ссылки, исходники и дополнительная информация.

        Гонгальский Максим


        1. jryj
          26.09.2021 09:16

          Плохая — у нас опять украли выборы


          От уж новость, так новость. О том, что всё пройдёт именно так говорилось давно. Можно даже сказать, что бы выборов у вас и не было.

          ЧТо бы чего-то добиться на выборах надо представлять какую-то силу из себя. Где же все те донатеры, которые стоят за Брюхановой? Внезапно оказалось, что закинуть денежку это ничтожно мало и за ней нет никого.

          Проводила ли Брюханова агитацию среди работников крупных заводов, фабрик или хотя бы с теми же курьерами, таксистами и учителями?


    1. unxed
      24.09.2021 18:47
      +1

      Продолжение


      1. tcapb1
        22.09.2021 22:27
        +2

        Даже самые технологически идеальные выборы не защищены от технологии "начальник за спиной"


        1. PsyHaSTe
          22.09.2021 22:34
          +1

          Зато обычные бумажные от такого неплохо защищены — достаточно убедиться что ширма без дырок.


        1. Vilgelm
          24.09.2021 14:54

          В этом плане функция переголосования более менее должна работать. А вот от отбирания логина и пароля защититься куда сложнее.


          1. Am0ralist
            24.09.2021 16:07

            Биометрическая идентификация пользователя госуслуг.
            Аналог проверки паспорта при выдаче бюллетеней


            1. Vilgelm
              24.09.2021 16:18

              А там есть какая-нибудь защита от «записал голос» и штук типа Adobe Voco?


              1. Am0ralist
                24.09.2021 16:31

                Если честно — без понятия, как собираются биометрию внедрять у нас все эти банки и оплати е-баллами в метро… Я просто напоминаю, что в этом направлении действия ведутся достаточно активно и, вероятно, вполне смогут прикрутить и это.

                С другой стороны, за последние пару лет электронные госуслуги скатились до уровня обычных человеческих по качеству и отфутболиванию, никакие заявления толком не читаются, половина теряется и прочее...


                1. bgBrother
                  26.09.2021 14:32

                  Если честно — без понятия, как собираются биометрию внедрять у нас все эти банки и оплати е-баллами в метро…
                  Я бы не ориентировался на банки, учитывая, что они допускают восстановление паролей через такой небезопасный механизм, как СМС, количество атак на который даже лень перечислять.

                  Большинство способов биометрической идентификации небезопасны. Что отпечатки пальцев с анализом сосудов, что лица с датчиками глубины (3D face printing). Наиболее безопасным способом лично я на данный момент считаю активную идентификацию с помощью сетчатки глаза, но массовые реализации даже этого способа идентификации на данный момент уязвимы.

                  Лишь вопрос времени и заинтересованности когда определённого человека взломают. Достаточно один раз собрать и воспроизвести биометрические данные, изменить которые крайне затруднительно, чтобы везде их применять.

                  Добавьте к этому уязвимости и закладки определённых датчиков и алгоритмов хеширования + собранные правительством наборы не хешированных биометрических данных — картина будет ещё более ужасной.


  1. gotozero
    22.09.2021 21:48
    +2

    Идя на евыборы не покидало ощущение, что идешь поиграть в покер с шуллером на деньги.
    В итоге все просто, сайт просто не работал последний день и не факт, что работал в другие.
    Wait a second…


  1. anonymous
    00.00.0000 00:00


  1. anonymous
    00.00.0000 00:00


  1. anonymous
    00.00.0000 00:00


  1. anonymous
    00.00.0000 00:00


  1. anonymous
    00.00.0000 00:00


  1. Zibx
    22.09.2021 22:07
    +4

    Я не могу представить архитектуру системы которая позволяет переголосовывать и при этом оставляет голосование анонимным. Либо нескольких минут обдумывания не хватило, либо эта система нарушает конституцию. Для возможности переголосования за избирателем должен быть закреплён конкретный ID бюллетеня который в дальнейшем будет считаться не действительным если человек захочет переголосовать.


    1. flx0
      22.09.2021 22:22
      +1

      Например, можно сгенерировать дополнительные данные (nonce) для аутентификации, подмешать их в какой-нибудь хеш от бюллетеня и сохранить локально. Для отзыва голоса, отправить их на сервер, и он проверит сойдется ли хеш (это, впрочем, явно не про обсуждаемые "выборы"). Принципиально решаемыми для электронного голосования являются все проблемы, кроме одной, — подтверждения что голосуют реальные люди.


      1. Zibx
        22.09.2021 22:46
        +3

        То есть проголосовав на эвм с телефона переголосовать уже было нельзя? Я в голове рассматривал вариант сохранить ID бюллетеня локально, но счёл его не рабочим как раз по этой причине.

        Есть проблема масштабнее голосования реальных людей, а не начальников по спискам подчинённых — ничто не мешает завести миллионы вообще фейковых учёток для голосования. При текущей прозрачности работы системы можно было пойти и по такому пути.

        Альтернативный вариант: многократное переголосование с последующим вычищением таблички дубликатов. (этот сценарий косвенно подтверждается там что в обеденные часы аномалии куда-то пропадали).

        Но я акцентировал внимание на проблема переголосвания по той причине что проверка реализации этой части может выявить нарушение системой закона о голосовании, а это будет серьёзная проблема.


        1. Aniro
          23.09.2021 01:16

          Также возможно переголосование c использованием чужих аккаунтов, с последующим перестроением таблицы переголосований. Так как она до сих пор неопубликована - вполне возможный вариант. В этом случае, когда данные опубликуют мы увидим в ней аномалии.

          Пример. Таблица переголосваний до перестроения:

          A => D
          B => D
          A => D
          B => D

          И после:

          A => B
          B => A
          + 4 голоса за D

          Это конечно более сложный вариант и требует непосредственного вмешательства администратора ДИТ, но тоже возможный, так как очевидно данным выложенным спустя трое суток доверять нельзя.


    1. Serbin
      22.09.2021 23:27
      +3

      Не знаю будет ли оффициальный ответ от ДЭГ, но на всякий случай опубликую описания Щербакова А (из телеги ДЭГ) тут:

      Касательно повторного голосования.

      1. В системе есть два блокчейна. Публичный и приватный

      2. В приватном хранится доп параметр group_id.

      3. Для подсчёта нам по сути нужно сгруппировать все голоса по этому id и выбрать последний.

      4. Этот механизм часть защиты избирателей от давления

      5. Логика подсчёта также реализована на блокчейне, что накладывает определенные ограничения на скорость всего этого. Та же самая операция на базе данных (GROUP BY) будет значительно быстрее но для БД будет необходима внешняя система контроля целостности DAMP

      Саму логику можно посмотреть в репозитории ДИТ в папке dit-blockchain-private-source Полный путь dit-blockchain-private-source\services\actual-ballots-service\src\schema\actual_ballots_storage.rs

      Таким образом долгое время выполнения это из-за реализации нетипичной для блокчейна операции GROUP BY на параметре group_id. Он был реализован "в лоб" с высокой сложностью, но вполне вероятно что другие более эффективные реализации могут либо не существовать либо потребовать значительно более глубоких знаний блокчейна Exonum - на уровне авторов/контрибьютеров самого проекта. Поэтому такая реализация вполне себе допустима.


      1. Zibx
        23.09.2021 02:47
        +1

        То есть тайна голосования нарушается только в приватном блокчейне, который и является связкой userID — groupID?


        1. Alexsey
          23.09.2021 04:35
          +7

          Похоже на то. И выглядит так как будто результаты голосования как раз были выгружены из приватного блокчейна. Это бы объяснило почему в публичном так и не подведены итоги и откуда взялись эти непонятные протоколы.

          Но в таком случае существование публичного блокчейна вообще не имеет никакого смысла и это главная причина считать что ДЭГ это один большой развод.


          1. MaximRV
            25.09.2021 16:35

            Если в приватном всё же был индекс последнего переголосования по каждому бюллетеню, тогда зачем было много часов "устанавливать" якобы соответствия между 2 миллионами бюллетеней и 300 тыс. переголосовавших транзакций.
            Если индекса нет, то приходится сравнивать все варианты хешей от конкатенации идентификатора бюллетеня и транзакции, а если есть индекс, то перебирать все комбинации и сравнивать хеши нет необходимости. если в приватном блокчейне был индекс, тогда смысл было перебирать? много в общем вопросов.


      1. DGG
        23.09.2021 09:36
        +6

        Внимание вопрос.

        То, что публичный блокчейн не редактировался, можно подтвердить скачанными на разных этапах его копиями.

        А если их приватный блокчейн приватный и его нельзя было смотреть в процессе - можно ли проверить что приватный генерировался во время голосования, а не, например, после него на основании публичного с произвольно расставленными group_id?


        1. tyomitch
          23.09.2021 09:47
          +8

          12-часовая задержка как раз больше похожа на «нам тут надо сгенерировать блокчейн за трое суток», чем на «нам тут надо просуммировать два миллиона записей с группировкой».


          1. duke_pro
            24.09.2021 23:25

            Там вроде был доступ наблюдателей, возможно они сохранили хэши последних блоков (вроде доступ был закрыт уже после окончания голосования)


            1. MaximRV
              25.09.2021 16:36
              +1

              на ноде наблюдателя почти ничего нельзя было делать. да и блокчейн наверное там был публичный всё же


      1. tyomitch
        23.09.2021 09:44
        +13

        Очень интересная архитектура: «для прозрачности голосования за блокчейном могут следить наблюдатели; но итоги голосования подводятся не по тому блокчейну, за которым следят наблюдатели, а по другому, который мы никому не покажем».

        Это как если бы на бумажном голосовании наблюдателей посадили около одной урны, а бюллетени бы считали из другой.


      1. zeolant
        23.09.2021 10:36
        +2

        Судя по графику, что выложили на эхо по 198 округу (https://echo.msk.ru/blog/echomsk/2908338-echo/), и графику, который демонстрировала Брюханова в своем видео, данные в закрытом блокчейне отличаются от публичного. По крайней мере динамика голосования за Брюханову разная. За Хованскую вроде как похоже внешне (я цифры не сравнивал). На мой взгляд ДЭГ должны объяснить это расхождение. Особенно если и на остальных участках будет подобная ситуация. Они вроде как обещали выложить по всем участкам графики на основе закрытого блокчейна.

        UDP: ссылка на график по публичному блокчейну от команда Брюхановой https://www.facebook.com/photo/?fbid=10224328914184863&set=pcb.10224328921105036


        1. sequence
          23.09.2021 21:13

          Вы график процентного отношения у команды Брюхановой с абсолютными цифрами на графике эха не путаете?


          1. tyomitch
            23.09.2021 18:24
            +3

            Угу. Или будет 100 клиентов «Проголосовать за Бориса Вишневского» с одинаковым названием и минимально отличающимися иконками.


          1. ilammy
            23.09.2021 18:46
            +1

            Это фундаментальный вопрос электронного голосования.


            Доверяете авторам приложения, что оно отправляет нужную галочку правильным образом? Доверяете издателю, что у вас на устройстве настоящее приложение, а не патченое под «нужного» кандидата? Доверяете провайдеру, что ваши соединения не перехвачены? Доверяете вашем компьютеру, что он всё сделает как надо? Доверяете этому же стеку технологий, но теперь с принимающей стороны? Избирателю где-то нужно провести черту, самостоятельно.


            Ладно, на самом деле это скорее всего будет веб-приложение, там некоторые вопросы снимаются. Но суть остаётся та же. Бумажному бюллетеню в руках перед собственными глазами доверять непосредственно как-то проще, и не нужно надеяться, что у пользователя хороший браузер.


            В идеальном мире «кто-то выпустил такой апп под её именем и голосованием за другого» — это сразу ворох статей за препятствие осуществлению избирательных прав, мошенничество, и прочее, что по идее должно отвадить от такого поведения.


            В этом же идеальном мире открытых протоколов у избирательной комиссии есть своё официальное приложение, которым можно воспользоваться по умолчанию. Криптоанархисты могут навелосипедить свою опенсорсную поделку, собирать её из исходников, и у них всё тоже будет хорошо. Партии могут встроить голосовалку как ещё одну фичу в свои приложения, которые у них и так есть.


    1. Vilgelm
      24.09.2021 14:59
      +1

      В принципе достаточно чтобы айди, к которому будет привязан голос не был привязан к вам лично. Информация о том что e83ye83h8dh38hdw8ha9s0j30w2qa0h8 переголосовал ничего не нарушает тайну голосования до того как этот айди не привязан к конкретному человеку.


      1. MaximRV
        25.09.2021 16:38
        +1

        вот только начальник за спиной может подглядеть этот ай-ди, чтобы проконтролировать отсутствие переголосования по нему. Поэтому в публичном блокчейне отображается только хеш от конкатенации идентификатора бюллетеня и идентификатора транзакции голосования/переголосования по нему.


  1. mixsture
    23.09.2021 00:15
    +6

    Не очень понимаю, как возможность переголосования защищает? По-моему, с этой функцией можно играть и в другую сторону — собирает всех начальник в сб и сажает перед ним «переголосовывать» то, что сотрудники сами наголосовали в пт. А к концу рабочего дня уже и 24 часа пройдет.


    1. Carburn
      23.09.2021 22:36

      в выходные же мало кто работает


      1. ilammy
        23.09.2021 01:52
        +7

        Если политическим партиям позволить, то они бы вообще сделали свои клиенты, где есть только одна кнопка «Проголосовать» — выбор за кого вы уже сделали, скачивая клиент.


      1. Vilgelm
        24.09.2021 17:19
        +1

        Нужно просто опенсурсный клиент, типа как у условного битка. Хочешь собери из исходников сам, хочешь скачай уже готовый с репозитория.


  1. meet2code
    23.09.2021 00:20
    +4

    Судя по первой вашей статье, вы последние 8 лет зря не теряли :) Обрели не только хорошие навыки программиста.

    Спасибо за работу, вдохновляет!


  1. snizovtsev
    23.09.2021 01:03
    +26

    Какой смысл обсуждать блокчейн, если я не могу быть уверен, что подгруженный JS код с сервера госуслуг просто не поменяет местами метки возле чекбоксов?

    Идея голосования через госуслуги/mos.ru порочна by design. Клиентская часть должна быть представлена в виде открытого протокола. Тогда любая политическая сила сможет предложить избирателям софт, которому они доверяют. Транзакции должны быть полностью публичны, в реальном времени.

    Пока эти базовые принципы не выполнены -- копать глубже нет смысла.


  1. anonymous
    00.00.0000 00:00


  1. anonymous
    00.00.0000 00:00


  1. anonymous
    00.00.0000 00:00


  1. anton_t
    23.09.2021 01:03
    +4

    А что мешало системе в конце 3го дня накидать в этот блокчейн транзакций с нужными переголосованиями? Ну или докидывать их равномерно на протяжении всего голосования?


    1. Alexufo
      23.09.2021 05:04
      +2

      Так и сделали


      1. tyomitch
        23.09.2021 09:51
        -1

        Это одна из версий. Пока что ей нет ни подтверждения, ни опровержения.


        1. MaximRV
          25.09.2021 16:39
          +1

          чисто статистически опровергнуть эту версию уже очень трудно.


  1. Sabubu
    23.09.2021 05:13
    +9

    Вот, смотрите, что написано на сайте mos.ru в разделе "Ответы на вопросы":


    Откуда я знаю, что вы посчитали все голоса, которые поступали онлайн?

    Голоса избирателей, которые сделали выбор онлайн, считали прямо в блокчейн-сети — это обеспечивало безопасность данных и прозрачность голосования. Подключиться к блокчейну и поучаствовать в контроле мог любой избиратель.

    А по факту: для установления итогов голосования использовался приватный блокчейн, данные из которого не опубликованы. Вместо этого выложен лишь другой, публичный блокчейн, который не использовался для установления итогов голосования и который вообще непонятно зачем тогда нужен.


    То есть, на сайте mos.ru написана ложь. Блокчейн, в котором считали голоса, был приватный, и подключиться к нему было нельзя.


    Еще, кстати, непонятно, почему на федеральных выборах и в Москве использовались разные блокчейны — Москва это что, отдельное государство со своими правилами? Хотя в Москве хотя бы выложили публичный блокчейн, а федеральный на https://stat.vybory.gov.ru вообще не выложен.


    P.S. Я заметил, что тут вставляют ссылки на видео об обнаруженных аномалиях голосования (% голосования за ЕР растет и падает по одному графику). Не надо вставлять видео, никто не будет его смотреть, надо вставлять ссылку на текстовый пост: https://www.facebook.com/maxim.gongalsky/posts/10224328921105036


    1. K10
      23.09.2021 06:51
      +11

      Не надо ссылки на фейсбук, он не пускает без аккаунта там.

      Если вставлять, то сам текст, или ссылку на открытые площадки.


    1. MaximRV
      25.09.2021 16:41

      видео как раз тоже хорошо. а пост я здесь скопипастил выше, для удобства читателей
      https://habr.com/ru/post/579350/#comment_23519886


  1. ravendyg
    23.09.2021 06:45
    +6

    Работа гигантская сделана, спасибо за объяснения.

    Но есть один нюанс, который, как мне кажется, делает бессмысленными все комментарии — блокчейнили, блокчейнили, а потом принесли эксельку из которой переписали результаты. Это как обсуждать мастерство шуллера, который обул вас на четверть всех денег, забывая о том, что он потом дал дубиной по башке и забрал всё.


  1. Black_Spirit
    23.09.2021 09:26
    +1

    А нельзя ли сделать голосование по принципу типовой криптовалюты. Выпускаются монетки по количеству избирателей. Каждому выдаётся монетка. После чего, в день голосования избиратели дружно отправляют монетки на адрес нужного кандидата. Все очень наглядно и прозрачно. Функцией переголосования придется пожертвовать.


    1. tyomitch
      23.09.2021 09:54
      +1

      У криптовалют и у голосования противоположные требования: у плательщика должна быть возможность доказать, что он заплатил конкретному получателю. У голосующего должно не быть возможности доказать или опровергнуть, что он отдал свой голос конкретному получателю.


      1. Black_Spirit
        23.09.2021 10:51
        +5

        Monero же. С помощью приватного ключа ты видишь свою трансакцию и больше никто.


    1. boris768
      23.09.2021 09:58

      по идее — оно так и есть, просто монетка выдается при регистрации на ДЭГ, всем дать монетку нельзя, ведь основная масса людей голосуют оффлайн.


      1. Black_Spirit
        23.09.2021 10:50

        Это все потому, что полная неразбериха со списками избирателей. Если была бы единая база, а не какие-то простыни списков, то проблемы бы не было. Монетки изначально выпущены всем. Если человек приходит "ножками", то его монетка гасится. Со временем, большинство будет голосовать онлайн.
        Кстати, сейчас же как то проверяют, что человек зарегистрировался на ДЭГ, если он придет на избирательный участок?


    1. ole325
      23.09.2021 10:31
      +1

      банк россии выпускает номерные банкноты, всем раздает, а потом каждый ими голосует, ну или продает за бутылку


      1. Black_Spirit
        23.09.2021 10:52
        +1

        Ну или бутылку раздавать. А голосовать уже пустыми бутылками. Тогда никто свой голос продавать не будет.


      1. DesertFlow
        23.09.2021 15:51
        +1

        Но банк не запоминает какому конкретному человеку он выдал банкноту. А госуслуги запоминают. Нужна тогда возможность пользователям обменяться своими монетками в случайном порядке. Причем обязательно без участия госуслуг, иначе тоже запомнят.


        1. ole325
          23.09.2021 16:00

          Предположу, что разделение вам именную или нет, очень бы обрадовало избирателя, я за монетку, котирую можно отследить на всех этапах, пусть и с потерей тайны голоса, конечно так никогда не будет.

          Нам бы хотя бы до двухпартийности дойти, не понравилось через 4 года (а не 5-6 лет) других.


          1. DesertFlow
            23.09.2021 22:42
            +4

            Да, и это большое противоречие и проблема любого голосования. Если оно технически обезличено, то ничто не мешает вбросить таких обезличенных бюллетеней. А если с потерей тайны голоса, то появляется возможность административного давления. Впрочем, на данном этапе ничто не мешает государству и при не тайном (где можно отследить путь каждого голоса) добавить 15% несуществующих профилей, что в спорных случаях перевернет результаты выборов. Как проверить-то? Тут нужно доверие к органам власти.


            Регулярная сменяемость власти как раз призвана в том числе повышать доверие к властям. Поэтому она должна быть закреплена законодательно. И чтобы нельзя было себе увеличить срок с 4 до 7 лет, общее их число или вообще отменить/обнулиться. Причем это задача общества стойко требовать соблюдения такого правила. А для этого нужно понимать почему это важно, то есть нужно образование и грамотность населения.


            1. PsyHaSTe
              24.09.2021 03:54
              +4

              Регулярная сменяемость власти как раз призвана в том числе повышать доверие к властям.

              Текущая система выборов (бумжаная) не требует доверия к властям. Требуется доверие к наблюдателям, которые в основной массе как раз являются оппозицией. В этом и смысл системы — сдержки и противовесы — выбора организуют власти, а валидируют наблюдатели. Когда мы и проведение и валидацию перекладываем на одни плечи получается пространство для злоупотреблений. Возможно в мире розовых пони и радуг власти с высоким доверием и не будут злоупотреблять такой ситуацией, но кмк даже в оплотах демократии подобная структура не выстоит — она тупо ненадежна. В отличие от сложившеся, где у нас отсутствует конфликт интересов.


              1. Vilgelm
                24.09.2021 20:24
                +1

                Наблюдатели вам никак не помогут если в комиссии решать что-нибудь нахимичить или тем более уровнем выше. Поэтому тут требуется доверие к членам УИК, ТИК и ЦИК, который заведует ГАС Выборы. А для этого все они должны быть независимы от властей.


    1. bars_arseniy
      23.09.2021 10:35
      +1

      Как добиться того, чтобы каждому дали только по одной монетке?
      Как добиться того, чтобы нельзя было сопоставить id монетки c id проголосовавшего?
      Как добиться того, чтобы не было мёртвых душ, которым дадут по монетке и ими проголосуют как надо?
      Как минимум эти вещи не решает ваша идея.


    1. Elordis
      23.09.2021 10:38
      +6

      Так существующая система именно так и работает. Проблема, как и в любом другом блокчейне, не во внутренней математике, а в ее связи с реальным миром.

      Кто выдает "монетки"? Государство. Что мешает государству выдать "монетку" боту-автоголосователю? Ничего. Более того, с теми базами, что есть у государства, легко сделать так, что ведомство "выдающее монетки" ничего и подозревать не будет о том, что она выдана боту, а не реальному человеку.

      Собственно, я бы так и сделал. Это как у фокусников. Важна даже не ловкость рук, а умение отвлечь внимание от ключевого момента фокуса. Вот прямо как в этой статье. Разбираются проблемы системы ДЭГ, что хорошо, правильно и надо. Вот только даже если это все починить, то проблема ботов не уйдет никуда.

      В условиях недоверия государству нет вообще никаких способов обеспечить честность и прозрачность выборов, кроме народной воли выйти на улицы и заявить об этом. Ну, то есть, окей сделали мы даже не блокчекйн, а вот прямо прямо явную открытую табличку в которой есть вообще все данные: место, время, ФИО, голос. А дальше-то что? Кто будет сверять эти данные с реальностью? У нас ведь явка 40%. Добавить 10% ботов сверху и любой (реалистично) нужный результат в кармане.


    1. andy_p
      23.09.2021 10:54
      +1

      Эти монетки тут же монетизируют всякие алкоголезависимые личности.


      1. czz
        25.09.2021 15:13

        Это и будет их политической позицией


    1. LevOrdabesov
      23.09.2021 11:54

      «Куплю ваучер»…


  1. bars_arseniy
    23.09.2021 10:34
    -1

    мимо


  1. aronovp
    23.09.2021 11:44

    Не совсем понятно, почему вас смутил более высокий процент за административного кандидата в выборке без учета переголосовавших. Если избиратель проголосовал за него под давлением на работе, а затем изменил свой выбор дома, то в "неочищенной" выборке у административного кандидата процент должен быть больше. Такое расхождение как раз позволяет оценить размер голосования "под давлением".


    1. uhf
      23.09.2021 19:23
      +3

      Автор имел в виду, что процент вырос после пересчета с учетом переголосовавших (данные ГАС).
      Я взял его документ, формулой выделил цветом тех кандидатов, у которых в неочищенной выборке (данные блокчейна) процент ниже — ими оказались исключительно провластные кандидаты. У всех остальных кандидатов после пересчета процент падает. Удивительное совпадение.


    1. Mad__Max
      23.09.2021 21:00
      +2

      Вы видимо невнимательно читали - как раз дело в том, что % за "административных" кандидатов выше в очищенной выборке (в которой учтен только последний поданный вариант) чем в неочищенной, где просто суммируются все поданные голоса. Как если был за них голосовали именно на "переголосованиях" вместо какого-то другого кандидата за которого изначально подавался голос.

      Поэтому и смутил - что результат противоположный ожидавшемуся (исходя из заявленных целей введения такой возможности).

      Или другими словами расчетный показатель "размер голосования "под давлением" получается отрицательным. Что можно интерпретировать по разному. Например фантастически: административное давление было, но оказывалось оно за условно оппозиционных кандидатов. Или более реалистично: оно оказывалось за "административных кандидатов", но в момент повторного голосования. Это правда если количество "переголосований" ограничено - тогда (зная что это возможно) вполне могли требовать - голосуйте 1й раз сами как хотите, а потом уже "под контролем" покажете как переголосуете за кого надо. Как мера нейтрализации такой вот "защиты от давления" (благо то, что она есть и голос можно поменять всем известно заранее). Ну или еще варианты - "повторно" голосовали уже боты, "переписывая" голоса людей на нужные. И еще несколько возможных вариантов. Кроме базового сценария, который приводился в обоснование необходимости введения этой функции и, который в результате не подтвердился.


  1. strcpy
    23.09.2021 13:13
    +3

    Какая разница как работает электронное голосование? Выборы в РФ имитационные, то есть в результате озвучат любой результат, который им будет нужен, как в Беларуси.


    1. duke_pro
      24.09.2021 23:33

      Всё куда интереснее. Благодаря ДЭГ мы теперь можем с большой точностью узнать результаты голосования без серьёзного влияния фальсификаций (оффлайн)


      1. strcpy
        24.09.2021 23:58
        +1

        Ну нагнали бюджетников, вбросили билютейней, что-то подправили, вы узнали цифры голосования за кандидатов, где оппозиции участие запретили. Что дальше?


  1. rubyrabbit
    23.09.2021 13:41
    +5

    Огромное уважение автору за вложение времени в контроль за использованием технологий в столь хрупком процессе легитимаци через выборы.

    В конце вы исходите из предположения, что переголосования будут осуществляться теми, кто изначально голосовал под давлением, и потому новые голоса будут в пользу оппозиции.

    Но моя гипотеза об атаке на электронного голосование состоит в том, что атакующие как раз переголосвали в пользу административных кандидатов. А именно, использовалось два механизма:
    1. Фейковые аккаунты несуществующих людей + спящие аккаунты подконтрольных реальных людей для голосования.
    2. Переголосование от имени реальных людей, которые изначально голосовали за оппозицию. Блокчейн покажет гражданину, что его голос был учтён (изначальный), но не покажет, что после от его имени было осуществлено переголосование, т.к. никакой публичной связи между двумя голосами нет.

    В этом случае всё расхождение между данными ГАС ВЫБОРЫ и числом выданных бюллетеней следует считать нижней границей вбросов на электронных выборах.


    1. symbix
      23.09.2021 23:03
      +4

      Про мертвые души я в первую очередь подумал. Потому решил проверить.


      На каждом участке был реестр исключённых из списка избирателей в связи с ДЭГ, и весь день до голосования один из ПРГ занимался вычеркиванием из книг («спасибо» тому, кто придумал сортировать реестр исключённых по ФИО, притом что книги отсортированы по адресу). Размер этого реестра опубликован по каждому участку на сайте ГАС Выборы (УИК — Стандартные отчеты — Информация о числе избирателей, включенных в Реестр избирателей, подлежащих исключению из списка избирателей — в связи с подачей заявлений для участия в дистанционном электронном голосовании). При этом на каждый ОИК приходится один электронный участок с номером 5ххх, и первый пункт протокола электронного участка должен более-менее совпадать с суммой размеров реестров исключённых по каждому УИКу округа.


      Я выборочно сравнил, верны ли по нашему округу указанные на этих страницах числа (опросом ПРГ/ПСГ) (ну и свои данные тоже сравнил) — все сошлось. Потом распарсил эти страницы по всем УИКам округа (спасибо ЦИК за капчу, пришлось запастись пачкой проксей; ну хотя бы обфускации на этих страницах не было), просуммировал и сравнил. К моему удивлению, расхождение было небольшим и в другую сторону.


      Так что склоняюсь к тому, что мертвых душ особо не было, и основной вклад внесли вбросы либо голосований, либо переголосований от лица реальных избирателей (вероятно, большинство из которых записали на ДЭГ добровольно-принудительно).


      1. K10
        24.09.2021 06:59
        +2

        А не моли переголосовать за проголосовавшего без его ведома?


        1. symbix
          24.09.2021 07:10
          +3

          Могли, и это одна из базовых гипотез (я, наверное, плохо сформулировал, но в последнем абзаце в том числе об этом и пишу).


          Более того, информация о переголосованиях есть только в приватном блокчейне и не публикуется, что, конечно, усиливает подозрения.


      1. symbix
        27.09.2021 05:39
        +1

        Оказалось, что были. Но раз циферки совпадают, — вывод простой, мертвые души были и в списках избирателей на участках!


        Видимо, их приписывали в квартиры тем, кто всей семьей записался на ДЭГ — это ведь совершенно логично: вот придете вы на участок, начнете ставить подпись в книге — и увидите, что в соседней строчке в вашей квартире проживает Иван Петрович Сидоров, голосующий электронно, и устроите скандал. А если вы записались на ДЭГ, то не придете и не увидите.


        И вот как я это как наблюдатель должен проверить? Откуда мне знать, кто в каких квартирах проживает? :/


        1. Am0ralist
          27.09.2021 11:46

          Видимо, их приписывали в квартиры тем, кто всей семьей записался на ДЭГ — это ведь совершенно логично: вот придете вы на участок, начнете ставить подпись в книге — и увидите, что в соседней строчке в вашей квартире проживает Иван Петрович Сидоров, голосующий электронно, и устроите скандал. А если вы записались на ДЭГ, то не придете и не увидите.
          Вот только те, кто голосует путём прикрепления к участку вообще в другой книге и в той же мск и области их с десяток другой миллионов.
          что вы там увидите в этой книге?


          1. symbix
            27.09.2021 13:22

            Да, тем, кто открепился на другой участок, тоже могли "соседей вселить".


            1. Am0ralist
              27.09.2021 14:09
              +2

              Ещё раз, зачем кому-то куда-то приписывать, когда все приписаные попадают в отдельную книжечку и росписи ставят в неё?
              Я пришёл, подошёл к отдельному столу, где лежала отдельная книжка со всеми прикрепившимися к этому участку. Всё. Не нужно ни подтверждения адреса, ничего. Меня могли на все участки Москвы добавить в данные книжечки, чтоб я за три дня прошёлся по ним изредка меня одежду, ага.
              Как понял, я так только за местную думу голосовать не мог, а за гос — мне выдали два бланка.
              Вот серьёзно, вы какие-то сложные алгоритмы выдумываете, блин…


              1. symbix
                27.09.2021 14:39

                А. Так я вообще не про это, вы описываете обычную "карусель" (я про нее ничего не утверждал, конечно, такое могло иметь место), а я говорю про мертвых душ, которые нужны только для того, чтобы от их имени проголосовать электронно.


                В списках на участках они нужны для того, чтобы суммарное по всем участкам округа количество вычеркнутых в связи с ДЭГ совпало с количеством зарегистрированных на электронном голосовании. И это вообще первое, что я проверил. Потому и утверждал (ошибочно), что мертвых душ вроде как не должно быть. А они есть, потому что их, блин, внаглую прямо в книги вписали. Вот так они меня и обманули (ненадолго, правда).


                А алгоритмы я не выдумываю, их выдумывают те, кто фальсифицирует выборы, я лишь озвучиваю свои обоснованные предположения о том, как они это сделали. Аномальные блоки избирателей в блокчейне и я сам посчитал, и другими уже показаны несколько раз (что говорит о "ботах"), а иного объяснения, как при этом сошлись суммы вычеркнутых с обычных участков и записанных на ДЭГ, как-то не видно.


      1. solntsepek
        27.09.2021 14:19
        +1

        Я был на этих выборах ПСГ от одномандатника Парфёнова из КПРФ и присутствовал на офлайновом участке у себя на районе в субботу (18 сентября 2021) и воскресенье (19).

        Видел своими глазами вычеркнутых из списков (с формулировкой типа "принял участие в ДЭГ").

        И слышал очень много жалоб о том, что онлайн не работал - оба дня, в разное время суток.

        Так что вполне допускаю ещё и такой вариант что голосование выключили и "проголосвали" сами.

        Плюс ещё момент с невозможностью проверки/пересчёта комиссиями под наблюдением наблюдателей.

        Это прямое нарушение основных законов. Памфилова вообще на все вопросы отвечала, что не знает и не понимает (т.е. не может ни проверить, ни пересчитать, ни доказать ничего), но уверена, что "Лаборатория Касперского - хорошие ребята" В то время как эта лаборатория - иностранная (крупнейший офис в США, юрисдикция Британская или БВИ) компания, от которой в РФ только АО с уставным капиталом в 100 тыс. руб.

        Конечно результаты недостоверны и всё ДЭГ представляет из себя фальсификацию. Результаты ДЭГ конечно должны быть аннулированы, несмотря на возможность "очистки" от вбросов и откровенно недостоверных голосов.


  1. YNK
    23.09.2021 14:11

    В расшифровке пропущен пункт "отказ избирателЮ В онлайн-голосованиИ". К примеру, мной заявлено участие в ДЭГ 31 августа, а отказ получен 16 сентября в 23-20 с формулировкой: " По Вашему заявлению на Портале государственных и муниципальных услуг (функций) города Москвы произошли изменения 16.09.2021 в 21:14:43.

    Номер заявления: 0001-9000003-087901-1070188/21.

    Новый статус заявления: Отказ в предоставлении услуги"

    После обращения к организаторам в чем причина отказа получен маловразумительный ответ:

    "В соответствии с Порядком дистанционного электронного голосования на выборах, назначенных на 19 сентября 2021 года от 20 июля 2021 г. № 26/225-8, данные заявления на участие должны быть сопоставлены с различными реестрами ведомственных информационных систем, которые участвуют в проверке данных заявителя и организации процесса голосования.

    Если хотя бы в одном реестре данные заявителя отличаются от указанных в заявлении, оно отклоняется системой.

    К сожалению, данные, указанные в Вашем заявлении, не полностью совпали с данными ведомственных информационных систем. Обращаем ваше внимание, что в службу технической поддержки дистанционного электронного голосования не поступает информация только о результате рассмотрения заявления.

    Вопросы, которые касаются корректировки данных пользователей в личных кабинетах на портале Московских государственных услуг mos.ru не входят в компетенцию службы технической поддержки дистанционного электронного голосования.".

    Вот это вообще мило с их стороны, тех поддержка ДЭГ организована порталом mos.ru и обращаться за проверкой данных в неведомых мне "ведомственных информационных системах" предлагается в службу технической поддержки портала Московских государственных услуг mos.ru: https://www.mos.ru/feedback/support/ или обратиться по телефону: 8 (495) 539-55-55.

    Что не так в ДЭГ? Человеческий фактор не такой уж человечный. За явные технические косяки отвечать должен кто-то из ДИТ, но они вот со всех сторон огородились отписками.


  1. uhf
    23.09.2021 19:27
    +3

    Спасибо за подробный анализ!
    Судя по вашему документу, после пересчета с учетом переголосовавших, процент вырос только у административных кандидатов.
    Мне кажется, объяснить это как-то еще, кроме как вбросами под видом переголосования, невозможно.


    1. symbix
      23.09.2021 19:31
      +2

      Более того, процент упал в основном у кандидатов УмГ, у остальных более-менее совпадает с бумажным голосованием.


      1. uhf
        23.09.2021 20:06
        -1

        Ну с оффлайном тут наверное не совсем корректно сравнивать. Голосующие за провластных кандидатов могли более охотно использовать ДЭГ, поскольку полностью доверяют ему.
        Протестно настроенные избиратели небезосновательно ожидали от ДЭГ подвоха, поэтому предпочли бумажное голосование.


        1. symbix
          23.09.2021 20:10
          +1

          И так само получилось, что по протестным голосам за, скажем, ЛДПР или СР процент в ЭГ и бумажном примерно совпадает, а за КПРФ почему-то по ЭГ существенно ниже?


          Если бы такое смещение было только по одномандатникам, ещё можно было бы допустить. А так — Не верю.


          1. uhf
            23.09.2021 20:25
            +1

            Кроме протестных, у ЛДПР есть и свои избиратели, как и у КПРФ, которые про УГ и «плохое ДЭГ» ничего не слышали. В то же время УГ чаще рекомендовало кандидатов КПРФ, чем других партий. Какие-то партии больше агитировали пользоваться ДЭГ, какие-то меньше.
            В общем я хочу сказать, что расхождение оффлайн и онлайн голосования (если оно есть) не считаю прямым доказательством чего-либо.


            1. symbix
              23.09.2021 20:54
              +3

              Кандидатов — да, а по партиям УмГ советовало голосовать за любую парламентскую партию, кроме Едра.


              Прямым доказательством, конечно, не является. Но косвенных свидетельств предостаточно. Прямым доказательством отсутствия фальсификаций был бы подсчёт с прямым участием наблюдателей и ПСГ (например, показать все алгоритмы, в том числе и так тщательно скрываемый точный алгоритм переголосования с группировкой, и дать ПСГ убедиться в правильности подсчета самостоятельно на копии блокчейна, а заодно и перед анонимизацией проверить списки избирателей), но этого-то как раз упорно не давали и не дают сделать. При этом право ПСГ смотреть списки избирателей и убеждаться в правильности подсчета голосов четко прописано в 67-ФЗ, и уже само невыполнение этих требований — законное основание для отмены результатов на электронных участках.


              1. uhf
                23.09.2021 21:34
                +1

                Да, это понятно. Результаты голосования должны подсчитываться исключительно на публичных данных. Вроде как изначально так и задумывалось, но потом добавили «переголосование» с приватным блокчейном, и это сломало всю безопасность. Я уверен, что этот приватный блокчейн не будет обнародован, потому что тогда вскроется, кто голосовал повторно, и за какого кандидата.
                Кроме того, есть все основания полагать, что «переголосование» нарушает тайну голосования, а значит, противоречит Конституции.


                1. Am0ralist
                  24.09.2021 16:16

                  Кроме того, есть все основания полагать, что «переголосование» нарушает тайну голосования, а значит, противоречит Конституции.
                  А тут либо вся система нарушает тайну голосования, либо переголосование так же не нарушит как и исходная. То есть в духе, что и сейчас имея полный доступ к обеим системам одновременно можно объединить данные и получить результаты за каждого. А не имея — не получишь.
                  Поэтому от того, что из одной системы в другую перейдёт список «недействительных» или «отозванных» выданных исходно бюллетеней — не сделает систему более нарушающей, чем исходная. Та система, которая данный список отсылает — не видит результат итоговый. Та, которая получает — не видит, кто голосовал.


                  1. uhf
                    24.09.2021 17:00
                    +1

                    Гипотетически, систему без переголосований можно реализовать так, что выдача электронного бюллетеня не логируется, а значит, его нельзя сопоставить с избирателем. Это можно посмотреть только в коде. ФСБ проверит код, выдаст сертификат, и мы не можем ничего возразить.
                    Необходимость учета переголосований вынуждает хранить связь бюллетеня с избирателем, без этого никак не определить голоса одного человека. Т.е. тайна голосования гарантированно нарушается, мы можем это утверждать даже без анализа кода. Причем нарушается она не в тот момент, когда обнародованы какие-либо приватные данные — а в тот, когда данные о связи бюллетеня с избирателем вообще были сохранены.


                    1. Am0ralist
                      24.09.2021 18:02

                      Так стоп, в первой системе данные могут складываться по хешам с солью избирателя и стирать связку с старым бюллетенем и помечать как «брак» при выдаче нового. А по истечению времени стирать уже без пометки брака для всех валидных. После окончания процесса выгружать список только забракованных. ФСБ так же проверит код, выдаст сертификат, опломбирует чёрный ящик, а ключ торжественно засунет в сейф у всех на глазах.
                      В любом случае, вроде как связка избиратель-бюллетень в системе будет какое-то время, будь то миллисекунды или часы.


      1. DesertFlow
        23.09.2021 22:50
        +5

        Более того, процент упал в основном у кандидатов УмГ, у остальных более-менее совпадает с бумажным голосованием.

        Проще говоря, по официальным данным большое количество людей проголосовало за кандидатов Умного голосования, а потом переголосовали в пользу кандидатов от ЕР. Такое невозможно в принципе.


  1. dmitry502
    23.09.2021 20:59
    +1

    Интересно, а на форме голосования была яндекс.метрика?


  1. oledjo
    24.09.2021 11:23
    +7

    Большое спасибо автору, я сам прошел похожий путь анализа за эти дни, поэтому интересно было почитать. Есть несколько дополнительных мыслей:

    1. Почему везде пишут про явку на электронном голосовании в 96%, считая все голоса и не учитывая переголосования. Везде говорят про 290К переголосовавших, с учетом них явка равна 1943К - 290К / 2021K ≈ 81%.

    2. В блокчейне среди транзакций о получении бюллетеней все voter_id уникальны, за исключением случаев, когда произошла ошибка. Уникальных voter_id 1943K (см. картинку). Это значит, что столько уникальных пользователей получило бюллетени и нет ни одного повторения. При учете, что все переголосования хранятся в том же блокчейне, как это может быть возможно? Причем все voter_id из списка голосующих в транзакции начала голосования, это значит, что переголосующим каким-то образом выдавались уникальные voter_id других избирателей.

    3. Автор пишет: "При этом отмечу, что внутри транзакции “Приём бюллетеня” лежит только сам голос, привязки к тому voter_id, который получил этот бюллетень, нет. Таким образом сохраняется тайна голосования. Непонятно, как проголосовал (по крайней мере по публичным данным) каждый из voter_id."

      Это не совсем так, какой-то внутренний алгоритм объединения выдачи бюллетеня и расшифровки все-таки есть, это можно увидеть при поиске транзакций по хэшу на observer.mos.ru, где одновременно находятся транзакции выдачи и расшифровки бюллетеня и в одной можно посмотреть voter_id, а в другой decrypted_choice (см. картинку).

    4. Еще удивляет, что перед публикацией данных переголосования техническая команда говорит, что ей нужно обеспечить анонимность данных избирателей и произвести для этого какие-то дополнительные действия. А это значит, что для них эти данные не анонимны, что нарушает избирательное законодательство.


    1. oledjo
      24.09.2021 13:00
      +2

      Пункт 3 беру назад, в транзакциях расшифровке и приеме бюллетеня действительно нет voter_id, он только в транзакции выдачи.

      Тем временем, нашел еще одну странность, в блокчейне, который сейчас выложен на observer.mos.ru расшифровано 1.3 миллиона транзакций, как я понимаю оставшиеся это как раз, кто переголосовывал, так как изначально штаб называл эту цифру. Если разбить нерасшифрованные (начальный голос + переголосование разнесенные во времени) транзакции по часам, то появляется интересная картина, во 19 из 50 часов голосований количество голосов кратно тысячи(!!!). Это можно было бы объяснить особенностями процесса расшифрования, который нам неизвестен, а без этих деталей очень похоже на автоматические подачи/изменения голосов.

      select date_trunc('hour', trans.datetime), count(*) from transactions trans left join decrypted_ballots ballot on trans.hash = ballot.store_tx_hash where trans.method_id=6 and ballot.decrypt_tx_hash is null and trans.status#>>'{type}' = 'success' group by date_trunc('hour', trans.datetime);


      1. oledjo
        24.09.2021 16:14
        +1

        По последнему комментарию отбой. Похоже, что количество транзакций кратно блоку в 2000 записей, когда разбил поминутно, это стало более заметно. Тут просто удачно умещаются блоки в час, поэтому их количество кратно 2К.


    1. Am0ralist
      24.09.2021 16:28
      +2

      Еще удивляет, что перед публикацией данных переголосования техническая команда говорит, что ей нужно обеспечить анонимность данных избирателей и произвести для этого какие-то дополнительные действия. А это значит, что для них эти данные не анонимны, что нарушает избирательное законодательство.
      Так ведь изначально же понятно, что если один человек будет иметь полный доступ к данным обеих независимых систем, то голоса вычисляемые. Подразумевается, что обе системы независимо управляются.
      Это как принцип разделения властей, ага.
      В этом случае, первая система во вторую может так же передавать обезличенные данные, не раскрывая кто переголосовывал, но маркируя какие нужно забраковать, а вторая не отсылает в первую.
      А так-то получится, что и КОИБ может где-т описать время, когда считывает голос, а видеонаблюдение может быть подключено к системе распознавания людей и деанонимизирует меня…


      1. duke_pro
        24.09.2021 23:44

        А так-то получится, что и КОИБ может где-т описать время, когда считывает голос, а видеонаблюдение может быть подключено к системе распознавания людей и деанонимизирует меня…

        КОИБов бывает больше одного, но в целом в непиковые часы должно весьма точно получаться


        1. Am0ralist
          27.09.2021 11:45
          +1

          а какая разница, если оба будут писать, а по камере можно вычислить, к какому я подхожу?


      1. Contrabondo
        24.09.2021 22:17
        +4

        Да, про клиентов для ДЭГ забыл упомянуть:

        1. Закрытое приложение для Android

        2. Закрытое приложение для iOS

        3. Яндекс браузер с какими то классными расширениями.

        Каждый из них может деанонить вас и ваш голос в реальном времени)

        В итоге получили систему, которая:

        1. Знает за кого вы проголосовали

        2. Никто не может проверить, за кого отдан ваш голос (даже вы)

        3. Ваш голос может быть передан другому кандидату, и никто не сможет это проверить (даже вы)

        4. Все результаты могут быть заменены на другие при необходимости.


  1. Contrabondo
    24.09.2021 17:37
    +1

    Вместо того, чтобы взять за пример нормальные проверенные всем миром технологии - реализовать какой то очередной кривой велосипед.

    Можно было взять за пример реальный блокчейн с подтвержденной анонимностью типа Monero, допилить до транзакций с целыми у.е., убрать комиссии и оставить только предгенерацию валюты - выдать всем по 1 у.е. чтобы каждый мог отправить на публичный "кошелек" кандидатов (и только на них) свой 1 голос, и ещё что-нибудь придумать. Но нет.


  1. anonymous
    00.00.0000 00:00


  1. anonymous
    00.00.0000 00:00


  1. avshukan
    24.09.2021 18:16
    +1

    Однозначно плюс в карму!
    Вы делаете хорошее дело


  1. askv
    25.09.2021 18:44

    деревня где скучал евгений
    была прекрасный уголок
    и ни блокчейн был не помехой

    ни лог


  1. oledjo
    25.09.2021 22:23
    +6

    Штаб Брюхановой опередил меня немного https://www.youtube.com/watch?v=SFogBbUGLk4&t=17s&ab_channel=%D0%9C%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%9A%D0%B0%D1%86 , но я сегодня тоже заметил эту аномалию. Я упорядочил всех голосующих из списка избирателей (транзакции method_id = 1) и разбил на 1000, а потом смотрел сколько человек из каждой тысячи голосовали в каждый слот из 10 минут. Если количество голосующих почти во всех тысячах колеблется вокруг среднего значения, то ближе к концу обнаруживается явный провал, причем практически в каждом 10-ти минутном слоте. Вот лишь несколько примеров:

    Надеюсь, у специалистов ДИТ есть этому какое-то объяснение.


    1. vis_inet
      26.09.2021 09:25
      +3

      Не думаю, что у них есть желание отвечать на вопросы публики.


    1. Sergunka
      27.09.2021 02:23

      Да я полагаю если у них логи интегрированы в тот же Splunk все и так прозрачно и понятно кто там вбрасывал и как долго.


  1. Sergunka
    27.09.2021 02:20
    +3

     Я почитал и посмотрел рассуждения по поводу голосования и заметил некую занятную особенность в обсуждении. Коллеги очень сильно уперлись в блокчейн и его расшифровку к моему сожалению этот путь в никуда так как он вряд ли объясняет как происходили сами вбросы показанные на многочисленных графиках. Из моего древнего опыта работы с очень уважаемым агенством США Федеральный Резерв как человека любопытного всегда интересовал вопрос, "а как можно и так чтоб нам за это ничего не было?!" (с)

    Так вот десять лет назад назрел вопрос как подсоединить приложение нашего стартапа к SSO Federal Reserve System (FRS). На тот момент мы использовали Federated ID OpenAM.

    При чтении многочисленных соображений по поводу архитектуры ДЭГ, то вполне разумно предположить, что там стоит Federated identity, который и проверяет аутентификацию голосующего.

    После чего создать нового юзера на Federated ID это не вопрос либо скриптом от Иванов0000001 до Иванов1000000 либо руками, что тоже в общем не обременительно. К примеру тот же OpenAM это позволяет легко сделать и более того это отобразится исключительно в логах только OpenAM если там кластер, то даже просто после работы сервер можно убить и логи на нем почистить.

    Судя по динамики вбросов и обеда там дальше уже сидели люди и вводили руками голосование.

    В пользу такого метода говорит еще то, что невозможно проверить кто голосовал ака анонимность голосования по ДЭГ.

    Понятно это исключительно мое предположение, но тем не менее версия вполне рабочая.


    1. Sergunka
      27.09.2021 03:19

      https://www.youtube.com/watch?v=SFogBbUGLk4

      Анастасия Брюханова дает пояснение как раз по зарегистрированным ботам и деталям переголосования. Надо отдать должное скриптами походу работали.


  1. kemsky
    27.09.2021 03:29
    +5

    По-моему, очевидно, что если система полностью непрозрачна, то вбрасывать в нее можно как угодно. Махинаторы плохо владеют статистикой, но это компенсируется таким же незнанием рядовых обывателей и как результат не вызывает возмущения...


    1. Methos
      27.09.2021 10:45
      +2

      С шулером играть по его правилам на его территории - бессмысленное занятие.


      1. MaximRV
        28.09.2021 10:34
        +2

        Не то чтобы совсем бессмысленное. Правила и приёмы игру у шулеров тоже есть. и изучение их тоже бывает полезно. В суде...


  1. MaximRV
    28.09.2021 07:33
    +1

    Личная соль

    Добавление собственных символов (личной соли) даёт возможность контролировать правильность голосования своего бюллетеня без раскрытия его полного идентификатора третьей стороне. Простой рецепт для публичной базы. Приватная база в которой бюллетени без личной соли - только под присмотр наблюдателей, без всяких отключений и отзывов сертификатов. Блокчейн нахрен не нужен - просто копирование базы каждые 15 минут произвольными наблюдателями в которой содержится контрольная сумма (хеш) базы приватной - чтобы её не пробовали изменить (подогнать под хеш трудновато). блокчейн - это просто вариант СУБД, не более. и для данного применения он и не нужен. можно обойтись традиционными инструментами.


    1. MaximRV
      28.09.2021 07:51

      Более того, можно предусмотреть возможность переголосования только после подтверждения своей Прошлой личной соли (это против переголосования за уже проголосовавших людей "хакерами" от "работодателя").


      1. S_V
        29.09.2021 00:38

        Система переголосования исключает анонимность голосования так как даже хеш надо будет хранить, то по хешу можно будет найти кто голосовал и как.


        1. MaximRV
          29.09.2021 04:34

          Да, и это будет доступно либо в открытой базе но только самому голосующему, или в приватной базе, но наблюдателям (в бумажном голосовании они и так видят списки избирателей)


    1. symbix
      28.09.2021 09:11
      +3

      Проблему с вбросом "ботами" не решает никакая криптография. Как тут верно уже говорили — без явки 100% этот вопрос техническими средствами не решается.


      1. MaximRV
        28.09.2021 10:34

        Ну так это внешний так сказать фактор. Как и то, что можно голосовать без смс подтверждения. Это тоже обеспечивается внешними к СУБД условиями. Я лишь описал то, как можно в СУБД организовать контроль со стороны избирателей своих собственных бюллетеней. И Со стороны наблюдателей приватной базы, где информация по бюллетеням и их голосованию более открыта так сказать, без соли.
        То, что СУБД можно организовать на блокчейне это уже другой вопрос. Пусть будет на блокчейне. Тогда Хеш приватной базы можно будет сохранять в публичной и тем самым "контролировать" неизменность данных в приватной базе. Но от вбросов и левых переголосований это не защитит. Это чисто защита ядра так сказать, остальное обвязка технологически-организационная. И это большая проблема и есть.
        Просто Венедиктов говорил - дайте быстрый механизм подсчёта голосов с учётом переголосований - вот его я и предложил. Использовать личную соль для публичной базы и приватную базу без соли. Так чтобы данные из приватной базы были доступны сразу после голосования, Но под надзором наблюдателей. Наблюдатели могут проконтролировать правильность подсчёта голосов и сверить хеши приватной базы с сохранёнными хешами в публичной базе.


        1. symbix
          28.09.2021 11:03
          +1

          Ох, если исходить из того, что говорит Венедиктов...


          Я, если честно, вообще не понимаю, что мешало сделать выгрузку дешифрованных бюллетеней вместе с group_id в тот же Постгрес, а потом пройтись window-функцией. Было бы намного быстрее, чем дрючить блокчейн.


          Что-то мне подсказывает, что причина задержки не только в подсчете переголосований :)


  1. merinoff
    29.09.2021 16:38

    Не очень есть время читать все комменты, но до определенного момента не видел такого предположения. Простите, если дубликат.
    Вот разбиение по метод айди:

    #  method_id |  count
    # -----------+---------
    #          0 |       1
    #          1 |   20148
    #          2 |       2
    #          4 | 2187955
    #          5 | 2116885
    #          6 | 2116884
    #          7 |       9
    #          8 |       1
    #          9 | 1775947

    Если гросс "прием бюллетеня" - "расшифровка" = 340937. О 300к тысячах переголосований говорил ААВ. Возможно, ненужные голоса сразу выбрасывались. Правда, там звучали еще 600к... но поскольку за неделю технических комментариев от авторов не поступало, гадаем на кофейной гуще.