← Все уязвимости
💻 Программное обеспечение, которое нельзя проверить

Невозможно доказать, что код настоящий

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

Видео-объяснение скоро

60 секунд простого объяснения этой уязвимости.

Что произошло на самом деле

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

Как обстоит дело сегодня

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

Чтение меню — это не то же самое, что попробовать еду

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

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

Почему это важно

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

Как TrustVoting это решает

TrustVoting берет обязательство на воспроизводимые сборки: пересобери опубликованный исходный код, получишь идентичный двоичный файл — затем уровень целостности (контрольные суммы + подтвержденная загрузка) доказывает, что машина запускает именно этот двоичный файл. Открытый код → сборка, которую может воспроизвести кто угодно → машина, которая доказывает, что она ее запускает.

Как TrustVoting её устраняет

TrustVoting берет обязательство на воспроизводимые сборки: любой может взять опубликованный исходный код, пересобрать его и подтвердить, что он создает точный двоичный файл, который запускает машина — затем уровень целостности (контрольные суммы + подтвержденная загрузка) доказывает, что машина запускает этот двоичный файл.