Майоритарная система выборов
Программист Илья Сухоруков наблюдал за электронным голосованием. Он рассказал Юлии Латыниной о подделках блокчейна, вахтерах, майорах и сертификатах ФСБ
По итогам «бумажного» голосования кандидаты от «умного голосования» побеждали ЕР в Москве с разгромным счетом. По итогам электронного голосования все они вдруг проиграли. При этом результаты ЭГ были объявлены не через час, как раньше, а много позже.
Самое интересное происходило в участковых комиссиях на электронных избирательных участках. Там тоже были наблюдатели, но в большинстве своем технически неподкованные для такой работы. Правда, были и исключения. И вот таким «шибко умным» запретили доступ к ноде наблюдателя (то есть компьютеру, подключенному к блокчейн-сети, с которого можно контролировать происходящее на электронном участке). А когда допустили, выяснилось, что она не работает, потому что у нее больше нет сертификата безопасности, выдаваемого ФСБ РФ. Его действие истекло в 20:00 19 сентября, то есть сразу после окончания выборов. О том, что происходило в электронном УИКе в ту ночь, Юлия Латынина поговорила с Ильей Сухоруковым, профессиональным программистом, который был наблюдателем от Анастасии Брюхановой на электронном УИКе в ту ночь и который первый поднял тревогу и пытался прорваться к ноде.
— Результаты электронного голосования подделаны?
— Мы еще не знаем. У нас есть некоторые догадки, с которыми мы пока разбираемся.
— Ок. Тогда пойдем по порядку. Что это за история с сертификатами ФСБ? Желательно на пальцах.
— На пальцах. Все действия между компьютерами делаются с помощью запросов. Каждый такой запрос подписывается сертификатом. Ну как в здании на входе стоит человек, и ты ему показываешь паспорт. Точно так же каждый запрос от компа к компу подписывается сертификатом.
Вообще, мне придумалась вот какая аналогия. Блокчейн — это как химический процесс, который мы невооруженным глазом не можем увидеть, но можем кое-что увидеть в микроскоп. В нашем случае было два микроскопа. Один — с YouTube-трансляцией в интернет. Это сайт observer.mos.ru, сделанный так, чтобы любой мог с него наблюдать или скачивать информацию.
Он всю пятницу показывал не то, что на самом деле. Он показывал явку по округам неверную — явка там остановилась в 12 дня.
И был второй микроскоп мощный — он называется нода наблюдателя. Мы, наблюдатели, с его помощью могли смотреть, что все идет корректно. И мы увидели, что явка растет, и это просто баг observer.mos.ru. То есть мы увидели, что это просто у разработчиков руки кривые, и не стали поднимать скандал. К сожалению, я не большой специалист именно по блокчейну, и поэтому, когда я смотрел на ноду во время голосования, я не мог разобрать: это мне химический процесс показывают или я через микроскоп смотрю на маленький мониторчик, в котором происходит имитационный процесс.
— Стоп. А что во время голосования показывает нода наблюдателя?
— Она показывает количество проголосовавших по округам и некоторую другую информацию. Там некоторые вещи можно проверить. Например, у каждого пользователя есть ID, который доступен только самому пользователю, и по ID, если бы он мне его сказал, можно было бы посмотреть, проголосовал он или нет.
— И это тогда доказало бы наличие или отсутствие фальсификаций?
— Нет, к сожалению. Это все равно мог бы быть мониторчик. Но можно было проверить конфигурацию консенсуса, информацию о транзакции, это мне уже потом сказали. Мы тогда этим не обеспокоились.
— Почему?
— Потому что еще тогда не думали о возможности фальсификаций. И даже программистов на участке не было. Была наблюдатель с ПРГ (право решающего голоса. — Ю. Л.) от КПРФ Анна Лобонок, координатор по Хорошевскому району. Вот ее послали туда как программиста. И был еще наблюдатель с ПСГ (право совещательного голоса. — Ю. Л.) от Махницкого, но он совсем не программист. И я чуть-чуть больше их понимал. Но я веб-программист. Я не по блокчейну.
— И вот наступает 8 часов вечера.
— Как я уже упоминал, у меня в целом было доверие к электронному голосованию, потому что люди, которые специалисты, говорили, что все было честно. Я особо не волновался. И в 9 вечера не волновался. В 9:30 появились первые результаты по МГД (Московской городской думе. — Ю. Л.). А у нас ничего нет. Мы ждем. Тут я вижу, что есть результаты по МГД. Начал разбираться, откуда результаты. Оказывается, на observer.mos.ru появился блок.
А блокчейн — ну, упрощенно говоря, считайте, что это эксель-таблица, в которой каждая строчка подтверждает, что все предыдущие строчки не менялись. Блокчейн используется, чтобы всю цепочку нельзя было поменять. И вот в этой таблице на observer.mos.ru появляется новая строчка — результаты выборов по МГД, и я вижу, что Карманов (кандидат в Мосгордуму. — Ю. Л.) проиграл. 10 тысяч голосов отрыв в электронке не в его сторону. А потом я смотрю, что сумма голосов — 24 тысячи человек. А зарегистировались 37 тысяч в округе и явка 95 процентов.
— А как это может быть? Это же блокчейн.
— У меня возник тот же вопрос. Я начал бегать везде. Забежал в ноду наблюдателя, и председатель УИКа — Юрий Константинович Павлов — начал на меня орать: «Выйдите!» Я ему сдуру подчинился. Я все еще думал, что выборы будут более или менее честные.
Тут надо пояснить, что для выборов в Госдуме, МГД и муниципальных созданы три электронных УИКа, и все сидят в трех соседних помещениях. В одном месте. Я был ПСГ от Брюхановой и Карманова (кандидат в Мосгордуму от Каца. — Ю. Л.). Я подошел к председателю УИК МГД и говорю: «Обеспечьте мне доступ к ноде наблюдателя». Тот: «Ну пойдемте». А нода наблюдателя — в смежном помещении с УИКа Госдумы. Мы идем с нашим председателем комиссии по выборам в МГД, а председатель УИКа по выборам в Госдуму говорит: «Не пускайте его». Хотя УИКи и разные, но моя председатель воспринимала его как главного.
Вот тут была моя ошибка: надо было настоять. Но у меня все еще была уверенность, что это просто синдром вахтера включился у председателя УИКа. И я не отрефлексировал. Тем более, подумал я, что вся база была доступна в обсервере. Задним числом ничего поменять не удалось бы. Мы сейчас находим тех людей, которые скачивали блокчейн в течение дня, и пока он одинаковый. Так как люди его постоянно скачивают — его подменить сложно. Тогда я думал, что если бы я прошел в ноду, я бы увидел то же самое, что на observer.mos.ru.
— А сейчас так уже не думаете?
— Не знаю. Не уверен. В полдесятого появляются результаты по МГД. И они явно не сходятся по количеству голосов. Я начинаю спрашивать: «Как так?» И в 11 происходит пресс-конференция главы <Общественного штаба по наблюдению за выборами в Москве> Венедиктова и <начальника Управления по совершенствованию территориального управления и развитию смарт-проектов правительства Москвы> Костырко о том, что выложены результаты только по тем, кто проголосовал один раз. А есть, мол, еще те, кто переголосовывал.
— И тут-то вы поняли, что беда?
— Нет! У меня было впечатление, что базу людей, менявших голос, они ее просто продолбали. И что голосование более или менее честное. И в час ночи я нахожу Венедиктова и прошу обеспечить мне доступ в ноду. Венедиктов зовет Массуха (глава штаба для наблюдения за ходом электронного голосования в Москве. — Ред.). Тот меня сопровождает в ноду, и там случилась ключевая вещь — нам обеспечили доступ.
И мы начали осуществлять запросы. И на запросы система не отвечает. Запрос осуществляется через Google Chrome. Я говорю: «Давайте зайдем в панель разработчика, где можно посмотреть на эти запросы чуть более расширенно».
— Что значит — более расширенно?
— Если вы обычный пользователь, вы нажимаете кнопку, и осуществляется запрос, но не понимаете, как он идет, вы только видите, загрузился сайт или нет. А с панелью разработчика вы можете понять, кому был сделан запрос и какой был ответ. Панель разработчика на сервер никак не влияет. Сервер вообще не знает: открыта эта панель или нет. И мне программист говорит: «Не могу. Настройки безопасности».
То есть он говорит чушь, и я понимаю, что он говорит чушь, и он знает, что я это понимаю. Но говорит.
Он открыл панель разработчика и говорит: «Я не буду делать запрос, потому что безопасность». Я говорю: «Делай». Он нажал кнопочку, отправил запрос с открытой панелью разработчика.
— И?
— И он говорит: «Не покажу».
— Что происходит дальше?
— Я начинаю скандалить. И тут происходит центральное событие ночи, которое мы не зафиксировали в жалобе. Вот тут наша большая ошибка. В два часа ночи появляется Михаил, сотрудник ДИТа… (Департамента информационных технологий г. Москвы. — Ю. Л.)
— ДИТа? Я говорила с Денисом Шендеровичем. Шендерович сказал, что ему показалось, что этот Михаил был из ФСБ. Такой… подтянутый слишком для программиста.
— ФСБ была потом. Возвращаемся к панели разработчика. Каждый вопрос от компа к компу подписывается сертификатом. И Михаил говорит: «Сертификат ноды истек в 8 вечера».
— Стоп-стоп! Как — восемь вечера? Вы сами сказали, что нода — это микроскоп, с помощью которого вы наблюдаете за процессом. Вот кончились выборы, пошел процесс подсчета, самое оно — и тут у микроскопа захлопнули крышечку?
— Именно. Я спрашиваю, когда будет новый сертификат, чтобы нода заработала? Михаил отвечает: «Этим занимается ФСБ, будет новый сертификат, нода заработает». Мы не написали в этот момент жалобу, мы документально не зафиксировали, что были какие-то сертификаты ФСБ. Тут только наше слово. Но если они будут отрицать, что это было, то, значит, все очень плохо.
— А нафиг вообще ноде — этому микроскопу — сертификат ФСБ? Как-то подозрительно.
— Участие ФСБ здесь абсолютно не нужно. В лучшем случае оно продиктовано тем, что если написано слово «криптография», то ФСБ пытается все подмять под себя. Нам говорят: «Сертификаты будут позже». — «Когда?» — «В течение 10 минут». 10 минут превращаются в час, два, три. Появляются первые электронные результаты по кандидату в Госдуму Брюхановой. Частичные. «В полях» она выигрывала. И, как я говорил, в тот момент я все еще думал, что это процесс не смогли организовать нормально, но посчитают все честно. Есть блокчейн, список поданных бюллетеней — он зафиксирован, и в нем получится найти, где вброс, как он произошел, что с бюллетенями людей, которые проголосовали дважды. То, что количество выданных бюллетеней не равно количеству записей в блокчейне, обнаружилось только вчера вечером. Я (да и вообще никто из независимых наблюдателей, как мне сейчас кажется) не разбирался, как работает система с переголосованием. Я думал, что она «вшита» в блокчейн, а, по имеющейся сейчас информации, она работает независимо от него, и по блокчейну нельзя понять, какие бюллетени должны быть учтены, какие — нет. Ну и я в ужасном уже состоянии был, потому что с 8 утра воскресенья до 9 вечера понедельника я не спал.
— Стоп. Вы сейчас сказали выносящую мозги вещь. Голоса, поданные повторно, — они отдельно от блокчейна?! То есть они построили вокруг этих сокровищ-голосов цифровую крепость, все заминировали, поставили дзоты, цифровые танки, а потом триста тысяч голосов сложили отдельно от крепости в чистом поле, — заходи и бери?
— Да, они отдельно. И Костырко это подтвердил.
— Я говорила с одним из программистов, который сейчас анализирует базу, и он говорит, что видит только миллион триста тысяч проголосовавших избирателей — не два миллиона, как официально сообщается.
— Не знаю. Я следил только за нашим округом. Дальше к половине четвертого утра мы понимаем, что все разбежались. Вообще никого нету. И доступа никто не даст.
Где-то к 8 утра приносят результаты. Кто это сделал, мы не видели. Секретарь начал их печатать. Члены комиссии их подписывают. Ближе к 11 утра были распечатаны все копии. И члены комиссии начали разъезжаться по округам, чтобы там внесли данные в систему ГАС-«Выборы». Я поехал домой, и вдруг в 01:15 мне секретарь пишет: «На два часа назначено новое заседание УИК ДЭГ, будете ли вы присутствовать?» Я развернулся и поехал.
Приезжаю — оказывается, что в 201-м округе они в сумме выданных бюллетеней не учли бюллетени какого-то кандидата, и там было 112 тысяч, а должно быть 113 тысяч.
И они собирают комиссию, чтобы это перезаверить.
— Стоп. Это как может быть, что они кого-то не внесли? Есть электронное голосование. И один компьютер может другому компьютеру все сам переслать. То есть что, списывают данные электронного голосования с экрана и вписывают от руки в бюллетень?
— Ну, есть два объяснения. Или у них руки растут не из того места, и они не написали шаблона, который автоматически генерирует итоговый протокол.
— Или?
— Ну, знаете, как устроен КОИБ? Он печатает сведения об итогах голосования, а утверждает их комиссия. И бывает, что если сведения неправильные, то в этот момент может отключиться свет, КОИБ станет нерабочим, и бюллетени пересчитают от руки. По-правильному. Здесь та же история. Машина может не учесть тонкости момента.
— Как можно фальсифицировать блокчейн?
— Мы сейчас с этим разбираемся.
— Что это за 300 тысяч людей, которые проголосовали повторно? Это они сами проголосовали или это за них переголосовали?
— Не могу ответить. Меня еще вот какой вопрос занимает: все ли люди, зарегистрированные на мос.ру, — живые? Не завели ли за них записи?
— Илья, у меня такой вопрос. Я ни хрена не знаю про блокчейн, кроме того, что это распределенный реестр. То есть правильно ли я понимаю, что вся суть блокчейна в том, что у вас данные хранятся на разных серверах, которые вы не контролируете, и если вы изменили часть этих данных, другие сервера это сразу видят? При этом весь московский блокчейн расположен на 2–4 серверах, которые хранятся в мэрии Москвы и Общественной палаты. То есть это такой же блокчейн, как Дума — парламент? И переписать его можно легко? Объясните для идиотов.
— Смотрите. Блокчейн можете рассматривать как эксель-таблицу. Если, чтобы совсем просто, представьте, у вас есть текст «Войны и мира». И мы в нем каждую букву и знак меняем на цифру. И суммируем их. И у «Войны и мира» будет свое число. У каждой книги будет свое число, и, сравнив эти числа, мы увидим, что это две разные книги.
— Может случиться, что совпадут?
— Да. И поэтому математики придумали, чтобы никогда не совпадало. Вместо числа они придумали хеш — это последовательность из 30 букв и цифр. Это как отпечаток пальца. Если мы встречаем два одинаковых отпечатка пальцев, значит, они принадлежат одному человеку. Хеш — это цифровой отпечаток пальца, который сгенерирован на основании информации в файле. Сумма цифр в «Войне и мире» — это самый простой хеш.
Невозможно найти два разных файла, у которых были бы одинаковые хеши, и невозможно придумать заранее файл, у которого был бы вот такой же хеш.
Это как такая мясорубка-соковыжималка. В один конец засовываешь быка, а из другого конца вылезает маленький кубик из мяса и жил. И на основании этого кубика всегда можно сказать, один и тот же этот бык или другой.
— Но обратно кубик в быка провернуть нельзя?
— Да. Хеш — это ключевая штука для блокчейна. Блокчейн можно воспринимать как таблицу в экселе. И один дополнительный столбец — это хеш всех предыдущих строк. Если мы составим таблицу, у каждого эксель-файла будет хеш. И если мы захотим, чтобы эксель-файл превратился в блокчейн, в самый простой, то мы можем просто добавить новую строчку. Мы смотрим на все предыдущие блоки, берем от них хеш, и хеши всех предыдущих блоков хранятся в новом блоке. В каждом блоке есть информационная часть, и сбоку приписан один хеш от всех предыдущих блоков.
— Правильно ли я поняла, что даже если блокчейн хранится на серверах в одном месте, то переписать его невозможно?
— Возможно, если у других людей нет доступа. Но наш блокчейн выкладывали постоянно во время выборов на обсервер.мос.ру, и задним числом его подменить нельзя.
— Но можно переголосовать или проголосовать за несуществующих людей?
— Это к блокчейну не имеет отношения; выдачей бюллетеней занимается мос.ру.
— Илья, в электронное голосование в Москве записались без малого два миллиона. Правильно я понимаю, что вы оказались единственным наблюдателем в электронном УИКе, который что-то смыслил в программировании? Что если бы не вы, то мы бы ничего вот про это не знали: про сертификат безопасности ноды, который истек ровно в 8 вечера, про ФСБ? Неужели там других программистов не было?
— Там был еще один человек, который больше меня разбирался, но он был робок. Программисты вообще нелюдимые. Я только потом понял, что он настоящий наблюдатель. И независимый. Но ему было очень некомфортно.
— Почему вас было так мало? Не думали о возможности фальсификаций?
— Да. Не думали. Я бы вот еще какую важную вещь добавил. Каждый блок — ну, строчка в экселе — все выкладывалось онлайн в течение трех дней в зашифрованном виде. И была система с ключами шифрования. Ключ, с помощью которого можно зашифровать, сгенерировался в 7 утра, в пятницу, и торжественно разделился. В 8 вечера, в воскресенье, он торжественно соединился. В течение всех трех дней голосования бюллетени зашифровывались с помощью этого ключа. В 20.15, в воскресенье, это начали расшифровывать. Блок за блоком. Расшифровка — она длится довольно долго. И, соответственно, observer.mos.ru показывал, что вот мы расшифровали этот блок. И, напоминаю, около 9 я увидел на observer.mos.ru блок с результатами выборов в МГД, который не бился по суммам по 19-му и 37-му округам — там тоже не билась сумма, но там наблюдатель был технически несведущий.
Так вот, если вы зайдете на observer.mos.ru — на результаты выборов в Мосгордуму — и кликнете на последние блоки, то вам покажут, что расшифровка последнего блока остановилась в 12:54 21 сентября, совсем недавно. Это нормально. Последние блоки он расшифровывал, и там был ноль, как и должно было быть.
А если вы зайдете на результаты выборов в Госдуму и кликните на последние блоки, то вам покажут, что расшифровка закончилась в 21:18 19 сентября.
Этого не может быть.
ПРЯМАЯ РЕЧЬ
Алексей Венедиктов мой друг. Он честный и широкий человек. Он первым бросается помочь. Мне омерзительно как те, кому он предоставлял эфиры, слушал и дарил аудиторию, люто травят его. Венедиктов не имеет никакого отношения к манипуляциям. Никакого. И это мы уже выяснили. Позорно кидаться на человека, ладонь которого еще влажна от ваших губ.Дмитрий Муратов, главный редактор «Новой газеты»
ОТ РЕДАКЦИИ
Илья Сухоруков непредвзято и честно выполнил свои гражданские обязательства. Илья, спасибо.