ББ-113: Андрей Бородёнков и Кирилл Поляков (ДИТ) о блокчейне в Москве и электронном голосовании

Андрей Бородёнков и Кирилл Поляков разрабатывают блокчейн-проекты в Департаменте информационных технологий (ДИТ) Москвы. Обсуждаем, зачем госорганам блокчейн, и подробно разбираем нашумевшую систему электронного голосования, использовавшуюся на выборах в Московскую городскую думу в 2019 году.
 
Становитесь патроном и получите ранний доступ к свежим выпускам ББ!
  • 01:30 берегитесь вируса, мойте руки
  • 02:00 новый спонсор — Hodl Hodl! Спасибо!
  • 02:52 как гости пришли в блокчейн и в ДИТ
  • 07:37 зачем нужны закрытые блокчейны?
  • 14:41 блокчейн-проекты правительства Москвы
  • 16:45 «Активный гражданин»: кто формулирует вопросы?
  • 18:50 фермерам раздают места на ярмарках через блокчейн!
  • 27:30 контекст: голосование в Московскую думу (ББ-088)
  • 29:00 зачем нужно электронное голосование?
  • 33:35 международный опыт: Эстония
  • 35:45 выборы слишком рискованный проект для экспериментов?
  • 37:20 как понять, что экперимент удачный?
  • 40:40 было ли техническое задание?
  • 42:25 проект реализовывали 10 команд!
  • 46:48 были ли в команде криптографы?
  • 49:30 bug bounty за 2 млн рублей
  • 51:22 криптограф Пьеррик Годри и короткий ключ шифрования
  • 54:25 зачем вообще шифровать он-чейн? архитектура процесса
  • голосования
  • 58:30 подсчитывались ли голоса на блокчейне?
  • 1:01:10 была ли анонимизация голосов?
  • 1:06:30 кто контролирует узлы блокчейна? были ли ноды
  • наблюдатели?
  • 1:10:35 проверить свой голос тоже нельзя 🙁
  • 1:15:50 недостатки репозитория на Github
  • 1:21:00 ситуация в округе 30: система была недоступна почти 4 часа?
  • 1:26:06 результаты по округу 30 нужно отменить?
  • 1:30:40 эксперимент признан удачным! где будет использоваться дальше?
  • 1:32:30 применение на голосовании по Конституции?
Ссылки:
Подкаст выходит при поддержке HodlHodl. HodlHodl – самый быстрый, безопасный и дешевый способ купить и продать биткоины без верификации. Зарегистрируйтесь и получите скидку на комиссию!
 
Поддержите подкаст!

Расшифровка выпуска

(00:00:00)

Андрей Бородёнков: На реализацию всего проекта у нас было чуть больше 4 месяцев. Принимало участие еще как минимум 10 команд. Мы имплементировали 3 шифрования подряд ключом 256.

Кирилл Поляков: Первый, наверное, госпроект, который имеет хоть какой-то код на GitHub.

Андрей Бородёнков: Система действительно падала. Отказала железяка. Время было несколько меньше 4-х часов.

Сергей Тихомиров: Если это был эксперимент, то кажется ли он вам удачным?

Кирилл Поляков: Мы считаем, что он удачный.

Сергей Тихомиров: Всем привет! С вами подкаст «Базовый Блок», и Сергей Тихомиров у микрофона. Это выпуск №113. И сегодня у нас интересные такие гости, интересная история за этим стоит. Обычно мы гостей находим сами и приглашаем сами, но сегодняшние наши гости к нам постучались самостоятельно и решили к нам прийти в выпуск вот по какой причине. У нас сегодня в гостях представители Департамента информационных технологий города Москвы (сокращённо известный, как ДИТ) – Андрей Бородёнков и Кирилл Поляков. Привет!

Андрей Бородёнков: Привет!

Кирилл Поляков: Привет!

Сергей Тихомиров: Мы, если помните, записывали выпуск в сентябре, когда мы разбирали систему голосования на московских выборах в городскую Думу, которые были построены на технологии блокчейн, и нашли там много всяких вещей, которые нам не понравились. Вот Кирилл и Андрей с нами вышли на связь и решили ответить на вопросы, которые у нас возникли, как люди, которые принимали участие в разработке этой системы и других систем на базе блокчейна внутри Правительства Москвы. 

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

И второе объявление, уже относящееся к нашему подкасту. У нас появился новый спонсор, чему мы крайне рады и благодарны, и этот спонсор – это HodlHodl. HodlHodl – это самый быстрый, безопасный и дешевый способ купить и продать биткоин без верификации. Торговая комиссия не хранит средства пользователей, так как сделки проходят напрямую между покупателем и продавцом через Bitcoin смарт-контракт. На hodlhodl.com вы торгуете, используя любой платежный метод и валюту, совершенно анонимно, не проходя никакой верификации с комиссией в два раза ниже рыночных. HodlHodl доступен на русском языке с русскоязычной поддержкой 24/7. Вы можете зарегистрироваться по специальной ссылке в описании и навсегда получите специальную комиссию. Также вы можете перенести статистику своего профиля с других популярных peer-to-peer площадок и получить месяц бесплатных торгов.

У нас был Максим Кейдун из HodlHodl в одном из наших выпусков (можете также послушать выпуск с ним). Большое спасибо HodlHodl за поддержку «Базового Блока». 

А теперь давайте перейдем к нашей основной теме. Расскажите, пожалуйста, дорогие гости, как вы пришли в Департамент информационных технологий Москвы и почему вы там занимаетесь именно блокчейн-проектом.

Кирилл Поляков: Сергей, давай я расскажу. Меня зовут Кирилл Поляков. Я руковожу продуктом блокчейн в ДИТ. И мой путь начался лет 11 назад. Я работал всю жизнь в IT-компаниях, занимался внедрением разных сложных систем, в том числе и высоконагруженных. В ДИТ направление не сразу появилось блокчейн, то есть изначально я работал в другом продукте, и потребность появилась вместе с бумом интереса к биткоину и к технологии в целом. Изначально строилась работа таким образом: мы выделили какое-то количество проектов внутри Правительства Москвы, а именно которые ведёт ДИТ, и прошли по ним, и спросили: «Какие у вас есть сложности или задачи, которые вы не можете решить текущей архитектурой и текущими каким-то средствами?». И таким образом, мы выделили больше 150 проектов, проработали и в финале оставили порядка 15 проектов, которые интересны нам с точки зрения блокчейн, что блокчейн там добавляет какую-то ценность. В основном ценность, которую мы искали, это добавление прозрачности какому-то закрытому процессу. Поэтому эти 15 проектов, в общем-то, попали в наш пул проектов, и вот в течение уже больше чем двух лет мы их реализуем.

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

Кирилл Поляков: Если кратко, то Департамент – это один из множества департаментов в структуре Правительства Москвы и это такой большой подрядчик по разработке IT-систем и их эксплуатации. В ДИТ работает больше 2500 человек, больше 300 разных информационных систем мы эксплуатируем, для других департаментов они создаются, для собственных нужд они создаются. Вот если кратко, то вот так.

Сергей Тихомиров: То есть вся эта функциональность, когда можно, например, подать документы на получение загранпаспорта или на права, или вот эти все цифровые госуслуги в Москве – это именно ДИТ их реализует, правильно я понимаю?

(00:05:10)

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

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

Кирилл Поляков: Да, всё верно, либо другой департамент.

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

Андрей Бородёнков: Привет! Меня зовут Андрей Бородёнков. Непосредственно в ДИТ я работаю с конца 2016 года. Тогда же я, в 2016 году, узнал про саму технологию блокчейн, точнее я стал с ней знакомиться более плотно, потому что на самом деле здесь у меня история такая забавная, про сам Bitcoin я узнал от своего друга, который начал заниматься этой темой в середине 2009, в конце 2010 года. Он знал, с кем войти в эту историю, но тогда, как, наверное, и большинство людей, которые тогда узнали про Bitcoin, подумал: какая-то это непонятная штука. И назад я вернулся к этой истории только в 2016 году и вернулся с точки зрения именно уже глубокого погружения в блокчейн, в то, как это работает, в то, из чего состоит. И тогда я начал как раз свой путь в ДИТ, приблизительно в это же время, и с тех пор занимаюсь блокчейном в основном, так как ДИТ занимается проектами, которые, как правило, связаны с предоставлением, как ты правильно отметил, неких государственных услуг и предоставлением сервисов, то, как правило, специфика такая, что это мы говорим о закрытых блокчейнах. Поэтому здесь нужно делать поправку на мой бэкграунд, то есть с точки зрения именно реализации проектов я больше заточен под разработку приватных, закрытых блокчейнов. Но тем не менее, конечно же, тема открытых блокчейнов (Bitcoin, Ethereum), она мне близка, и скажем даже более того, мы со своей стороны постоянно стараемся ориентироваться на такие проекты, чтобы не сбивать свой прицел и понимать, как и куда двигаться. Ну, это в двух словах про меня.

Сергей Тихомиров: Отлично. Тогда такой, переходя уже, наверное, к более… не то, чтобы техническим, а скорее таким фундаментальным вещам. Говоря про закрытые и открытые блокчейны в блокчейн-сообществе, скажем так, широко, есть распространенное мнение, что закрытые блокчейны вообще как бы не нужны, что главная инновация блокчейна, если мы говорим про Bitcoin, Ethereum и другие открытые системы, заключается именно в их открытости. И именно если вы работаете над проектами закрытых блокчейнов, вы так не считаете? Что бы вы могли возразить на такое утверждение, что если блокчейн закрытый, то это фактически та же самая база данных?

Андрей Бородёнков: Здесь на самом деле мы можем только согласиться. Мы на самом деле, изначально подходя к проектированию закрытых блокчейнов, всегда держим в уме тот основной постулат, что всё, что можно сделать при помощи блокчейна, можно сделать и без него. Но говоря о проектировании закрытых блокчейнов, есть определенные, скажем так, выгоды, которые мы получаем, которые достигаются при помощи закрытых блокчейнов. Если говорить конкретно про специфику закрытых блокчейнов, то здесь мы… На самом деле к этому мы вернемся чуть-чуть позже, но я уже забегу вперёд про те две основные вещи, которые даёт закрытый блокчейн. Это в первую очередь сохранение изменений статусов какого-либо процесса, и второе направление – это time stamping. То есть это те вещи, которые у закрытого блокчейна получаются лучше, чем у каких-то других систем. Еще раз повторюсь, мы про это, наверное, чуть подробнее поговорим попозже.

Сергей Тихомиров: Мы поговорим попозже более подробно про конкретные детали имплементации, главным образом выборной системы, может быть, каких-то других. Но мне хочется разобраться вот в фундаментальном вопросе, когда ты говоришь, что time stamping и сохранение истории состояния какой-то базы данных. На это вполне можно возразить, что time stamping, в смысле биткоина, работает, потому что никто эти time stamping не может подделать. Если у нас закрытый блокчейн, который находится под контролем какой-то организации, то эти временные метки, которые когда-то были записаны, они также легко могут быть стерты или перезаписаны. Тогда какой смысл организовывать это всё в структуре блокчейна? Можно было просто сделать отдельную таблицу в базе данных, сказать, что мы верим её администраторам, и там записывать всю историю состояния.

Андрей Бородёнков: Абсолютно верно. Здесь я прям с тобой согласен на 100%. И именно поэтому мы идем по тому пути, что для всех основных проектов, которые мы запускаем, и наш первый проект, с которого мы начали, это «Активный гражданин».

(00:10:07)

Кстати, выпуск №13 твоего подкаста. Спасибо большое, что ты рассмотрел его и…

Сергей Тихомиров: Это очень древняя история.

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

Сергей Тихомиров: Можно сказать, что, допустим, просто на сайте mos.ru публикуется каждый час какой-нибудь JSON-файл соответствующий там к прогрессу какого-нибудь проекта, любой желающий может его скачать. Если я его скачиваю тоже каждый час, если вы что-то будете переписывать за последние сутки, я увижу, что у меня скачанная версия была другая. Фактически то же самое.

Андрей Бородёнков: Формально ты прав, с той лишь разницей, что если говорить, например, про mos.ru и прям идти по пути, что мы действительно хотим подменить данные, говоря совсем просто, то подменить данные на фронте и заменить какие-то данные исторические, и вывести просто новые файлы, как будто бы если бы они были старыми, сделать это при помощи простого фронта, это гораздо более простая задача. И на самом деле заметить ее гораздо сложнее, чем если ты используешь узел наблюдателя. Мы, конечно же, согласны, мы это понимаем, но здесь именно ценность в части исторической неизменности данных. Всё же мы настаиваем на том, что она является…

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

Андрей Бородёнков: В целом, да, ты прав. И на самом деле здесь мы тоже согласны, мы об этом, безусловно, тоже много думаем, и здесь одно из решений, которое мы будем реализовывать в ближайшее время – это якорение данных в какие-то публичные сети. Если говорить про проект «Активный гражданин», которому, кстати, в ноябре 2019 года исполнилось уже 2 года, то наш следующий шаг развития этой системы, куда мы потихонечку двигаемся, это якорение всех исторических данных с сохранением с определенным промежутком в публичную сеть Ethereum. Кстати, могу сказать, что сам Виталик в своем Twitter писал про наш проект, и в частности, на самом деле приятно видеть, что мы думаем в одном направлении. Это была одна из его рекомендаций – якорить данные с определенной исторической периодичностью в публичную сеть Ethereum. Это дополнительное преимущество реализуется, таким образом. То есть мы обязательно пойдем по этому пути.

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

Андрей Бородёнков: Да, спасибо. На самом деле, да, спасибо большое за все эти предложения, за всю эту критику. Мы, безусловно, двигаемся, стараемся двигаться в том направлении, чтобы быть максимально прозрачными вот здесь. Якорение – это очевидная такая вещь, которая приносит ценность со стороны, естественно, профессионального сообщества. Здесь нет вопросов.

Сергей Тихомиров: Окей. Давайте тогда, прежде чем углубиться в систему электронного голосования, о которой я хотел бы поговорить более подробно, расскажите про проекты. Вот вы упоминали, что отобрали 15 проектов, где, вы считаете, блокчейн может чем-то помочь. Можете перечислить некоторые из них и аргументировать, почему вам кажется, что блокчейн – это правильное решение для проблем, которые там существуют?

(00:15:01)

Кирилл Поляков: Сергей, давай я расскажу. Если кратко, то все эти проекты появились примерно с такой очередностью: первая очередность у нас была просто попробовать технологию, то есть этим занимались, в общем-то, все крупные корпорации и компании, посмотреть, где она применима, изучить этот рынок и попробовать ее встроить. Первые проекты появились так. Первый, самый известный, о котором мы сейчас поговорили, это «Активный гражданин». Основная наша гипотеза была в том, что если мы добавим такую технологию распределенных реестров, то доверие к закрытой системе, в которой принимаются какие-то решения, а именно происходит голосование жителей, оно повысится. Собственно, гипотезу мы решили проверить каким образом: мы начали писать голоса пользователей, мы начали писать тексты голосований и выдавать результаты. Плюс, как уже говорили, выложили, собственно, возможность, чтобы житель скачал ноду. У нас было это в нескольких вариациях. Были сложные версии, когда можно ноду Ethereum развернуть за 1,5 часа, и то не факт, что ты успеешь за 1,5 часа её развернуть. Потом сделали свои версии, которые быстрее разворачиваются, и у пользователя, как всегда, есть возможность самому написать. Поэтому вариаций было множество.

По «Активному гражданину» есть и продолжение этой истории, что «Активный гражданин», система как услуга города, она была скопирована и дает возможность другим регионам её тоже использовать у себя в городах. Нам это, конечно, очень интересно, что это география расширяется у проекта и данных в блокчейн кладется больше. Второе: по «Активному гражданину» есть перспективы развития в различных субпроектах (это различные голосования жильцов дома за изменения внутри этого дома), и для нас это тоже очень актуально, потому что мы сами живем в Москве, мы пользуемся этими услугами. Вот это первый проект…

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

Кирилл Поляков: Мы, опять же, с тобой согласны. Безусловно, блокчейн и не должен решать эту проблему. Скажем так, что касается формулировки вопросов, здесь мы не до конца можем согласиться – почему? Потому что на самом деле самое такое знаменитое голосование, которое было в «Активном гражданине», которое вызвало самую большую волну вопросов со стороны граждан, это было голосование за переименование метро «Войковская». Оно достаточно широко известное, это был 2016 год, но только оно в блокчейне еще не было, но тем не менее, мы можем сказать, что достаточно острый вопрос, который стоял на тот момент, он был вынесен на общественное обсуждение, на широкую публику, и посредством проекта он был обсужден.

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

Сергей Тихомиров: Окей, хорошо, принимается. Тогда еще расскажите про пару проектов из того списка 15 проектов, и двинемся к голосованию.

Андрей Бородёнков: Второй проект, достаточно яркий для нас и очень интересный, это «Ярмарки выходного дня». Это такая городская услуга, когда на территории Москвы выделяются улицы, на них строятся специальные площадки, куда приглашаются фермеры, и они могут там торговать своими продуктами. Так вот эти площадки предоставляются фермерам бесплатно, то есть Москва платит за организацию всего этого, и фермеры там могут торговать бесплатно. Но потом фермеров, которые хотят претендовать на эти места, их, конечно, сильно больше, чем этих мест, поэтому создается определенная очередь. 

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

(00:19:59)

И вторая часть этого проекта, когда мы уже на уровне смарт-контракта принимали решение о присвоении определенному участнику места, потому что место присваивается на основе определенных, в том числе межведомственных, запросов, все ли сдано по отчетности у того, кто подаётся, и есть ли у него вообще возможность податься, и так далее. Там больше 15 различных проверок проходит, на основании чего присваивается ему определенное место или не присваивается. И всё это, собственно, завели в блокчейн. На сайте mos.ru есть специальная даже ссылка с ярмарками, куда мы просто на фронт выводим все данные из блокчейна. Это для тех фермеров, которые не могут скачать себе ноду наблюдателя (в этом проекте тоже она есть, есть возможность ее скачать), они могут смотреть это на сайте. И мы часто приводим этот пример, для нас он очень такой приятный, что однажды на одном заседании, когда рассматривались различные спорные вопросы, то есть когда фермер высказывает какие-то свои предложения, что я считаю, что по-другому надо было сделать, и его слушает сам бизнес-заказчик. Так вот, однажды там фермер сказал, что «знаете, вы меня не обманете. Я видел, моя заявка лежит в блокчейне, и сохранена она в 09:03:10». Поэтому для нас это очень приятно, что человек, который торгует овощами, пришел на эту ярмарку, он в курсе, что такое блокчейн, он ему доверяет.

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

Андрей Бородёнков: А они же не платят ничего, то есть это не аукцион.

Сергей Тихомиров: Просто кто первый пришел или какие? Ну, помимо того, что все должны быть комплаенс, все должны заполнить все правильно бумажки. Допустим, у нас есть, не знаю, 10 мест и 100 фермеров, каждый из которых полностью правильно формально всё заполнил. Как тогда их распределять?

Андрей Бородёнков: Да, всё верно. То есть основной критерий – это время. Открывается прием заявок в 9 утра, и у нас там пик, наверное, около 10-15 тысяч заявок приходит в первые несколько часов. И да, действительно, конкурс… Ну, претендентов сильно больше, чем мест, которые у нас есть.

Сергей Тихомиров: Там front running боты еще не появились?

Андрей Бородёнков: Там были различные на самом деле атаки. Это не в нашей зоне ответственности, но их тоже отрабатываем. Понятно, что были и фермеры, которые писали различные скрипты и роботы, которые пытались к нам подключиться и заполнять эти заявки. С этим тоже работаем. Сейчас уже таких не осталось, потому что каждый…

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

Кирилл Поляков: Здесь вопрос немножко лежит в другой плоскости, то есть здесь я бы предложил разделить эти два процесса. Почему? Потому что если говорить… То здесь, здесь корректно было бы разделить блокчейн и функцию приема заявок. Ведь на моменте, когда человек формирует заявку на участие в Ярмарке выходного дня, у него на фронте проходит… то есть форма, в которую он заполняет это заявление, на фронте проводится ряд проверок. Здесь, скажем, портал mos.ru выступает в роли верификатора тех данных, которые человек предоставляет. Поэтому говорить о том, что нечестно использовать ботов и прочее, здесь мы немножко отходим от темы – почему? Потому что всё же функция проверки и верификации человека, она в любом случае должна остаться на уровне органов власти.

Сергей Тихомиров: Я тут не спорю. Как бы у нас есть 100 настоящих живых фермеров, верифицированных, которые всё правильно заполнили, и дальше мы хотим их упорядочить по времени. И если у нас единственным критерием является время, тогда это race to the bottom, это кто на мили, микросекунду быстрее отправит заявку, тот фактически прав. И ничего нет в этом плохого. Просто, как показывает история с высокочастотным трейдингом, это может приводить немного к странным таким экономическим последствиям, когда огромное количество ресурсов тратится на то, чтобы соседа в очереди обогнать, а не на то, чтобы выращивать более вкусные овощи.

Андрей Бородёнков: Ответ такой, что у этой услуги, у того департамента, который организовывает, есть определенный регламент участия в этой услуге. И на самом деле те фермеры, которые участвуют в ней профессионально, то есть зарабатывают этим на жизнь, они с этим регламентом очень хорошо знакомы и до подачи заявлений постоянно проверяют и смотрят, какие есть изменения, изменялся ли регламент и так далее. И вот в самом регламенте совершенно четко указано, что единственным каналом подачи информации является mos.ru, то есть напрямую прописано, поэтому здесь, скажем, не то, что технические меры, но организационные разрулят этот вопрос.

Сергей Тихомиров: Это же Proof-of-Work. То есть, получается, что прочитать спецификацию и написать заявку по требованиям – это выполнить некоторую работу.

(00:25:01)

Потом люди начинают специализироваться, и как только они разобрались в спецификации, вы её меняете, и это как progPoW в Ethereum, чтобы асики не успели появиться. Теперь нужно заново читать спецификацию и заново делать Proof-of-Work. Аналогия работает?

Андрей Бородёнков: Здесь вопрос в том, что, наверное, да, это вопрос состязания щита и меча. Но на самом деле сам вот этот алгоритм подачи по принципу «кто быстрее» даже с точки зрения потенциального заказчика по этому проекту, он сам по себе считается таким несколько устаревшим, и, в принципе, сам заказчик постоянно рассматривает различные практики, применяемые в мире, и там уже есть ряд решений, которые так ходят. Ну, то есть, например, это некая рандомная раздача мест на какую-то выборку, то есть после того, как там, например, у нас есть окно приема заявок, и места раздаются неким случайным образом. Потом есть всякие истории с лотереями. Это просто разные способы ведения вот этой рандомности. Поэтому здесь говорить про сам алгоритм не совсем даже в нашем ведении, потому что ещё раз мы оговоримся, что это не задача нашего продукта определять те правила, по которым люди подаются.

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

Андрей Бородёнков: В целом принимается. Здесь, я бы сказал так, что помимо того, что ты сказал, сама задача верхнеуровневая, я бы, прежде чем обсуждать в принципе этот алгоритм, предложил бы отойти немножко на шаг назад, потому что сама исходная предпосылка использования блокчейна в этом проекте, она была в недоверии участников к самому процессу. И мы старались в первую очередь решить эту проблему. То есть, конечно, безусловно, алгоритм – это важная задача, которую следует решить, но мы исходили изначально немножко из других предпосылок.

Сергей Тихомиров: Хорошо. Ну что, давайте тогда перейдём к выборам.

Андрей Бородёнков: Давай. 

Сергей Тихомиров: Давайте. Значит, я дам тоже небольшой контекст. Мы об этом рассказывали подробно в выпуске №88, и там мы подробно эту систему, сделали её обзор и отметили некоторые ее, как мне кажется, существенные недостатки. Но общий контекст, чтобы вы понимали, что вообще происходит, особенно для тех, кто живет не в России или не следит за российской политической системой, в Москве есть местный парламент, который называется Дума, туда проходят выборы, и летом прошлого года была довольно громкая кампания, точнее серия кампаний, где известные оппозиционные деятели пытались выдвинуться в кандидаты в депутаты. Им это сделать по большому счёту не дали, за очень редкими исключениями по, как мне кажется, надуманным предлогам, придираясь к закорючкам. Всех в итоге завернули, почти всех, в результате чего в Москве произошла большая серия митингов, и люди, как мне кажется, очевидно были не довольны таким положением дел. Сами выборы прошли в сентябре, и на них в 3 округах была использована Система электронного голосования, обзор которой слушайте в выпуске №88 и даже смотрите на YouTube, где мы прямо прошлись по коду и его почитали, которая тоже вызвала большое, скажем так, широкое обсуждение уже даже не столько и не только в политических и оппозиционных кругах, но и в кругах профессионалов-криптографов и экспертов в информационной безопасности. И хотелось бы… Это я даю такой общий контекст, и мы здесь не говорим про политический аспект, а говорим, скорее, про технический аспект.

И что я хотел бы спросить для начала? Как бы серия вопросов, которая заготовлена была на первую часть этого разговора. Хотелось бы поговорить про ваше понимание в целом электронного голосования, даже не конкретно про систему в Москве, а как вам кажется, какие требования должны быть выдвинуты к такой системе? Зачем вообще голосование, я имею в виду политическое голосование, которое распределяет власть, какие-то мандаты, настоящую государственную власть. А по сравнению с системой, с бумажными бюллетенями, урнами и кабинками, которые уже десятки, сотни лет. зачем нам может понадобиться делать ее электронной?

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

(00:30:03)

Это первая гипотеза. А вторая гипотеза – это то, что электронными услугами всё больше и больше пользуются. И сейчас в целом тренд и государства, и города Москвы в том, чтобы перевести максимальное количество услуг из множества действий в одно заявление на Портале госуслуг или на портале mos.ru. «Госуслуги» – это различные услуги на уровне федеральном, а портал mos.ru – это услуги на уровне города, то есть конкретно в Москве. Поэтому большое количество людей (там порядка 2 миллионов жителей) пользуются госуслугами в Москве, и в том числе электронное голосование ориентировано для них.

Сергей Тихомиров: Я бы здесь хотел несколько возразить или по крайней мере свою точку зрения высказать. Мне кажется, существует такое несколько опасное смешение между госуслугами и выборами. По моему мнению, выборы здесь несколько отличаются, потому что выборы – это механизм, с помощью которого мы определяем, кто будет начальником. После этого начальник представляет разные услуги тем, кто живет на его подведомственной территории. Но немножко странно для меня рассуждать из предпосылки, что текущее, скажем так, начальство предоставляет выборы как услугу. Скорее, выборы – это должно быть, в моём понимании, нечто независимое, что определяет, кто будет начальством. То есть это не совсем вписывается в моем представлении о демократии, скажем так, в общий ряд услуг, как то: получить загранпаспорт, записаться к врачу, записать ребенка в школу и так далее, тра-ля-ля, проголосовать на выборах. Мне кажется, политические выборы, они выпадают из этого ряда. Вам так не кажется?

Кирилл Поляков: Возможно. Но сразу два тебе комментария. Первый комментарий – это, конечно же, не наш уровень. Наш уровень – это IT-реализация конкретной задачи, и мы про нее поговорим. А второе – это: а кого ты предлагаешь, то есть кого ты видишь в роли такого независимого лица, к которому тоже будет доверие, кто будет владельцем такой системы для проведения выборов?

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

Андрей Бородёнков: Да, вполне.

Кирилл Поляков: На самом деле я добавлю, что в проекте, который прошел в октябре, по факту заказчиком и был ЦИК, … Мосгоризбирком в лице его руководителей, то есть они вышли как заказчик для этой задачи. И сам проект родился с их подачи, с их инициативой. Здесь, может быть, не совсем с точки зрения информирования населения было понятно, но Департамент информационных технологий в принципе не может являться инициатором создания такой системы.

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

Андрей Бородёнков: Отвечая на твой вопрос касательно начала этого проекта, мы, конечно же, исследовали большой международный опыт. Во-первых, стоит оговориться, что проблема электронного голосования изучается с середины 80-ых. Уже есть публикации в международной прессе относительно этого. Если говорить про ближайший к нам опыт, то, конечно же, это опыт электронного голосования, которое было в Эстонии и в Швейцарии. И безусловно, мы смотрели и ориентировались на то, что сделали наши зарубежные коллеги. Но, наверное, здесь важно отметить то, что как таковая проблема, все проблемы и все открытые вопросы, которые есть в электронном голосовании, на текущий момент в полной мере их сложно все обойти одновременно. То есть, задача, в принципе, проведения электронного голосования – это задача с множеством факторов, которые друг другу противоречат. Поэтому, скажем так, вопрос гораздо более сложный, чем он кажется на первый взгляд.

Сергей Тихомиров: Да, с этим я абсолютно согласен. И в связи с этим такой у меня-то вопрос и возникает.

(00:35:00)

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

Андрей Бородёнков: Соответственно, на самом деле мы понимаем массу ограничений, которые есть у этого процесса. Но этот процесс мы впервые… то есть мы идём первый раз по нему. До этого в России никто не шел по этой дороге, и, конечно же, понятно, что на первопроходцев всегда будут сыпаться все шишки и все вопросы будут к ним, но сама суть процесса такова, что если не попробовать, то не узнаёшь, как это организовано, в принципе.

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

Андрей Бородёнков: Да, соответственно, можем отметить, что, в принципе, статус этого проекта на момент его начала, он так и называется во всей нормативной документации, это эксперимент. Изначально предпосылка, с которой мы подходили к этому проекту, это эксперимент, поэтому в первую очередь нам кажется, что стоит рассматривать и относиться к этому проекту как к пилоту. И ровно по этой же причине из 45 избирательных округов в Москве было выбрано всего три, потому что понятно, что это должна быть выборка маленькая. И даже на примере вот этих вот трех избирательных округов мы показали те же результаты, что и в остальных округах, что является положительным результатом.

Сергей Тихомиров: Если это формулировалось как эксперимент, то какие были критерии его успеха или нет? То есть, были ли заранее заданы какие-то метрики, какие-то параметры, чтобы мы могли сказать по итогам: «Вот у нас такие-то и такие-то критерии выполнены, поэтому мы считаем эксперимент удачным» или «мы считаем эксперимент неудачным»?

Андрей Бородёнков: Здесь касаемо проекта решения о его успешности принимал функциональный заказчик. Это Мосгоризбирком и Центральная избирательная комиссия. Соответственно, по результатам всего проекта все данные из блокчейна, все артефакты, которые были рождены в результате проекта, были переданы туда, и решение принималось ими. К сожалению, мы не можем сказать о тех критериях, которые Мосгоризбирком использовал при оценке этого проекта. Здесь, к сожалению, просто мы, может быть, и хотели бы, но просто не можем, потому что мы не знаем.

Сергей Тихомиров: Объявлен ли официальный результат, то есть вышел ли Центризбирком в какой-то момент и сказал: «Эксперимент проведён, он удачен» или «он неудачен»?

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

Сергей Тихомиров: О’кей. Ну, то есть, может быть, не совсем о’кей. Мне хотелось бы, конечно, видеть какие-то четкие критерии опубликованные, которые бы говорили, например, что-то вроде такого: «Если система не будет работать более чем N процентов времени, тогда мы считаем, что это неудача» или «Если расхождение с данными независимых наблюдателей будет более чем Х%, мы считаем это неудачным». Потому что сейчас это немножко напоминает мне такие ролики на YouTube, которые называются «мегаэксперимент»: мы высыпаем ведро «Ментоса» в бассейн с «Колой», при это с научной точки зрения, конечно, не эксперимент, потому что просто люди что-то делают и смотрят, что получится, не определяя заранее критерии, что они, собственно, какую гипотезу они пытаются проверить. Здесь мне интересно, какую мы пытались проверить гипотезу.

Кирилл Поляков: Тут нужно понимать, что электронные выборы, так или иначе, появились бы. И то, что дистанционное электронное голосование запущено в Москве, это только первый этап, то есть это пилотирование, и мне кажется, это вполне себе нормальная процедура, когда выбирается очень маленькая доля участков, а в нашем случае было только три участка из 45, на которых применялось дистанционное электронное голосование, при этом у жителей была возможность выбрать альтернативное, обычное бумажное, голосование. Это раз. А два: этот пилот, задача этого пилота – понять первые ошибки, понять комментарии жителей, понять комментарии экспертов, учесть их и выкатить другую версию, уже обновлённую, модернизированную.

(00:40:13)

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

Сергей Тихомиров: Хорошо. Давайте тогда еще поговорим про следующее. Но здесь вопрос, я думаю… Некоторые мои вопросы могут быть действительно не по адресу, потому что мне интересна тема в целом. Если какие-то из моих вопросов не попадают в вашу компетенцию, то это вполне нормально. Но этот, мне кажется, должен попадать. Было ли какое-то техническое задание сформулировано перед началом разработки и какие пункты в нем содержались? Что, собственно, от этой системы ее заказчики хотели получить?

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

Сергей Тихомиров: Извини, пожалуйста, я перебью, но это мне очень напомнило такую шуточку из Twitter, что weeks of coding can save you hours of planning (недели написания кода спасут вам часы планирования).

Андрей Бородёнков: Да, можно сказать и так, да. Но на самом деле, если отбросить юмористическую составляющую, то, переходя к реалиям, очевидно было, что если бы мы, получив постановку задачи на формирование такой системы, принялись бы сразу же формировать хорошее техническое задание, всё бы время мы и съели этим формированием. Поэтому еще раз обращаю внимание, что…

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

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

Сергей Тихомиров: Извините, что я отвечаю постоянно тут каламбурами, но тут мне уже вспоминается шутка про то, что то, что один программист делает за месяц, 2 программиста сделают за 2 месяца. Если у нас всего есть 4 месяца, то немножко странно видеть распыление по 10 командам. Не логичнее было бы собрать одну команду под каким-то центральным руководством, потому что если действительно мы решили зачем-то написать такую систему за 4 месяца, то нужно как-то ресурсы же концентрировать и снижать расходы на коммуникацию между командами.

Андрей Бородёнков: Да, всё верно. Могу сказать, что, конечно, верное замечание, но это дает возможность нам тогда чуть более подробно рассказать про состав участников и кто в принципе принимал участие в этом проекте, потому что, помимо нашей команды… То есть, здесь следует рассматривать так, что реализация такого большого и обширного проекта невозможна без привлечения участников, которые делают свои части. Ну, то есть, я сейчас немножко сложно объясняю. Но давайте тогда постепенно пойдем. Ведь само решение с выборами, оно складывается из огромного количества составляющих. Во-первых, первая и самая главная – это авторизация пользователя, когда он переходит на портал mos.ru. Очевидно, что есть команда, которая отвечает за авторизацию, за то, чтобы человек правильно прошёл, и это первое. Второе – это «Госуслуги», то есть сам сервис голосования находился в разделе «Услуги», и соответствующая команда отвечала за появление его там. Понятно, что требуются доработки фронта соответствующие, то есть это еще одна команда, которая также делает эти доработки. Между всеми этими компонентами встает вопрос транспорта и передачи данных. Это ещё одна команда за это отвечает. Потом непосредственно сам блокчейн, затем взаимодействие с устройствами (мы, наверное, про это чуть тоже попозже поговорим), которые дублировали весь процесс. Затем было решение по созданию админки, то есть интерфейса администратора для всей этой истории.

(00:45:00)

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

Сергей Тихомиров: Окей. Извини, я тебя прерву. Совершенно понятно, что есть некоторая организационная структура, которая работает на определенной скорости, которая, видимо, в среднем меньше, чем разработать систему с нуля за 4 месяца. Понятно, что есть организационное препятствие. Примем это как данность. Но что меня интересует… Окей, двигаясь уже несколько дальше, опять-таки, как мне кажется, задача разработки системы для выборов, она несколько несет большую ответственность и более какие-то серьезные обязательства должна брать на себя, чем разработка многих других систем. В связи с этим были ли какие-то специалисты в вашей команде, в других командах, профессиональные криптографы или специалисты по безопасности?

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

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

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

Сергей Тихомиров: Дружественных – это плохо. Они должны быть вражественные.

Андрей Бородёнков: По реализации. Да, и более того, если как бы забегая вперед, отвечу. Мы организовывали некий bug bounty вражественными. Это было специальное открытое bug bounty с объявленным призом в 2 миллиона рублей, на который приглашались все желающие, для того чтобы протестировать уязвимость разрабатываемой системы по трём основным сценариям, первый из которых – это тест на взлом самой формы, второй – это тест на взлом системы через какие-то пути (через backend, условно говоря), и третий – это поиск уязвимостей в блокчейн-решении.

(00:50:00)

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

Сергей Тихомиров: Извини, пожалуйста, перебью. Заявку на русском языке нужно было отдать?

Андрей Бородёнков: Заявка, форма у нас, да, на русском языке.

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

Андрей Бородёнков: Да, но у нас было, по-моему, две заявки от иностранных экспертов, которым продемонстрировали это решение их русскоговорящие коллеги. Соответственно, подали от них заявки, и там мы взаимодействовали с иностранными экспертами в рамках этой программы.

Сергей Тихомиров: А можете назвать каких-то экспертов, если они публичные люди или компании, которые делали внешний именно аудит?

Андрей Бородёнков: Да. Что касается участия иностранных экспертов в аудите системы голосования, то участие в аудите принял французский криптограф Пьеррик Годри. Это представитель Парижского института криптографии, заявку за которого оставила его русскоговорящая коллега, которая с нами изначально связалась. И первым делом она показала некий драфт статей от него касаемо вопросов по линии ключа шифрования. То есть вся эта активность была в рамках нашей открытой bug bounty.

Сергей Тихомиров: Давайте тогда, если мы вспомнили про Годри, поговорим про то, что конкретно он нашёл. Я ещё хочу сказать, что один из недавних выпусков, выпуск №109, там я делал обзор статей конференции Financial Cryptography. На этой конкретно статье я не останавливался, но она тоже числится в числе принятых на эту конференцию, а именно была обнаружена уязвимость в протоколе голосования, которая, если очень сильно упрощать, заключается в том, что ключ шифрования был слишком короткий и его можно было перебором взломать. Если я не прав, поправьте меня и расскажите, в чем была уязвимость, почему она, собственно, возникала и как вы ее исправили.

Андрей Бородёнков: Что касается найденной господином Годри уязвимости, она заключалась в том, что ключ шифрования был длиною 256 бит, для конкретной имплементации было достаточно мало. И на одном из этапов это ограничение упиралось в разрядность виртуальной машины Ethereum, и на момент поиска пути обхода разрядности, которая применяется в ЕВМ, мы имплементировали 3 шифрования подряд ключом 256, что очевидно не является синонимом троекратного увеличения стойкости ключа. Мы это, конечно же, понимаем. Соответственно, суть вся заключалась в том, что при… Как раз Годри продемонстрировал, что при применении достаточно простого пользовательского оборудования ключ шифрования 256 бит, примененный три раза подряд, не обеспечивает должной стойкости и расшифровывается за время, меньшее чем 12 часов, то есть это длительность голосования на выборах. Соответственно, в том числе по результатам его замечаний, конечно же, ему было выплачена премия, отправлена в размере 1 миллиона рублей, что на тот момент составляло порядка 13,5 тысяч евро, а остальной миллион рублей был разделён между другими участниками этого bug bounty, которые также дали свои замечания и предложения по улучшению системы.

Сергей Тихомиров: А как в итоге исправили?

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

Сергей Тихомиров: То есть там в какой-то момент, если я правильно понимаю, что переменные в EVM смогут быть максимум 256 бит. Значит, если вам нужен длинный ключ, вы что его должны разбить на 4 части и положить в четыре разные переменные? Как это происходит?

Андрей Бородёнков: Я, к сожалению, не могу ответить, как конкретно технически был решен этот вопрос увеличения длины ключа в EVM. Прям я в такую техническую глубину не уходил. К сожалению, не могу ответить.

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

(00:55:07)

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

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

Андрей Бородёнков: Это относится к нашей компетенции. Почему я не отметил этот момент, потому что три предыдущих шага – это шаги, которые производит сам пользователь. Да, безусловно, расшифровка… подсчет бюллетеней, он, конечно же, относится, и получение итоговых чисел – это тоже всё делается с применением блокчейн. Значит, что касается того… Я на самом деле отвечаю на вопрос, почему это делается он-чейн. То есть, здесь короткий ответ такой, что…

Сергей Тихомиров:  Давай… Сейчас, извини. Я, может быть, слишком как-то сложно сформулировал вопрос. И поскольку мы перешли уже к архитектуре системы, давай я покороче сформулирую вопрос про архитектуру. Мне хочется понять, вот я понимаю, как устроены обычные выборы, бумажные: есть реестр избирателей, прихожу, даю паспорт, получаю бюллетень, иду в кабинку заполняю, кидаю в урну, потом его подсчитывают. Какие из этих этапов – перед вами стояла задача положить на блокчейн? И мне хочется какую-то мотивировку получить, почему именно те этапы, которые были на блокчейн положены, имело смысл туда положить.

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

Сергей Тихомиров: Подождите. Если я правильно помню, из нашего предыдущего выпуска, где мы разбирали код, выложенный на GitHub, я там не обнаружил в коде на Solidity функциональности, которая была бы похожа на подсчёт голосов. То есть я увидел запись, зашифровку, расшифровку, но не было функции, которая говорила: «А сейчас вызовите меня, и я вам верну список всех голосов за кандидата Х». Это было на блокчейне или нет?

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

Сергей Тихомиров: Окей. То есть предполагается, что… Хотя подсчет (legally binding, как это назвать, официальный), имеющий юридическую силу подсчет, делается кем-то другим. Мы можем обсудить, кем, но это не так важно для моего вопроса. Но предполагается, что каждый может скачать голоса из блокчейна и пересчитать их самостоятельно. В этом и заключается модель безопасности.

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

(01:00:21)

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

Сергей Тихомиров: Так, сейчас, секунду. У меня несколько вопросов возникло по ходу этого повествования. Вот ты упомянул вопрос анонимизации, и мне кажется, это очень важно. На самом деле для меня, что кажется наиболее важным в этой системе, вообще в системе голосования, что голоса должны быть анонимные, во-первых, а во-вторых, что их подсчет должен быть верифицируемый. И если говорить про анонимность, из документов, которые были опубликованы перед голосованием на сайте мэрии и еще каких-то сайтах (у нас ссылки опять-таки есть в шоунотах к предыдущему выпуску на эту тему), было подчеркнуто, что голоса будут проходить через некоторый анонимайзер, который будет их анонимизировать. Но при этом опять-такие на GitHub на момент, когда мы записывали этот выпуск за день до выборов, я не обнаружил следов этого анонимайзера. А был ли он? И если был, почему он не был опубликован? Как он работал?

Андрей Бородёнков: Просто вопрос хороший и достаточно тоже комплексный. Давай тогда пойдем по порядку. Значит, что касается анонимизации голосов, первое и самое важное, что стоит отметить, на самом деле сам процесс анонимизации состоял из двух этапов, то есть разрыв голосов избирателей и результат голосования, он был двухэтапный. Первый – это анонимизация на уровне формы голосования, то есть когда пользователь после того, как портал его авторизует, это находится, то есть мы понимаем, что это находится за рамками блокчейна, то есть это функциональность на стороне портала. Портал должен убедиться, что данный конкретный человек имеет право принимать участие в выборах, то есть он соответствует всем параметрам: у него подходит возраст, он принадлежит к одному из избирательных округов, в котором проводится голосование, – и после этого портал допускает его до бюллетеня. Для того чтобы попасть на бюллетень, использовался сервис, который представляет собой набор прокси-серверов, который случайным образом генерит url, и этот url отдаётся пользователю, то есть сам процесс генерации этого url по определенному закону, он находится как раз на стороне этого анонимайзера, и он как раз и обеспечивает вот эту вот первую историю с анонимизацией голоса. Вторая история – это как раз…

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

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

(01:05:16)

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

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

Андрей Бородёнков: В целом, да. Но как я и сказал, то есть это набор не только организационных мер, но и технических в лице самого решения.

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

Андрей Бородёнков: Да, значит, отвечая на твой вопрос, могу сказать, что на всем этапе проектирования системы была создана техническая рабочая группа из IT-экспертов, встречи с которыми проводились на еженедельной основе, и они помогали проектировать, давали свою критику и обратную связь. То есть, на еженедельной основе мы выдавали им результаты создания, промежуточные итоги создания системы. Они осуществляли некий аудит и давали  обратную связь по тому, как система в данный момент, то есть где она находится и как она проектируется. Поэтому я хотел бы обратить пристальное внимание, что это важный аспект.

Сергей Тихомиров: Нет, но это организационный аспект. Хорошо, вы как-то организовали работу, компетентно, хорошо, с командами, с фидбэком и так далее. Но мне интересно, что в результате произошло, вот технически. 8-го там или какого числа были выборы, сентября. Какие конкретно ноды работали, кто их контролировал и были ли среди них ноды, не связанные с ДИТ или правительством, или Избиркомом?

Андрей Бородёнков: Да-да, вот как раз разреши, я закончу. Мы предлагали такую возможность на технических рабочих группах нашим экспертам, и данная возможность была отвергнута – почему? Потому что мотивация с их стороны была такая, что выдача узлов наблюдателей может каким-то образом повлиять на ход голосования, поэтому мы хотели реализовать эту функциональность, но рабочая группа ее отвергла. Наряду с этим также я хотел бы отметить, что мы…

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

Кирилл Поляков: Сергей, давай я дополню. На самом деле техническая группа – это очень большое преимущество, которое у нас использовалось. Но наша ошибка, что мы мало про нее рассказывали, то есть не так легко было узнать, что она существует, но в ней постоянными участниками было порядка 10-15 человек, и это была строгая позиция. Там вот, как я в начале сказал, это дружественный и недружественный какой-то IT-состав участников. Так вот, там дружественного состава участников не было. Это были мы, которые рассказывали, что мы сделали за неделю. Фактические такой спринт и демо, что мы рассказывали: «Мы сделали вот так, планируем сделать вот это». Нам задают вопрос: «Почему вы так делаете? Дайте обоснование». они всё записывали на видео, то есть, скорее всего, их можно даже…

Сергей Тихомиров:  Хорошо. А представители каких организаций или партий входили в эту группу?

Кирилл Поляков: «Голос» абсолютно точно там был в составе несколько человек, были независимые разные технические специалисты. По партиям, наверное, не подскажу, но, если не ошибаюсь, были КПРФ.

Сергей Тихомиров: Мне интересно просто именно… Окей. Политические партии, можем их пока задвинуть в сторону. Но мне интересна именно позиция «Голоса» как организации не политической, а именно следящей за процессом и за соблюдением прозрачности, законности и честности выборов. Как они отнеслись к идее, что возможности независимой ноды не будет?

(01:10:03)

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

Сергей Тихомиров: Получается немножко странная ситуация, потому что, как мне представляется, вы столкнулись с фундаментальной проблемой, которая, собственно, и является камнем преткновения, почему не получается с точки зрения науки и криптографии сделать безопасное электронное голосование. Потому что у нас вступают в конфликт требования прозрачности и требования анонимности. Ну, ещё и требование отсутствия к принуждению голосовать. И мне кажется, что этот конфликт требований, он был несколько предсказуем с самого начала. И из того, что вы сейчас говорите, у меня складывается впечатление, что те преимущества, которые блокчейн мог предоставить теоретически этой системе, они просто не были использованы. То есть, получается, что у нас блокчейн мог бы предоставить возможность независимого контроля, но это не сделали. Блокчейн мог бы предоставить анонимизацию, но это, о’кей, как-то сделано, но меня не до конца убедило. В чём, собственно, тогда заключается преимущество не вообще блокчейна, а конкретно того, что было имплементировано к выборам в сентябре?

Андрей Бородёнков: Ну, смотри, я хотел бы обратить еще раз внимание на то, что у нас было всего 4 месяца, и это был эксперимент, который в любом случае нужно было пройти, для того чтобы узнать, какие мы получим результаты. Конечно же, мы учли всю ту критику и все те замечания, которые поступили в ходе этого процесса. Здесь совершенно очевидно, что мы понимаем, какие замечания есть, какие есть узкие места у электронного голосования. Как мы на самом деле, с чего мы и начали разговор, что процесс электронного голосования, попытки его решить оптимальным образом предпринимаются, начиная там с конца 80-х годов, и до сих пор ломается огромное количество копий относительно того, как правильно решить этот процесс. Поэтому мы, естественно, это понимаем, и здесь было бы глупо с нашей стороны говорить, что мы решили фундаментальную задачу, которую уже там 40 лет пытаются решить лучшие умы. То есть очевидно, что мы сделали в этом решении первый подход, основной целью которого было попробовать оценить, в принципе, применимость электронного голосования. И опять я хотел обратить самое пристальное внимание, что нигде до этого, ни в одном регионе Российской Федерации не проводилось электронное голосование, и мы…

Сергей Тихомиров: Может быть, оно и к лучшему? Может быть, лучше без электронного голосования, чем такое электронное голосование?

Андрей Бородёнков: Но не попробовав, мы бы всё равно не узнали и не получили бы эту ценную обратную связь. Здесь можно пойти по тому пути, что выбрать путь, что сказать себе: «Да, действительно, у электронного голосования много ограничений. Как их обойти – мы не понимаем. И давайте не будем подступаться к этой задаче». Или можно выбрать другой путь, сказать себе: «Да, мы отдаем себе отчет в том, что это процесс сложный, что он до сих пор не решен оптимальным образом, но давайте попробуем что-то сделать». В данном случае мы выбрали второй путь и пробовали решить его так, как мы это видели.

Сергей Тихомиров: О’кей, fair enough. Как бы здесь у меня нет задачи пытаться вас переубедить или как-то настоять на своей точке зрения. Как бы она у меня есть, у вас есть какая-то, видимо, несколько отличающаяся. И хорошо, что мы их сопоставили. Мне всё-таки кажется, что электронное голосование – это система слишком серьезная, чтобы её, скажем так, чтобы в таких обстоятельствах с ней экспериментировать. У нее такое небольшое время на имплементацию. Ну, то есть, это как самолет что ли, то есть можно говорить, что, не знаю, у аэробуса процент аварий, не знаю, такая-то доля процента, а у боинга – сякая доля процента, и поэтому один из них безопаснее другого. Но странно говорить, что вот мы тоже сделали самолет, только у него нет крыла одного и шасси, и, не знаю, иллюминаторов.

Кирилл Поляков: Тут просто не такой, как с самолетами, вопрос. Самолет же не взлетел сразу в виде Boeing-747, правильно? Сначала делались попытки (какие-то деревянные самолёты, элементарные двигатели).

(01:15:02)

Они, конечно, падали, и люди разбивались. То есть там вообще трагедия. Но как-то начинать эту дорогу нужно, и в виде пилота у нас большинство IT-проектов в Москве запускается, это абсолютно нормальная практика. Если взять ту же бизнес-структуру, то ни одна корпорация не вложит большие деньги в какой-то проект, который не доведёт до состояния MVP и не проверит гипотезу, что вообще этот продукт нужен рынку, как его воспринимает рынок. Давайте пройдем эту дорогу и посмотрим, что получится. Вот ровно так же мы к этому подходили, что нужно провести пилот, прежде чем запускать это на всю Москву. Поэтому только на трех участках из 45 это использовалось. Поэтому это именно эксперимент, это пилотирование проекта. Но теперь есть опыт, уже там большинство правок, они просто исправлены.

Сергей Тихомиров: Хорошо. Ещё два буквально хотелось бы аспекта обсудить. Репозиторий на Github. С одной стороны, очень хорошо, что вообще в московском правительстве, в ДИТ знают, что такое Github, знают, что там можно и нужно публиковать код, особенно код, который имеет такую большую общественную значимость, как код системы голосования. Но у меня сложилось впечатление, что этот депозитарий, он как-то структурирован и построен несколько несерьёзно, то есть нет документации или ее очень мало, всё на русском языке, очень небольшая активность разработки, то есть по коммитам видно, что система была в активной разработке и туда вносились значительные изменения буквально в последние дни перед голосованием, то есть у меня не вызвало удовлетворения состояние Github. Ну, я понимаю, что сроки были очень сильно сжаты, но хотелось бы спросить, почему так мало и такая непонятная документация? То есть, из этого кода что я ожидаю увидеть, заходя на страницу на Github какого-то проекта: описание, во-первых, что он делает, что от него можно ожидать, как его развернуть, как его запустить и как его использовать. И этого я не нашёл.

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

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

Кирилл Поляков: Безусловно, но не в тех сроках, в которых работали мы. Если можно было бы вернуться обратно и оказаться в среде разработки, в команде, которая работала над этим проектом, то это было бы похоже на, знаешь, как известная шутка, что вокруг пожар, всё горит, я горю, и мы едем на горящем велосипеде. Вот примерно в таком режиме мы и разрабатывали, то есть у всех был перегруз по задачам, все команды работали nonstop, и в выходные дни в том числе, перед запуском. Поэтому до этого вопроса руки зачастую не доходили. Ну, конечно, в следующий раз (это очень крутой комментарий), и те команды, которые к нам приходили, вот эти  36 заявок, которые были на аудит нашей системы, технический аудит, они в том числе получали доступ и туда. Поэтому мы сами же заинтересованы, чтобы на bug bounty приходили команды, которые уже посмотрели код, уже посмотрели его описание.

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

Сергей Тихомиров: Но это security through obscurity. Ведь такой стандартный криптографический совет, что единственная секретная часть в вашей системе должен быть приватный ключ.

(01:20:06)

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

Андрей Бородёнков: Безусловно, как и сказал Кирилл, мы движемся в этом направлении. Но в любом случае мы постарались сделать шаги. Может быть, они были не всегда умелыми в части Github, но тем не менее, мы старались быть максимально открытыми.

Сергей Тихомиров: Я тут не хотел бы осуждать эту попытку саму по себе, я не хотел бы произвести такой эффект, что сделали плохо, значит вообще так делать не надо. Конечно, надо выкладывать на Github и, конечно, нужно способствовать публичному обсуждению этих проектов, и это всё очень хорошо. Моя главная претензия заключается в том, что, возможно, выборы – это не того типа проект, на примере которого нужно оттачивать практики разработки государственных цифровых проектов.

Кирилл Поляков: Именно поэтому выборы не стали первым проектом, который стал цифровым.

Сергей Тихомиров:  Окей. Завершая уже постепенно наш разговор, хотел бы еще затронуть такую тему. Уже после выборов эта система электронного голосования, её потенциальные недостатки вызвали широкое общественное обсуждение, потому что в одном из тех округов, а именно в 30-ом округе, они реально повлияли на результат голосования. Там был оппозиционный кандидат, который пытался оспорить эти итоги, потому что он выигрывал по бумажному голосованию, но если прибавить к нему электронное, он в итоге проиграл с очень небольшим перевесом в несколько десятков голосов. После этого штаб этого кандидата (его зовут Роман Юнеман) собрал группу, которая написала довольно большой отчет по недостаткам системы голосования. Я этот отчет почитал, и спасибо им, кстати, за это, потому что часть моих вопросов были, скажем так, информированы этим отчётом. Но тот аспект, который мы пока не затронули, это доступность системы. По их данным, они основываются на сообщениях избирателей, которые им об этом сообщили, система была просто недоступна для голосования довольно значительный процент вообще всего времени для голосования. Как вы это прокомментируете? Это вообще правда? И если это правда, то мне кажется, довольно серьезная причина такие голоса не учитывать в итоговом протоколе, потому что, по их данным, почти 4 часа из 12 система работала с перебоями.

Андрей Бородёнков: Да, давай начнём с того, что система действительно падала. Сейчас мы ни в коем случае не собираемся это отрицать. Действительно, был простой, который был связан с тем, что была неисправность на программно-аппаратном комплексе, который занимался шифрованием. То есть, по сути, отказала железяка, и вот то время простоя системы, в которое не принимались голоса, мы специально закрыли форму на mos.ru, поняв, что неисправность случилась, и форма для приема голосов, в принципе, была закрыта. Здесь никаких возражений, то есть это абсолютно открытая информация. Мы ни в коем случае не скрываем.

Сергей Тихомиров: Это правда продолжалось 4 часа примерно?

Андрей Бородёнков: Ну, чуть меньше. Знаешь, мы были в таком стрессе, занимаясь этим вопросом…

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

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

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

Кирилл Поляков: Сергей, давай я тебе отвечу. Во-первых, явка у нас составила больше 90% (92,3%, если быть точнее), поэтому это не повлияло на явку, во-первых. Во-вторых, действительно на сайте было сообщение о том, что сейчас невозможно проголосовать. Такие жители просто вернулись чуть попозже и проголосовали. Ну и в-третьих, да, действительно, система падала, и мы к этому были готовы, потому что у нас перед запуском было порядка 4 боевых тестирований – это когда также приглашались коллеги из «Голоса», в том числе их руководитель, и мы проводили на площадке Мосгордумы открытые тестирования.

(01:25:13)

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

Сергей Тихомиров: Итог доклада, который написал выше упомянутый мной штат заключается в том, что результаты по 30-му округу нужно пересмотреть. С одной стороны, конечно, странно было бы ожидать чего-то другого от оппозиционного кандидата, который проиграл с таким небольшим перевесом, как будто это естественный шаг с политической точки зрения. Но они довольно, как мне кажется, основательно приводят техническую базу, почему они это решение считают оправданным. И они пробовали судиться, суды с ними не согласились. Мне кажется, здесь мы натолкнулись довольно предсказуемо опять на проблему, что организаторы выборов говорят: «Мы считаем, что отменять результаты не нужно», оппозиционный кандидат говорит, что «я считаю, что отменять нужно, потому что: раз, два, три, четыре», но нет способа независимо проверить, что на самом деле происходило в блокчейне, потому что не было независимого наблюдения, независимых нод, которые могли бы в реальном времени это подсчитывать. И в докладе упоминается возможность манипуляции и возможность того, что что-то в блокчейне могло быть подменено. Мне кажется, это такой довольно фатальный недостаток, скажем так. Понятно, что выборы – это такой процесс, который вызывает споры и дискуссии. Какой должен быть, по вашему мнению, механизм их разрешения, если один кандидат говорит одно, другой – другое, и нужно как-то их объективно рассудить?

Андрей Бородёнков: Здесь ответ на твой вопрос будет состоять из трех частей. Значит, самое главное, во-первых, что касается результатов работы судебной системы. Мы ни в коем случае не хотим это комментировать, потому что решение суда – это решение суда, и здесь с точки зрения сторон нет  никакой другой возможности, кроме как подчиниться этим требованиям. Это то, что касается суда. Вторая часть – это что касается, в принципе, организации системы. Мы приглашали всех поучаствовать, и на самом деле, насколько мы знаем, там Роман был в курсе этих рабочих групп, но он не принимал в них участие, и потенциально он мог бы повлиять на вот эти функциональности, предложив сделать процесс, может быть, определив своим решением как независимый кандидат, сделав…

Сергей Тихомиров: Извини, я всё-таки скажу, что роль кандидата – это агитировать за себя и проводить кампанию. Всё-таки не роль кандидата, или по крайней мере это сугубо опционально, участвовать в разработке, собственно, системы. Логично было бы ожидать, что организаторы выборов реализуют такую систему, которая позволит честно играть по понятным правилам и в случае конфликтов потом, по понятным опять-таки правилам, оспаривать возможный конфликт. Всё-таки кандидат – это не разработчик. Кандидат – у него своя роль в этом процессе.

Андрей Бородёнков: Да, но тем не менее, в технической рабочей группе принимали участие другие независимые кандидаты, которые выражали своё мнение относительно формирования системы и той функциональности, которую они хотели бы видеть. Вот это ответ на вопрос. И дополнительно хотелось бы отметить, подытоживая так историю с Романом Юнеманом, это то, что он призывал своих сторонников в течение всего голосования не принимать участие в электронном голосовании, а голосовать за него на бумаге. То есть, возможно, это тоже сыграло свою роль. Здесь я не хочу делать никаких выводов специально, то есть это просто констатация факта.

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

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

(01:30:02)

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

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

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

Сергей Тихомиров: Да. Но это, конечно, лучше, чем вообще никак, наверное. А может быть, и нет. Не знаю, тут надо про это подумать. Но, да, говоря про следующие планы применения, я прочитал не помню, в каком российском СМИ заявление о том, что электронное голосование будет использоваться на, как это правильно назвать… Нельзя называть это референдумом, потому что это не референдум. На всенародном голосовании по поводу поправок в российскую Конституцию, которая вызывает очень много вопросов своим политическим аспектом, потому что это проводится фактически в обход существующих законов. Но что вы можете сказать про перспективы применения электронного голосования? Правда ли это планируется? И учитывая, что до намеченной даты остается меньше 2 месяцев, не получится ли так, что за месяц вам скажут: «А теперь реализуйте нам всероссийскую систему для нашего голосования по Конституции»?

Кирилл Поляков: Да, собственно, по нашей информации, тоже это будет использоваться, и это только для Москвы актуально, потому что, собственно, пилотирование было внутри Москвы, и команды делали этот проект именно Москвы. Это раз. Два: то, что остается меньше 2 месяцев, это не значит, что у нас не было с сентября какого-то количества времени, чтобы внести правки.

Сергей Тихомиров: Только на GitHub ничего не изменилось с сентября, хочу отметить.

Кирилл Поляков: Но это не значит, что в проекте ничего не изменилось. Это только значит, что мы не актуализировали GitHub.

Сергей Тихомиров: То есть, готовите ли вы систему к тому, чтобы она была применена уже в апреле на апрельском голосовании?

Кирилл Поляков: Да.

Сергей Тихомиров: И какие, по сравнению с ее версией, которая была применена в Москве в сентябре, какие главные изменения вы туда внесли, внесли и планируете внести?

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

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

Кирилл Поляков: Отлично.

Сергей Тихомиров: Здорово. Если что-то хотите еще добавить и рассказать, то давайте это сделаем и будем завершать.

(01:35:03)

Кирилл Поляков: Да в целом, наверное, только один комментарий, что вот у нас на портале mos.ru скоро появится и отдельный сайт по блокчейн-проектам, и на самом деле по каждому проекту есть на портале какая-то страница, которая описывает это решение, то есть зачем оно используется, кто потребитель. Ссылка на GitHub, на каждом: и на «Активном гражданине», и на ярмарках. есть у нас ещё там несколько кейсов, и везде мы стараемся опубликовать. Поэтому единственное, наверное, что если людям будет интересно, то есть статьи и на vc.ru, и на Rusbase, и на «Хабре». И я, и Андрей писали статьи, в том числе на «Хабре» большая статья есть, где мы описываем нашу разработку, то есть как мы таким путем идем. Понятно, ты же понимаешь, что доверия к людям, которые работают в структуре Правительства Москвы, его может быть зачастую очень мало, и нам его, конечно, не хватает. Но кроме как рассказывать то, что мы делаем, и принимать критику, и делать дальше, у нас нет другого выбора.

Сергей Тихомиров: Отлично. Спасибо. Тогда мы приложим ссылки на статьи в шоунотах. Большое спасибо, что зашли. Мне кажется, очень продуктивный был разговор. Очень хотелось бы надеяться, что комментарии и критика, и так далее будут восприняты конструктивно, учтены, и как-то всё станет лучше и безопаснее. С нами были Андрей Бородёнков и Кирилл Поляков из Департамента Информационных Технологий Москвы. Мы говорили про блокчейн-проекты Москвы, в частности про систему электронного голосования.

Большое спасибо нашим гостям. Большое спасибо слушателям за внимание. Спасибо нашему спонсору HodlHodl – это самый быстрый, безопасный и дешевый способ купить и продать биткоины без верификации. У нас есть специальная ссылочка в описании. Можете зарегистрироваться по ней и получить навсегда себе скидку на торговую комиссию. Подписывайтесь на наш подкаст во всех подкаст-агрегаторах, в том числе в iTunes, а также через RSS. Наш сайт: basicbloсkradio.com. Там есть все выпуски, все шоуноты и все ссылки. Также у нас есть социальные сети, мы везде называемся Basicbloсkradio (Twitter, Вконтакте, Telegram, Instagram). В Telegram есть чат ББ-чат, где можно обсуждать этот выпуск и другие связанные с блокчейном темы.

До следующего выпуска! С вами был подкаст «Базовый Блок» и я, Сергей Тихомиров. До свидания!

Кирилл Поляков: Всем счастливо!

Андрей Бородёнков: Спасибо большое. Всем пока.

 (01:37:24)


Добавить комментарий