← Все статьи

Открытое программное обеспечение для голосования: необходимость, а не мода

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

7 января 2021 года — утром после штурма Капитолия — группа компьютерных криминалистов вошла в офис избирательной комиссии округа Кофи, штат Джорджия, и вышла с копией всего. Система управления выборами. Устройства для разметки избирательных бюллетеней. Программное обеспечение Dominion штата. Все это было записано на диски и вынесено из офиса.

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

Секретность — это не безопасность. Округ Кофи это доказал. Но под заголовками скрывается более глубокий урок — и он применим независимо от того, взломает кто-нибудь систему или нет.


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

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

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

Это не модель безопасности. Это коммерческое соглашение.

Исследователи из Принстона, разобрав машину Diebold AccuVote-TS в 2006 году — того же типа сенсорного экрана, развернутого у миллионов американских избирателей — обнаружили, что программное обеспечение можно обойти примерно за минуту с помощью карты памяти. Это была не просто подделка: обход, который переписал все логи и счетчики так, чтобы они остались внутренне согласованными, не оставляя обнаруживаемого следа. Код мог даже распространяться на другие машины во время обычных передач в ночь выборов. Исследователи опубликовали это, потому что они имели машину. Они могли посмотреть программное обеспечение. Большинство людей никогда не получают такой возможности.

AccuVote-TS не был исключением. Это было окно — ненадолго открытое — в системы, которые обычно закрыты наглухо.

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


«Мы это проверили» — это утверждение, а не вывод

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

В округе Антрим, штат Мичиган, в ноябре 2020 года были опубликованы неправильные неофициальные результаты. Не немного неправильно — тысячи голосов в неправильной графе. Ошибка была обнаружена, но не благодаря какой-либо внутренней защите. Ее обнаружили, потому что результат был абсурдно невероятным для округа, который, как все знали, явно поддерживал республиканцев. Более тонкая ошибка в более конкурентном округе могла бы остаться незамеченной.

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

В одностороннем голосовании двенадцать голосов — это ошибка округления. Но вот в чем проблема: в действительно конкурентном голосовании — решенном пятьюдесятью голосами, или двадцатью, или пятью — пересчет вручную, который сам по себе ошибается на дюжину голосов, не может ничего разрешить. Он просто не может. Математически невозможно. «Золотой стандарт» ручной проверки несет с собой собственную неустранимую человеческую ошибку: неоднозначные отметки, усталость в 2 часа ночи, спорные решения об истолковании, принятые по-разному разными парами рук.

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

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


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

Люди слышат «открытое программное обеспечение для голосования» и воображают хакеров, которых приглашают сломать выборы. Это неправильная картина.

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

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

Современные исследования криптографического голосования идут дальше. Открытое программное обеспечение — это основание, но структура, построенная на нем, преобразует «вы можете это прочитать» в «вы можете это доказать».

Вот как эти части подходят друг другу:

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

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

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

Вместе эти три слоя превращают вопрос из «доверяете ли вы производителю?» в «можете ли вы сами проверить математику?»

Этот сдвиг — это все.


Почему округ Кофи доказывает, что секретность — неправильная стратегия

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

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

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

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

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

Реконструкция Lawfare истории округа Кофи стоит прочитать полностью. Отчеты Atlanta Journal-Constitution добавляют дополнительные детали о том, что было скопировано и как это распространялось. Вместе они иллюстрируют принцип, который специалисты по безопасности понимают десятилетиями: системы, которые полагаются на неясность, хрупки именно так, как это важнее всего.


Проблема с воспроизводимыми сборками не теоретична

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

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

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

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

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

Ни одна система голосования в США, в настоящее время развернутая в масштабе, не предлагает независимо воспроизводимые сборки, которые любой член общественности может проверить. Этот промежуток реален. Он измеряем. И он не закрыт никаким чиновником, говорящим вам, что система была протестирована.

Посмотрите, как этот промежуток сравнивается в юрисдикциях по всему миру →


Что на самом деле означает «верифицируемый» — и что это все еще не означает

Здесь стоит быть точным, потому что «верифицируемый» используется свободно.

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

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

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

Иерархия выглядит так:

  • Закрытое, собственническое программное обеспечение: полностью доверьте производителю
  • Только открытое программное обеспечение: доверьте, что никто не вставил что-то вредоносное при сборке
  • Открытое программное обеспечение + воспроизводимые сборки: доверьте, что опубликованный код и работающий двоичный файл совпадают, независимо проверяемо
  • Открытое программное обеспечение + воспроизводимые сборки + E2E верификация: доверьте математике, не людям

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


Истина, которую можно поделиться

Вот строка, которую стоит скопировать в скриншот:

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

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

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

Что бы это сделало проверяемым кем-либо? Три вещи, прямо сейчас не решенные в большинстве юрисдикций США:

  1. Полный публичный исходный код для каждой системы голосования — не исходный код, доступный под NDA, но действительно публичный
  2. Воспроизводимые сборки с опубликованными хешами, которые кто-то может проверить
  3. Криптографические квитанции сквозного типа чтобы отдельные избиратели могли проверять включение своего собственного бюллетня

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

Это не теория заговора. Это требование инженерии.

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


Источники