«Система enterprise уровня за три недели». Павел Либер рассказал, как делали «Голос»
«Нас не только обманули, но и серьёзно недооценили»
Как прошли последние недели работы?
Мы собирали и проверяли данные для отчёта. Информации было очень много: тысячи протоколов, сотни тысяч бюллетеней. Всё это нужно было обработать, проанализировать, сопоставить и пересчитать, найти несоответствия, нарушения и фальсификации. А ещё структурировать и объяснить суть расхождений в результатах выборов.
Самый большой массив данных — 550 тысяч фотографий бюллетеней. Кстати, присылали нам не только их, но и котиков, фотографии побоев, благодарности команде «Голос» и даже угрозы: писали, что проект — «фальшивка, сделанная в Польше».
Но судя по откликам, большинство людей смотрели на «Голос» как на инструмент надежды. И сегодня мы чувствуем волну благодарности: люди получили вещественное доказательство фальсификаций. Отчёт «Голоса» стал частью иска, который адвокаты уже подали в Верховный суд, чтобы опровергнуть результаты выборов.
В этом сезоне белорусы показывают всему миру просто чудеса самоорганизации. Так наше общество становится всё более и более гражданским и вовлекается в процесс защиты своих голосов.
Также мы подготовили англоязычную версию отчёта, которую представим иностранным СМИ. С этим отчётом я уже выступал перед сеймом Литвы, показывая, что выборы нельзя признать состоявшимися. Сейм выслушал мой доклад и несколько других убедительных выступлений и проголосовал — почти единогласно — за непризнание Лукашенко президентом Беларуси. Мы хотим проделать это упражнение и перед другими странами.
Меня, как человека, который работает в ИТ, больше всего задевает, что выборы были сфальсифицированы настолько грубо и непрофессионально — даже обидно.
Это вы о чём, например?
Например, смешная ситуация, когда ЦИК не сходится с ЦИК. Ермошина объявила, сколько голосов собрала Светлана Тихановская в Минске. У нас в распоряжении были официальные протоколы голосования, подписанные председателями избирательных комиссий — более 1310 по стране. По Минску — 432 протокола (это 59% от общего количества участков в столице). Подсчитав голоса за Тихановскую только в этих протоколах, мы насчитали голосов больше, чем официально заявил ЦИК по всем минским участкам. Это значит, что ЦИК своих же протоколов в глаза не видел, ничего не считал, а просто озвучил нужный им результат. А весь процесс голосования — абсолютная фальшивка. И Центризбирком даже не пытается это скрыть.
Выборы должны были пройти как дежурное событие, спокойно и тихо. Государство оказалось не готово к тому, что ИТ-решения смогут так быстро внедриться в годами отшлифованный избирательный процесс и повлиять на него. «Голос» сыграл свою роль ещё до публикации финального отчета: своим появлением мы поменяли психологию избирательного процесса. Стали посредником между комиссиями и избирателями.
Параллельно наши партнеры из «Честных людей» и платформы «Зубр» собирали протоколы, обрабатывали их, фиксировали нарушения на участках. Все данные мы смогли свести в одну систему, несмотря на попытки властей создавать препятствия. Несмотря на то, что на несколько дней отключили интернет.
Не исключаем, на итоговой карте фальсификаций могут быть мелкие неточности — мы сделали форму для обратной связи и оперативно их исправляем. Погрешность не превышает и 2%. Наш отчёт — абсолютно репрезентативный. Протоколы стекались к нам со всех областей, из городов и деревень.
С уверенностью скажу: нас всех не только цинично обманули во время выборов, но и страшно недооценили.
Сначала нейросеть, потом волонтёр, потом модератор
Расскажите про команду, которая работала над проектом.
Команда — больше 40 человек — поделена на независимые группы. Каждая — занимается своим блоком: самой платформой и её основной страницей; чат-ботом; безопасностью и отказоустойчивостью; нейросетью и распознаванием бюллетеней. Есть команда, которая собирает волонтёров. Есть специалисты, которые курируют продвижение и пиар. Это абсолютно классический стартап: собрались люди по интересам, никому ничего не платят, всё делают в свободное время. Я, как и положено в стартапе, занимаюсь всем по чуть-чуть: менеджментом, дизайном, фронтендом, коммуникацией.
Абсолютное большинство наших людей находится вне Беларуси: работают в других странах либо вынуждены были временно выехать. Так безопаснее и проекту, и людям. При этом все мы — белорусы.
Как проверяли бюллетени?
Первый уровень проверки делала нейросеть. Там, где она не могла стопроцентно определить, что сфотографирован именно бюллетень в правильном виде, картинка переходила на уровень проверки волонтёрами.
Волонтёров мы тоже искали за рубежом — для безопасности. Они отсматривали бюллетени, убирали изображения паспортов или лица, если они были на фото. Какое-то время по соцсетям гуляла информация, что нужно фотографировать бюллетень вместе с паспортом. Несмотря на то, что «Голосу» это было не нужно (мы не хотели никаких персональных данных, кроме номера телефона), какое-то количество людей фотографировали документы. И нам пришлось заблюривать все эти фото, чтобы ни в коем случае данные не попали в публичный доступ.
Следующий уровень — модераторы, люди, которым мы абсолютно доверяем. Они перепроверяли данные после волонтёров.
«Теперь вы не можете доверять ни одному сайту, если заходите не под VPN»
Как вы решали вопрос с атаками на платформу? Когда пользователей с главной страницы «Голоса» перенаправляли на другой сайт.
Когда «Голос» только появился, нас не восприняли всерьёз и относились, как к очередной интернет-голосовалке. Но когда эта «интернет-голосовалка» за неделю зарегистрировала почти миллион человек — власти поняли, что это грозит большим количеством фотографий, информационного шума, волнениями. И начали на нас давить.
Сначала информационно — нас активно пропесочили государственные СМИ (ОНТ и БТ), которые пытались убеждать зрителей, что их данные — под угрозой. Пугали, что нас спонсируют «зарубежные кукловоды». Манипулировали законом и убеждали людей, что фотографировать бюллетень нельзя (хотя по закону — можно). Даже сделали скриншот нашей главной страницы и отфотошопили на нем счётчки — показали, будто у нас 700 млрд. регистраций. Очень нелепо пытались подорвать к нам доверие.
Александр Лукашенко поручил разобраться, что это за альтернативный подсчёт голосов. Лидия Ермошина назвала нас преступным проектом и теневым центризбиркомом.
Когда мы проектировали платформу, просчитывали варианты, как власть будет пытаться нам помешать. Мнения разошлись: часть команды считала, что нужно строить бесконечно глубокую систему защиты и безопасности от взломов и DDoS атак. Другая часть (включая меня) говорила, что базового уровня достаточно, потому что технологическими инструментами с нами вряд ли будут бороться.
Истина оказалась посередине. В день выборов усилиями, предполагаю, ОАЦ (Оперативно-аналитический центр) и НЦОТ (Национальный центр обмена трафиком) произошла подмена главной страницы «Голоса» — только для жителей Беларуси. Люди начали массово регистрироваться на платформе, чтобы отправлять фотографии бюллетеней. В какой-то момент мы обнаружили, что трафик из Беларуси резко упал — буквально обвалился. Начали выяснять и узнали, что в Беларуси по адресу нашей платформы открывается какая-то фальшивая заглушка, где пользователю прямо на странице предлагают ввести номер телефона и отправить бюллетень. Полагаю, чтобы перехватить у нас поток бюллетеней и получить номера телефонов людей — для последующих «разоблачений» на ТВ, мол, смотрите, ваши телефоны никак не защищены. Хотя наш метод регистрации был защищённым, а это — уровень «картонки».
Мы быстро выяснили, где располагается хостинг этой страницы, обратились к хостеру, объяснили ситуацию и за полтора часа заблокировали подделку. Но сам этот факт — вопиющий. Государство показало, что в попытках удержать власть оно готово на всё — даже на преступление. И так оно относится не только в выборам, но и к свободе интернета.
Если в стране есть механизмы, которые позволяют государству так просто совершить подобные действия, завтра вы вообще не должны доверять в принципе любому сайту, на который заходите, находясь в Беларуси не под VPN. Это дискредитирует наши госорганы и их методы работы в цифровом поле.
В сухом остатке — платформа «Голос» продолжала прекрасно работать через VPN, фотографии через чат-боты доходили. А людей мы оперативно проинформировали. Вся наша госмахина не смогла сломать платформу, сделанную весёлой группой стартаперов-волонтёров за три недели. И у меня до сих пор после этого случая в голове сидит вопрос: может ли наша страна отражать реальные угрозы и обеспечивать кибербезопасность?
А как «Голос» обеспечивал безопасность данных?
Безопасности данных и надёжности хранения мы уделяли особое внимание. Мы понимали: людей будут запугивать «сложной» айтишной терминологией, чтобы те боялись регистрироваться. Поэтому направляли много ресурсов, чтобы объяснять, как всё устроено и почему им ничего не угрожает.
По сути, мы запрашивали номер телефона через чат-бот, хэшировали его с солью, после чего диалог человека и платформы происходил в уже зашифрованном виде. Даже мы не сможем установить, с какого номера телефона голосовали на «Голосе» за определенного кандидата. Нам достаточно было проверить, что номер белорусский и он в системе ещё не зарегистрирован.
После регистрации, всё взаимодействие с пользователем происходило исключительно в чат-ботах. Мы выбрали их, потому что через чат-бот можно сообщить уникальный номер телефона и чат-боты в мессенджерах — гораздо стабильнее, их практически невозможно выключить или заблокировать. Более того, чат-бот в мессенджере прячет за собой бэкенд, с которым он работает, и заблокировать этот бек-энд очень сложно.
Так что даже эта фальшивая страница нам особо не навредила — люди продолжили работать с мессенджерами. Только очень небольшое количество пользователей что-то отправили на сайт. Но мы вернули себе и этот, перехваченный, поток.
Было ещё одно опасение — мошенники с десяткой симкарт, которые будут голосовать за одного кандидата с разных номеров.
Таких случаев не может быть много на уровне страны. Но даже если они и были, мы анализировали не только с какого номера нам отправили данные, но и качество бюллетеней — чтобы в системе не было одинаковых, загруженных разными людьми. Тут нам помогла нейросеть. Мы допускали, что если очень извратиться, какой-то человек сможет отправить дубликат. Но когда речь идёт про 1,26 млн зарегистрированных на платформе людей, отклонение в пару процентов допустимо. При этом комбинация «уникальный номер телефона + многоуровневая проверка» была признана нами как надежная. Поэтому мы запустили проект с такой механикой.
«Людей из команды арестовали»
Вы сегодня находитесь за пределами Беларуси. Собираетесь приезжать назад?
Думаю, сейчас мне опасно возвращаться. Сегодня генпрокуратура считает, что «Голос» — это незаконный экзитпол и рассматривает его создание как административное правонарушение. Но я не уверен, что завтра оно не превратится в уголовное.
За неделю до выборов мы ощущали не только информационное давление. Нескольких людей из команды арестовали. По нашей информации, было дано распоряжение искать каждого, кто имеет отношение к «Голосу». Потому что на глазах у всех (и, в первую очередь, у властей) формировался проект, мощности которого хватит, чтобы опровергнуть результаты ЦИК.
Есть ли план по масштабированию? Предлагать решения другим странам, например.
Когда мы публично отвечали на обвинения ЦИК в наш адрес, мы обещали выложить код платформы в open source.
Многие специалисты в ИТ-сообществе интересовались, как устроен «Голос». До выборов мы не рассказывали в деталях, чтобы не подсказать потенциальные уязвимости. Но сейчас, когда выборы прошли, мы готовимся показать, что у «Голоса» под капотом.
Сегодня мы видим, что платформу можно трансформировать под новые задачи. Например, она может стать крупнейшей в стране площадкой для опросов и голосований. Сейчас мы общаемся с Координационным Советом на эту тему.
Что касается применения нашего опыта в других странах: сегодня высокий интерес мы видим со стороны России и Казахстана. В Казахстане скоро выборы — и, судя по обращениям, проблема доверия избирательной системе актуальна и для них. Демократическим странам вряд ли нужно такое решение. Но для них мы будем интересны как кейс, необычный опыт, когда ИТ-проекты надстраиваются над гражданскими процессами, чтобы сделать их прозрачными и легитимными.
Помните, 22 июля вы написали пост в Фейсбуке, что выборам нужны digital-инструменты для проверки голосов? Мы с вами это обсудили, потом вы пропали. Я так понимаю — искать команду.
Я решил сохранять анонимность для безопасности проекта, команды и своей собственной. После поста в Фейсбуке меня познакомили с инициативой «Честные люди» и с представителями штаба Виктора Бабарико. Я взялся помогать им с двумя проектами: «Скорая взаимопомощь» и интеграция «Честных людей» с платформой «Зубр». Попутно познакомился с прекрасным разработчиком, который стал одним из наших главных координаторов и продакт оунеров. У него была идея платформы, похожей на «Голос», он тоже читал мой пост, мы задружились.
Решили, что проект надо делать. Вместе с «Честными людьми» и платформой «Зубр» создали и запустили эту совершенно новую экосистему. И, честно, для меня это настоящее чудо: как всё сложилось в единый связанный продукт, где данные перетекают из одной системы в другую, анализируются. Мы построили сложную систему enterprise уровня. Это потрясающе!
Я достаточно долго и много работаю в крупной ИТ-компании. И у меня были сомнения, что люди могут самоорганизоваться и сделать такого уровня продукт без всех этих 20 слоёв менеджмента. Но это произошло, исключительно на энергии небезразличных людей, которые хотят помочь миллионам таких же небезразличных.
Вы остались не в Беларуси, ваша команда — тоже. Есть ли вероятность, что все светлые головы так и не вернуться сюда, а те, что остались — уедут? Ради чего тогда всё это было?
Делая этот и другие проекты, мы верим, что они создают новую Беларусь и формируют новое гражданское общество. Думаю, вы сами увидели, как страна изменилась и как изменились люди. Это уже то, ради чего всё стоило затевать. Я искренне верю, что мы вернёмся — и вернёмся в новую Беларусь. Из которой никому и никогда не захочется уезжать. А тем, кто по разным причинам уехал раньше, — обязательно захочется вернуться.
Читать на dev.by