Скачайте артефакты выпуска и перед установкой проверьте подписи, контрольные суммы и аттестации. Используйте идентичность подписанта и тег скачанной версии. Требования к сети описаны ниже.
Не передавайте установщик в shell через pipe. Скачайте артефакты, верифицируйте их, затем запускайте. Шаги ниже описывают, как это сделать.
Следующая версия — 1.0, первая стабильная версия Community и Business/Enterprise. Она ещё не выпущена. Возможности и их текущие ограничения описаны отдельно. Честность и ограничения.
Что поставляется с релизом
Помеченный релиз содержит бинарные архивы плюс всё необходимое для их аттестации:
| Артефакт | Что это |
|---|---|
checksums.txt (+ .sig, .pem) | SHA-256 каждого артефакта, с подписью cosign и сертификатом (подпись без ключа) |
*_<os>_<arch>.tar.gz | архив(ы) релиза для linux/darwin x amd64/arm64 |
*.spdx.sbom.json | SBOM выпуска в формате SPDX |
*.sbom.sigstore.json | SPDX SBOM, обёрнутый как подписанная in-toto аттестация над архивом |
*.vex.sigstore.json | заявление OpenVEX как подписанная in-toto аттестация над архивом |
*.intoto.jsonl | провенанс сборки SLSA (создан slsa-github-generator) |
| образ контейнера | опубликован в реестре, подписан и аттестован, привязан по дайджесту |
Аттестации ссылаются на каждый артефакт по его байтам, никогда по изменяемому тегу.
Путь одной командой
Получите scripts/verify-release.sh из доверенной копии исходного кода на теге выпуска; скрипт не входит в файлы выпуска. Запуская его, вы доверяете этой копии. Укажите путь к скрипту из каталога скачанных файлов; он сообщает результат каждого шага проверки.
/path/to/olivares/scripts/verify-release.sh --source-tag <version>
--offline убирает обращение к Rekor из вызовов cosign, но не делает всю проверку независимой от сети. Проверке без ключа нужны корни доверия Sigstore, которые загружаются при отсутствии в кеше. У скрипта нет параметра --trusted-root. Проверкам пакетов SBOM и OpenVEX нужен корень доверия даже с --key; шаг SLSA запускает slsa-verifier без офлайн-параметра. Публичные выпуски подписаны без ключа и не публикуют ключ проверки. Используйте --key только для файлов, открытый ключ подписи которых вы получили от владельца по каналу, отдельному от канала получения проверяемых файлов.
Скрипту нужны cosign и sha256sum. В пользовательском режиме отсутствие аттестаций или slsa-verifier отмечается как пропущенный шаг. Пропущенный шаг не проверен. Режим --strict-publication только для издателя также требует --cert-identity и --source-uri; он отклоняет --key и --offline.
Что проверяется, шаг за шагом
Если предпочитаете выполнять проверки вручную, вот цепочка. Подставьте <archive> для каждого *.tar.gz.
1. Подпись над контрольными суммами
Верификация checksums.txt транзитивно доверяет каждому артефакту, указанному в нём. Проверка без ключа привязывает подписывающую идентичность к OIDC-идентичности GitHub Actions проекта:
cosign verify-blob \
--certificate checksums.txt.pem \
--signature checksums.txt.sig \
--certificate-identity-regexp '^https://github\.com/olivaresai/olivares/\.github/workflows/release\.yml@refs/tags/v?[0-9]+\.[0-9]+(\.[0-9]+)?$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
checksums.txt
2. Целостность артефактов
Пересчитайте хеш каждого артефакта по теперь доверенному манифесту:
sha256sum --ignore-missing --check checksums.txt
3. Аттестация SBOM (SPDX)
cosign verify-blob-attestation --type spdxjson \
--certificate-identity-regexp '^https://github\.com/olivaresai/olivares/\.github/workflows/release\.yml@refs/tags/v?[0-9]+\.[0-9]+(\.[0-9]+)?$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--bundle <archive>.sbom.sigstore.json --new-bundle-format \
--check-claims <archive>
4. Аттестация OpenVEX
Заявление проекта об уязвимостях, верифицированное тем же способом:
cosign verify-blob-attestation --type openvex \
--certificate-identity-regexp '^https://github\.com/olivaresai/olivares/\.github/workflows/release\.yml@refs/tags/v?[0-9]+\.[0-9]+(\.[0-9]+)?$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--bundle <archive>.vex.sigstore.json --new-bundle-format \
--check-claims <archive>
5. Провенанс SLSA
slsa-verifier verify-artifact <archive> \
--provenance-path <provenance>.intoto.jsonl \
--source-uri github.com/olivaresai/olivares
Верификация образа контейнера
Проверка образа без ключа доказывает образ по той же идентичности GitHub Actions, но требует сеть. Всегда разрешайте и развёртывайте по дайджесту, никогда по изменяемому тегу:
IMAGE=ghcr.io/olivaresai/olivares
DIGEST="$(crane digest "$IMAGE:<version>")"
REF="$IMAGE@$DIGEST"
cosign verify "$REF" \
--certificate-identity-regexp '^https://github\.com/olivaresai/olivares/\.github/workflows/release\.yml@refs/tags/v?[0-9]+\.[0-9]+(\.[0-9]+)?$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
В изолированной от сети среде
Оператор создаёт пакет для изолированной сети с ключом cosign, которым управляет. Пакет содержит соответствующий cosign.pub; скрипты проверяют Helm chart и сохранённые образы этим ключом без Rekor. Прежде чем доверять пакету, сравните открытый ключ с копией, полученной от владельца по отдельному каналу. Ключ внутри пакета не подтверждает подлинность самого пакета. Образ проходит проверку только при наличии подписи, созданной этим ключом.
for d in images/*/; do
cosign verify --local-image "$d" --insecure-ignore-tlog --key cosign.pub
done
cosign verify-blob --key cosign.pub --insecure-ignore-tlog --signature chart/*.tgz.sig chart/*.tgz
Что верификация доказывает и что не доказывает
Криптографическая верификация доказывает провенанс и целостность: что артефакт — это точный, неизменённый результат, который наш конвейер собрал и подписал. Она не сертифицирует поведение программного обеспечения или какую-либо позицию соответствия. Olivares AI спроектирован для — а не сертифицирован по — фреймворкам, таким как SOC 2 и ISO 27001; см. Честность и ограничения для понимания, что это различие означает на практике.
Верификация также настолько полна, насколько полны аттестации, которые данный релиз фактически опубликовал. Верификатор сообщает о каждом шаге, который выполняет; если сборка пропускает артефакт, соответствующему шагу нечего проверять. Стандартный релиз прикладывает артефакты SBOM, OpenVEX и SLSA, указанные выше.