SLSA Build Level 3 on your own builder

Rebuild a release from its Agent-ready Build Kit with the network off, get the image we published to the identical digest, and sign its SLSA v1 provenance with your own key. SLSA build levels

Who supplies what

SLSA Build Level 3 is earned by a build platform, not by an image: the platform generates the provenance, keeps builds from influencing one another, and keeps the key that signs the provenance out of reach of the build steps. So we don't stamp "SLSA 3" on an image. The build kit supplies the input side; your platform supplies the rest, and it is your platform that is assessed against the Level 3 requirements.

The build kit suppliesYour build platform supplies
A complete, pinned build definition: upstream's source (or official release artifact), every dependency vendored, the base images pinned by digest, and a pinned BuildKitA hosted, hardened build service
A build that runs with --network=none on a fresh builder every timeIsolated, ephemeral build runs that cannot influence one another
SLSA v1 provenance generated by BuildKit itself (--provenance, mode=max), not by any build stepA signing key the build steps cannot reach, and the step that signs the provenance after the build
VERIFY_OFFLINE.sh: the rebuilt image's digest against the one we publishedSomewhere to keep the signed provenance next to the image

The steps

From the build kit's own REBUILD.md

1. Check the kit is the one we shipped. Inside the unpacked build kit:

$ sha256sum -c CHECKSUMS.sha256

2. Rebuild on your hardened builder, with provenance. The image digest is the same with or without provenance.

$ ./BUILD_OFFLINE.sh --provenance   # --network=none; writes rebuilt.oci.tar with SLSA v1 provenance attached

3. Check it is the image we published. --online also confirms the Docker Hub tag holds that digest.

$ ./VERIFY_OFFLINE.sh
==> DIGEST MATCH

4. Sign the provenance with your platform's key. This is your platform's step, run after the build, with a key the build cannot reach. One way to do it, with the image pushed to your own registry and cosign signing with a key held in your KMS:

$ docker buildx imagetools inspect registry.example.com/app@sha256:<digest> \
    --format '{{json .Provenance.SLSA}}' > provenance.json
$ cosign attest --key kms://<your-key> --type slsaprovenance1 \
    --predicate provenance.json registry.example.com/app@sha256:<digest>

5. What you have: the same image we publish, checked to its digest, and SLSA v1 provenance for that build, signed by your infrastructure.

Build kits from 2026-10-10 carry --provenance. Each release's page says whether its offline rebuild has been verified to reproduce the published image bit-for-bit, and when. Reproduction is defined for linux/amd64.

Start from a build kit. One release, its complete offline build and its handbooks.For auditorsBuy a build kit