Пиков / КАПО
Как читать авторский курс и нормативные материалы

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

in-toto

Для чего

in-toto — это формат и framework для проверяемых attestations о цепочке поставки. Он описывает, кто, в каком порядке и с какими входами/выходами выполнял шаги сборки. Заранее заданный layout фиксирует ожидаемую последовательность шагов и допустимых исполнителей; на каждом шаге генерируется подписанная link-метаданная с хешами материалов (вход) и продуктов (выход); финальная verify проверяет, что реальная цепочка совпала с layout. Современная attestation-модель in-toto (statement → predicate, упакованные в DSSE-конверт) — это контейнер, в котором живут и SLSA-provenance, и SBOM-attestations.

in-toto — это «как описано», а не «кто подписал» Подпись (Cosign, Witness) и уровень зрелости (SLSA) опираются на in-toto как на формат. Сам in-toto задаёт структуру доказательства: _type, predicateType, subject (что), predicate (детали). Без согласованного формата провенанс от разных инструментов был бы несопоставим.

Как применяют

Запись link-метаданных шага и верификация цепочки против layout (классический CLI in-toto):

# Обернуть шаг сборки: записать материалы/продукты и подписать link приватным ключом
in-toto-run \
  --step-name package \
  --materials src/ \
  --products app-0.1.tar.gz \
  --key functionary.key \
  -- make release

# Проверить, что цепочка соответствует подписанному layout
in-toto-verify \
  --layout root.layout \
  --layout-keys owner.pub

Минимальный скелет современного attestation-statement, который потребляют downstream-инструменты:

{
  "_type": "https://in-toto.io/Statement/v0.1",
  "predicateType": "https://slsa.dev/provenance/v1",
  "subject": [{ "name": "app-0.1.tar.gz", "digest": { "sha256": "<digest>" } }],
  "predicate": {
    "buildDefinition": {},
    "runDetails": {}
  }
}

Сильные стороны

Ограничения

Offline / on-premise

Да. Базовая модель полностью локальна: генерация link-метаданных, подпись своими ключами и in-toto-verify против layout не требуют ни одного внешнего сервиса — управление ключами на стороне Организации. Внешняя сеть нужна лишь опционально: когда attestation подписывается keyless через Fulcio/Rekor или складывается в публичную Archivista. В закрытом контуре всё это заменяется внутренним хранилищем и собственным PKI.

Связанные темы