リリース成果物の検証
ZeroClaw は、ダウンロード可能なリリースアセットの正式なプロビナンスメカニズムとして、GitHub のアーティファクト証明を使用します。成功した各証明には、アセットダイジェスト、ソースコミット、およびリリースワークフローの識別情報が、SLSA v1.0 Build Level 2 のプロビナンスとして記録されます。
アテステーションは、アーティファクトがどこでどのようにビルドされたかを証明します。人間がソースをレビューしたこと、依存関係が安全であること、またはメンテナーアカウント、GitHub-hosted runner、GitHub control plane が侵害されていないことを証明するものではありません。完全な脅威モデルについては、リポジトリ内の docs/security/slsa-provenance.md を参照してください。
リリースワークフローは現在、アテステーションをベストエフォートのPhase A出力として扱います。検証用マテリアルに依存する前にリリースノートを確認してください。オンラインの来歴とオフラインのアーカイブが生成されたかどうかが記載されています。
オンライン検証
GitHub CLI をインストールし、アセットをダウンロードして、リリースワークフローとソースコミットに対して検証します:
VERSION=vX.Y.Z
SOURCE_DIGEST=<40-character-release-commit>
ASSET=zeroclaw-x86_64-unknown-linux-gnu.tar.gz
gh release download $VERSION --repo zeroclaw-labs/zeroclaw \
--pattern "$ASSET"
gh attestation verify "$ASSET" \
--repo zeroclaw-labs/zeroclaw \
--signer-workflow zeroclaw-labs/zeroclaw/.github/workflows/release-stable-manual.yml \
--source-digest "$SOURCE_DIGEST"
リリースタグには表示された完全なコミットを使用してください。コマンドが成功すると、検証済みの証明書とサブジェクトのダイジェストが出力されます。同じコマンドが install.sh、SHA256SUMS、両方のSBOMファイル、および検証アーカイブに適用されます。
オフライン検証
完全な Phase A の出力を伴う統合ワークフローによって生成されたリリースでは、zeroclaw-vX.Y.Z-verification.tar.gz という名前の 1 つのアーカイブが公開されます。これには次が含まれます:
- 各リリースペイロードにつき 1 つの
<artifact>.attestation.jsonlバンドル; trusted_root.jsonl、GitHub と Sigstore の信頼済みルートマテリアル;ATTESTATION-BUNDLES.md。アーティファクト名、SHA-256 ダイジェスト、バンドル名のインデックスです。
アーカイブは循環的なダイジェストを生成せずに自身の証明を含めることはできません。オンライン接続中にアーカイブと最終チェックサムファイルを検証することで、信頼をブートストラップしてください。その後、アーティファクト、アーカイブ、チェックサムファイルをオフライン環境に転送します。
接続済みのステージングステップ
VERSION=vX.Y.Z
SOURCE_DIGEST=<40-character-release-commit>
ASSET=zeroclaw-x86_64-unknown-linux-gnu.tar.gz
VERIFY_ARCHIVE="zeroclaw-${VERSION}-verification.tar.gz"
gh release download $VERSION --repo zeroclaw-labs/zeroclaw \
--pattern "$ASSET" \
--pattern SHA256SUMS \
--pattern "$VERIFY_ARCHIVE"
gh attestation verify "$VERIFY_ARCHIVE" \
--repo zeroclaw-labs/zeroclaw \
--signer-workflow zeroclaw-labs/zeroclaw/.github/workflows/release-stable-manual.yml \
--source-digest "$SOURCE_DIGEST"
gh attestation verify SHA256SUMS \
--repo zeroclaw-labs/zeroclaw \
--signer-workflow zeroclaw-labs/zeroclaw/.github/workflows/release-stable-manual.yml \
--source-digest "$SOURCE_DIGEST"
awk -v file="$VERIFY_ARCHIVE" '$2 == file { print }' SHA256SUMS | sha256sum -c -
mkdir verification
tar -xzf "$VERIFY_ARCHIVE" -C verification
また、転送前にアーティファクトのダイジェストを SHA256SUMS の該当行と照合してください:
awk -v file="$ASSET" '$2 == file { print }' SHA256SUMS | sha256sum -c -
切断された検証ステップ
--bundle と --custom-trusted-root の両方がステージング済みの検証マテリアルを指している場合、ネットワークリクエストは不要です:
gh attestation verify "$ASSET" \
--repo zeroclaw-labs/zeroclaw \
--signer-workflow zeroclaw-labs/zeroclaw/.github/workflows/release-stable-manual.yml \
--source-digest "$SOURCE_DIGEST" \
--bundle "verification/${ASSET}.attestation.jsonl" \
--custom-trusted-root verification/trusted_root.jsonl
SHA256SUMS と検証アーカイブはオンラインブートストラップメタデータであり、アーカイブ内にバンドルを含みません。install.sh および両方の SBOM を含む、アーカイブがビルドされる前に存在するすべてのペイロードは含みます。
SBOM
各リリースでは、チェックサム付きで証明済みの SBOM ファイルが 2 つ公開されます:
| ファイル | フォーマット |
|---|---|
zeroclaw-vX.Y.Z-sbom.spdx.json | SPDX JSON |
zeroclaw-vX.Y.Z-sbom.cdx.json | CycloneDX JSON |
バイナリアセットに使用したものと同じオンラインまたはオフラインのアテステーションコマンドで、いずれかの SBOM を検証します。その後、Syft や Grype などのツールで、検証済みファイルを検査できます。
コンテナーイメージ
GHCRのコンテナイメージは、cosignによってダイジェストで署名されたままです。これは、ダウンロード可能なリリースアセットに対するGitHub attestationのパスとは独立しています。
IMAGE=ghcr.io/zeroclaw-labs/zeroclaw
TAG=vX.Y.Z
cosign verify \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity-regexp "^https://github.com/zeroclaw-labs/zeroclaw/" \
"${IMAGE}:${TAG}"
ピン留めされたデプロイでは、可変タグではなくダイジェストを解決して${IMAGE}@${DIGEST}を検証してください。