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 supplies | Your 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 BuildKit | A hosted, hardened build service |
A build that runs with --network=none on a fresh builder every time | Isolated, ephemeral build runs that cannot influence one another |
SLSA v1 provenance generated by BuildKit itself (--provenance, mode=max), not by any build step | A 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 published | Somewhere to keep the signed provenance next to the image |
The steps
From the build kit's own REBUILD.md1. 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.