«Система enterprise уровня за три недели». Павел Либер рассказал, как делали «Голос»

20 августа платформа «Голос» представила итоговый отчёт, который должен доказать то, что президентские выборы прошли с серьезными нарушениями. Разработчик платформы Павел Либер подробно рассказал dev.by про безопасность «Голоса», обработку персональных данных, атаки со стороны властей и перспективы проекта.
Оставить комментарий

«Нас не только обманули, но и серьёзно недооценили»

Как прошли последние недели работы?

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

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

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

Что дальше? Помимо работы адвокатов, мы бы хотели, чтобы люди начали самоорганизовываться — обходить свои подъезды, знакомых, друзей, собирать физические подписи — кто за кого проголосовал, сравнивать с показателями ЦИК.

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

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

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

Это вы о чём, например?

Например, смешная ситуация, когда ЦИК не сходится с ЦИК. Ермошина объявила, сколько голосов собрала Светлана Тихановская в Минске. У нас в распоряжении были официальные протоколы голосования, подписанные председателями избирательных комиссий — более 1310 по стране. По Минску — 432 протокола (это 59% от общего количества участков в столице). Подсчитав голоса за Тихановскую только в этих протоколах, мы насчитали голосов больше, чем официально заявил ЦИК по всем минским участкам. Это значит, что ЦИК своих же протоколов в глаза не видел, ничего не считал, а просто озвучил нужный им результат. А весь процесс голосования — абсолютная фальшивка. И Центризбирком даже не пытается это скрыть.

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

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

Параллельно наши партнеры из «Честных людей» и платформы «Зубр» собирали протоколы, обрабатывали их, фиксировали нарушения на участках. Все данные мы смогли свести в одну систему, несмотря на попытки властей создавать препятствия. Несмотря на то, что на несколько дней отключили интернет.

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

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

Сначала нейросеть, потом волонтёр, потом модератор

Расскажите про команду, которая работала над проектом.

Команда — больше 40 человек — поделена на независимые группы. Каждая — занимается своим блоком: самой платформой и её основной страницей; чат-ботом; безопасностью и отказоустойчивостью; нейросетью и распознаванием бюллетеней. Есть команда, которая собирает волонтёров. Есть специалисты, которые курируют продвижение и пиар. Это абсолютно классический стартап: собрались люди по интересам, никому ничего не платят, всё делают в свободное время. Я, как и положено в стартапе, занимаюсь всем по чуть-чуть: менеджментом, дизайном, фронтендом, коммуникацией.

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

Как проверяли бюллетени?

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

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

Следующий уровень — модераторы, люди, которым мы абсолютно доверяем. Они перепроверяли данные после волонтёров.

«Теперь вы не можете доверять ни одному сайту, если заходите не под VPN»

Как вы решали вопрос с атаками на платформу? Когда пользователей с главной страницы «Голоса» перенаправляли на другой сайт.

Когда «Голос» только появился, нас не восприняли всерьёз и относились, как к очередной интернет-голосовалке. Но когда эта «интернет-голосовалка» за неделю зарегистрировала почти миллион человек — власти поняли, что это грозит большим количеством фотографий, информационного шума, волнениями. И начали на нас давить.

Сначала информационно — нас активно пропесочили государственные СМИ (ОНТ и БТ), которые пытались убеждать зрителей, что их данные — под угрозой. Пугали, что нас спонсируют «зарубежные кукловоды». Манипулировали законом и убеждали людей, что фотографировать бюллетень нельзя (хотя по закону — можно). Даже сделали скриншот нашей главной страницы и  отфотошопили на нем счётчки — показали, будто у нас 700 млрд. регистраций. Очень нелепо пытались подорвать к нам доверие.

Мы, признаться, разочарованы таким уровнем. Рассчитывали на более прогрессивные методы. Но с законным и честным ИТ-решением из 21 века боролись инструментами 20-го. Пресловутая цифровая трансформация, которую в Беларуси так ждали, началась не в том время и не в том месте, где властям было выгодно.

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

Когда мы проектировали платформу, просчитывали варианты, как власть будет пытаться нам помешать. Мнения разошлись: часть команды считала, что нужно строить бесконечно глубокую систему защиты и безопасности от взломов и DDoS атак. Другая часть (включая меня) говорила, что базового уровня достаточно, потому что технологическими инструментами с нами вряд ли будут бороться.

Истина оказалась посередине. В день выборов усилиями, предполагаю, ОАЦ (Оперативно-аналитический центр) и НЦОТ (Национальный центр обмена трафиком) произошла подмена главной страницы «Голоса» — только для жителей Беларуси. Люди начали массово регистрироваться на платформе, чтобы отправлять фотографии бюллетеней. В какой-то момент мы обнаружили, что трафик из Беларуси резко упал — буквально обвалился. Начали выяснять и узнали, что в Беларуси по адресу нашей платформы открывается какая-то фальшивая заглушка, где пользователю прямо на странице предлагают ввести номер телефона и отправить бюллетень. Полагаю, чтобы перехватить у нас поток бюллетеней и получить номера телефонов людей — для последующих «разоблачений» на ТВ, мол, смотрите, ваши телефоны никак не защищены. Хотя наш метод регистрации был защищённым, а это — уровень «картонки».

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

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

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

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

А как «Голос» обеспечивал безопасность данных?

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

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

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

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

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

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

Таких случаев не может быть много на уровне страны. Но даже если они и были, мы анализировали не только с какого номера нам отправили данные, но и качество бюллетеней — чтобы в системе не было одинаковых, загруженных разными людьми. Тут нам помогла нейросеть. Мы допускали, что если очень извратиться, какой-то человек сможет отправить дубликат. Но когда речь идёт про 1,26 млн зарегистрированных на платформе людей, отклонение в пару процентов допустимо. При этом комбинация «уникальный номер телефона + многоуровневая проверка» была признана нами как надежная. Поэтому мы запустили проект с такой механикой.

«Людей из команды арестовали»

Вы сегодня находитесь за пределами Беларуси. Собираетесь приезжать назад?

Думаю, сейчас мне опасно возвращаться. Сегодня генпрокуратура считает, что «Голос» — это незаконный экзитпол и рассматривает его создание как административное правонарушение. Но я не уверен, что завтра оно не превратится в уголовное.

За неделю до выборов мы ощущали не только информационное давление. Нескольких людей из команды арестовали. По нашей информации, было дано распоряжение искать каждого, кто имеет отношение к «Голосу». Потому что на глазах у всех (и, в первую очередь, у властей) формировался проект, мощности которого хватит, чтобы опровергнуть результаты ЦИК.

Есть ли план по масштабированию? Предлагать решения другим странам, например. 

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

Многие специалисты в ИТ-сообществе интересовались, как устроен «Голос». До выборов мы не рассказывали в деталях, чтобы не подсказать потенциальные уязвимости. Но сейчас, когда выборы прошли, мы готовимся показать, что у «Голоса» под капотом.

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

Что касается применения нашего опыта в других странах: сегодня высокий интерес мы видим со стороны России и Казахстана. В Казахстане скоро выборы — и, судя по обращениям, проблема доверия избирательной системе актуальна и для них. Демократическим странам вряд ли нужно такое решение. Но для них мы будем интересны как кейс, необычный опыт, когда ИТ-проекты надстраиваются над гражданскими процессами, чтобы сделать их прозрачными и легитимными.

Помните, 22 июля вы написали пост в Фейсбуке, что выборам нужны digital-инструменты для проверки голосов? Мы с вами это обсудили, потом вы пропали. Я так понимаю — искать команду.

Я решил сохранять анонимность для безопасности проекта, команды и своей собственной. После поста в Фейсбуке меня познакомили с инициативой «Честные люди» и с представителями штаба Виктора Бабарико. Я взялся помогать им с двумя проектами: «Скорая взаимопомощь» и интеграция «Честных людей» с платформой «Зубр». Попутно познакомился с прекрасным разработчиком, который стал одним из наших главных координаторов и продакт оунеров. У него была идея платформы, похожей на «Голос», он тоже читал мой пост, мы задружились.

Решили, что проект надо делать. Вместе с «Честными людьми» и платформой «Зубр» создали и запустили эту совершенно новую экосистему. И, честно, для меня это настоящее чудо: как всё сложилось в единый связанный продукт, где данные перетекают из одной системы в другую, анализируются. Мы построили сложную систему enterprise уровня. Это потрясающе!

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

Вы остались не в Беларуси, ваша команда — тоже. Есть ли вероятность, что все светлые головы так и не вернуться сюда, а те, что остались — уедут? Ради чего тогда всё это было?

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

Разработчик «Голоса» рассказал про финальный отчет платформы
По теме
Разработчик «Голоса» рассказал про финальный отчет платформы
Лукашенко озаботился альтернативным подсчётом голосов на выборах
По теме
Лукашенко озаботился альтернативным подсчётом голосов на выборах
«Голос» представил итоговый отчёт о выборах
По теме
«Голос» представил итоговый отчёт о выборах

Читать на dev.by