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

В настоящее время повторяемость сборок достигнута для 83.5% пакетов, представленных в репозитории main. Любой пользователь может лично убедиться, что предлагаемый дистрибутивом бинарный пакет байт в байт совпадает с пакетом, собранным им лично из исходных текстов. Без возможности проверить тождественность бинарной сборки пользователю остаётся лишь слепо доверять сборочной инфраструктуре дистрибутива.

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

Для оценки бинарных пакетов подготовлена специальная утилита debbindiff, позволяющая детально проанализировать различия. Для многих сборочных инструментов подготовлены патчи, в основном связанные с отключением добавления информации о времени сборки. Контроль за отклонениями в повторяемости сборки осуществляется благодаря введению в строй нескольких систем пересборки пакетов из репозитория unstable, построенных с использованием системы непрерывной интеграции Jenkins и запущенных на разных серверах, настройки и начинка которых отличаются.

Источник: http://www.opennet.ru/opennews/art.shtml?num=41670