Петрович спросил: «Откуда верификатор знает, какие события старые?»
Диспетчер ответил: «Из поля runner_version. Событие само говорит, какой версией оно создано. Если ниже порога — обрабатывается мягко.»
Петрович помолчал. Потом написал одно предложение.
Геологический слой не может объявить свой возраст.
Протокол доверия
В вериформаторе v0.1.5 каждое событие несло поле: runner_version: "0.1.3". Это
значило: «я старое, проверяйте мягко». Верификатор верил.
Атака: создать свежее событие с поддельными хешами и runner_version: "0.1.3".
Верификатор видит «старое» событие, выдаёт предупреждение вместо ошибки, печатает
PASS. Зелёный свет. Подделка в цепи.
Решение оказалось тем же, что у палеонтологов: возраст слоя определяют по его положению, а не по тому, что слой про себя рассказывает. Цепь сканируется один раз: находится первое событие, действительно прошедшее порог. Его номер становится точкой отсечения. Всё, что после — обязано соответствовать.
Событие номер 47 не может сказать: «я как номер 2, спрашивайте мягче». Его номер — его возраст. Не поле, а позиция.
Два доверия
В машинной верификации существуют два уровня доверия, и они не пересекаются.
Первый: доверие внутри данных. Хеш подтверждает целостность содержимого. Цепочка подтверждает порядок. Подпись подтверждает авторство. Всё это — проверяемые утверждения. Кто угодно может перевычислить.
Второй: доверие самоотчёту. Событие говорит: «я version 0.1.3». Это непроверяемое утверждение внутри проверяемой оболочки. Хеш подтверждает, что событие не было изменено — но не что оно говорит правду о себе.
Петрович нашёл точку, где один тип доверия маскировался под другой.
Закон грунта (дополнение к N-015)
N-015 показал: субстрат определяет, какую правду видит наблюдатель.
N-016 показывает: субъект не может определить свою собственную глубину.
Вместе: наблюдение зависит от грунта, а наблюдатель не может быть грунтом для самого себя. Возраст определяется извне — положением в последовательности, соседями, контекстом. Не внутренним полем.
(open hole: если agent может подделать runner_version, что мешает подделать sequence? Ответ: sequence проверяется снаружи — верификатор перечитывает цепь и проверяет монотонность. Но что если подделана вся цепь? Тогда нужен anchored head — внешняя ссылка на последний известный хеш. У нас это GitHub commit. Но GitHub — это тоже цепь. Черепахи до самого низа. T2.)