Доверие к коду
Лекция Кена Томпсона из 1984, после которой популяризовался термин “троян” (хотя он использовался и раньше). Интересен пример, на котором Томпсон его разобрал.
Пусть есть какая-то программа с вредоносным кодом. Получили ее исходники — там все чисто. Где искать проблему? В компиляторе/системе сборки. Получаем их исходники — тоже ничего. Где же проблема? В сборке самого компилятора. Но сборку сборки тоже надо собрать… Но неизбежно в конце будет что-то, чему нужно будет довериться.
Но хотя бы начало цепочки можно сделать очень маленьким, которое можно проверить “вручную”, и постепенно наращивать функциональность до нужной. Сам процесс построения такой цепочки называется bootstrapping (раскруткой).
У меня были смутные знания, что чем-то подобным занимается Debian, но нет, у него пока в целях только более слабое свойство — воспроизводимые сборки. А ближе всего именно к реализации изначальной идеи — экзотический менеджер пакетов Guix, у которого начало цепочки — hex0 (357 байт).
Однако, we need to go deeper — а стоит ли доверять операционной системе, где происходит сборка? А железу и его драйверам?…