Everything the estate signs traces back to one key set, minted in a single offline ceremony. Two keys own the firmware and stay in offline escrow. Three sign what the pipeline builds and live in CI as masked, protected variables. Every public half is published at /keys/, so a cairn-signed image, UKI or kernel module can be checked against a fingerprint fetched out of band.

ONE CEREMONY, TWO CUSTODY TIERS OFFLINE ESCROW, NEVER IN CI CI VARIABLES, MASKED signs KEK.auth signs db.auth ONE AIRGAPPED RUN the key ceremony mints the whole set it reaches no network and enrolls nothing PK, the Platform Key owns the firmware KEK, the Key Exchange Key authorizes the signature database UKI signing systemd-boot, the UKI, kernel modules PCR11 policy the TPM policy each UKI carries cosign promoted image digests, opt-in ENROLLED AT INSTALL the firmware signature database cairn's certificate, plus vendor CAs PUBLIC HALVES published at /keys/ every anchor, with its fingerprint

The custody split is the shape of the whole set. The keys that own the firmware never enter CI, and the keys that sign artifacts never leave it.

Trust arrives as signed payloads

None of the three certificates signs another. Each is self-signed, so trust does not flow down an issuer chain the way web PKI does. It flows through the UEFI authenticated-variable payloads the ceremony builds. The firmware trusts the Platform Key because an operator enrolled it, trusts the Key Exchange Key because the Platform Key signed the payload carrying it, and trusts cairn’s signing certificate because the Key Exchange Key signed the payload carrying the firmware signature database (db). sb-ceremony-auth.sh builds all three and states their exact contents.

The base image carries those same payloads, so an install copies them to the ESP and systemd-boot enrolls them from Setup Mode (the Containerfile, D19). A payload holds public certificates only, and it rides inside the sealed digest like everything else in the image.

What the firmware runs before the OS exists

Under Secure Boot the firmware checks every EFI binary it executes against the signature database, and that includes option ROMs. A GPU’s pre-boot graphics driver and a BMC’s video code both run during POST, before any bootloader. Device vendors have those ROMs signed through Microsoft, so the binaries chain to Microsoft’s UEFI CA. A database holding only cairn’s certificate would stop that vendor code loading.

So the database holds cairn’s signing certificate alongside the Microsoft and Windows CAs, both generations, because binaries shipping today still chain to the 2011 generation. sb-vendor-certs-fetch.sh checks that against real binaries instead of assuming it, and the 2011 set leaves once nothing on the boot path still chains to it.

ONE CERTIFICATE COVERS BOOT AND MODULES THE FIRMWARE SIGNATURE DATABASE the same certificate Microsoft and Windows CAs vendor-signed code chains here cairn's UKI signing certificate systemd-boot, the UKI, kernel modules option ROMs GPU and BMC pre-boot code systemd-boot, the UKI the sealed boot path AT OS RUNTIME kernel modules ZFS and NVIDIA kernel lockdown checks every module signer %:.platform no shim, .machine stays empty

The vendor CAs stay in the database because the firmware runs vendor code before it ever runs ours. One cairn certificate covers the rest, at boot and again under lockdown.

Kernel modules land in the platform keyring

cairn ships no shim, so a module signer has one route into the kernel: Fedora’s platform-keyring fallback. The certificate’s shape decides where it lands, not its subject. A CA certificate without the keyCertSign bit fails Fedora’s machine-keyring gate and resolves in %:.platform, the one path this estate has measured (D29). A working signer and a broken one carry the identical subject, so the landing keyring is the only thing that tells them apart, and the pipeline’s sealed boot gate asserts it by Subject Key Identifier (assert-sealed.sh).

Images are signed with our own key

The estate signs promoted image digests with its own cosign key instead of a keyless transparency-log identity, because containers/image cannot verify GitLab’s keyless identities at pull time. A CI token puts a URI in the certificate’s subject alternative name, and the sigstoreSigned matcher checks a literal subject email (the evidence lane’s record). An own-key signature is one the container runtime verifies at the pull, against the published fingerprint. The tradeoff is the transparency log and the identity rotation that keyless signing would have brought. The same ceremony mints the key, and both signing and attestation are opt-in per repo at promotion: the evidence lane turns them on.

Checking it from outside

/keys/ publishes every public half with its SHA-256 fingerprint and the one command that reproduces it from the downloaded file.

HOW AN OUTSIDER CHECKS AN ARTIFACT STEP 1 fetch the anchor cairn.dunn.dev/keys/ STEP 2 check the fingerprint from the downloaded file STEP 3 a promoted image cosign, own key, no tlog STEP 3 a running host modinfo names the signer

Nothing in the check depends on the registry that served the artifact. The anchor comes from this site, and the fingerprint is reproduced locally.