Skip to content

sceau

A Kubernetes KMS v2 plugin that encrypts etcd data at rest by sealing data encryption keys directly with a TPM 2.0. No keys to generate, store, rotate, or back up — the TPM's storage root key never leaves the chip.

Build License Rust Status


What is sceau?

sceau (French for "seal") is a Kubernetes KMS v2 gRPC plugin written in Rust. When kube-apiserver writes a Secret, it generates a data encryption key (DEK), encrypts the Secret with it, and hands the DEK to sceau over a unix socket. sceau seals the DEK inside the host's TPM 2.0 and returns the sealed blob as the KMS ciphertext. On read, the blob is loaded back into the TPM and unsealed.

The root of trust is the TPM's Storage Root Key (SRK) — recreated deterministically from the standard RSA-2048 template at every startup, never exported, never on disk.

kube-apiserver ──unix socket──> sceau ──/dev/tpmrm0──> TPM 2.0
   (KMS v2 gRPC)                 (seal/unseal)          (SRK, never exported)

Designed for Kairos hosts running k0s, where the API server runs as a host process and a plain host unix socket — mode 0600, no sidecar, no static pod — is all the plumbing needed.

Why does sceau exist?

Because every other answer to "encrypt etcd at rest on a small edge cluster" involves key management nobody wants to operate:

  • The built-in aescbc / secretbox providers need a plaintext key file on disk — on the same disk as the data it protects.
  • An external KMS (Vault, a cloud KMS) needs network infrastructure, credentials, and lifecycle management — exactly what an edge k0s cluster cannot assume.

Kairos hosts already carry a TPM 2.0 and use it for measured boot and disk encryption. A TPM is a hardware key store that never exports its root keys: precisely the key-management-free root of trust this use case wants. See ADR-0001 for the full decision record.

The pitch: nothing to manage

  • No keys to generate — the SRK primary is recreated from a deterministic template at startup; the same TPM always produces the same primary.
  • No state to back up — sealed DEK envelopes live in etcd; sceau itself is fully stateless and survives OS reinstalls (Kairos A/B upgrades).
  • No duplication — sealed objects are fixedTpm + fixedParent; they cannot be duplicated to another TPM. A cloned disk is useless without the same chip.
  • A stable identity — the KMS key_id derives from the SRK name, so it is stable per TPM across reboots.

The trade-off is explicit: lose the TPM, lose the data. That is the point of a root of trust — see the Threat Model.

Project status

sceau is early. The KMS v2 gRPC server and TPM seal/unseal are implemented; PCR policy binding, graceful SRK eviction under memory pressure, and end-to-end tests against a swtpm are next. Don't run production workloads against it yet.

Where to go next

Community & support

License

sceau is open-source software, licensed under the Apache License 2.0.