Skip to content

feat(enclave): add network-bound wrapped root-key bootstrap#194

Merged
samlaf merged 1 commit into
seismicfrom
feat/wrapped-root-key-bootstrap
Jun 29, 2026
Merged

feat(enclave): add network-bound wrapped root-key bootstrap#194
samlaf merged 1 commit into
seismicfrom
feat/wrapped-root-key-bootstrap

Conversation

@samlaf

@samlaf samlaf commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Joining nodes now fetch the network root key through an attested ECDH/AES-GCM wrapping flow. The getWrappedRootKey RPC takes an opaque serialized RootKeyRequest and returns an opaque serialized RootKeyResponse.

A requester sends a fresh nonce, an ephemeral secp256k1 ECDH public key, and attestation evidence over root_key_request_binding(network_id, nonce, eph_pk). The responder verifies that evidence, wraps root_key to the requester's attested ephemeral key, and returns its own ephemeral public key, the wrapped root key, and evidence over root_key_response_binding(network_id, nonce, responder_eph_pk, wrapped).

Also derive network_id at enclave-server startup from the exact bytes of /run/seismic/conf/network-manifest.json and thread it through tx_io and root-key bootstrap bindings. The server fails fast if the manifest is missing or malformed.

Other changes:

  • bind getAttestationEvidence to tx_io_binding(network_id, tx_io_pk, epoch 0)
  • rename boot.share_root_key to getWrappedRootKey
  • keep seismic-enclave free of seismic-attestation by using opaque Vec bodies for bootstrap RPC payloads
  • add bootstrap/network unit tests
  • update mock/server docs, tdx-init comments, and integration-test naming

Known follow-ups:

  • replace the temporary permissive bootstrap measurement policy with a real allowlist/admission check
  • add an attestation evidence v2 RPC returning AttestationExchangeMessage and route that endpoint through seismic-attestation
  • split today's seismic-enclave common crate into narrower RPC/crypto/mock/ bootstrap-protocol/custodian-IPC crates

Joining nodes now fetch the network root key through an attested ECDH/AES-GCM
wrapping flow. The getWrappedRootKey RPC takes an opaque serialized
RootKeyRequest and returns an opaque serialized RootKeyResponse.

A requester sends a fresh nonce, an ephemeral secp256k1 ECDH public key, and
attestation evidence over root_key_request_binding(network_id, nonce, eph_pk).
The responder verifies that evidence, wraps root_key to the requester's
attested ephemeral key, and returns its own ephemeral public key, the wrapped
root key, and evidence over root_key_response_binding(network_id, nonce,
responder_eph_pk, wrapped).

Also derive network_id at enclave-server startup from the exact bytes of
/run/seismic/conf/network-manifest.json and thread it through tx_io and
root-key bootstrap bindings. The server fails fast if the manifest is missing
or malformed.

Other changes:
- bind getAttestationEvidence to tx_io_binding(network_id, tx_io_pk, epoch 0)
- rename boot.share_root_key to getWrappedRootKey
- keep seismic-enclave free of seismic-attestation by using opaque Vec<u8>
  bodies for bootstrap RPC payloads
- add bootstrap/network unit tests
- update mock/server docs, tdx-init comments, and integration-test naming

Known follow-ups:
- replace the temporary permissive bootstrap measurement policy with a real
  allowlist/admission check
- add an attestation evidence v2 RPC returning AttestationExchangeMessage and
  route that endpoint through seismic-attestation
- split today's seismic-enclave common crate into narrower RPC/crypto/mock/
  bootstrap-protocol/custodian-IPC crates
@samlaf samlaf requested a review from cdrappi as a code owner June 29, 2026 12:49
@samlaf samlaf merged commit b2d6fa6 into seismic Jun 29, 2026
5 of 6 checks passed
@samlaf samlaf deleted the feat/wrapped-root-key-bootstrap branch June 29, 2026 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant