Skip to content

access: the vault delivers a secret sealed to an ephemeral recipient key — and the broker road exists this time #421

Description

@mmeyerlein

#307 deleted the two dead vault-broker edges because nothing ever emitted the route. This issue builds the road that should have carried them — with a delivery model that survives our own trace architecture.

Why plain delivery is impossible here: the colony journals every message body (message_log, blob offload). A plaintext credential on a normal message would be journaled forever. So delivery is sealed end-to-end:

  • The consumer cell (proxy, llm) generates an ephemeral X25519 keypair per request and sends the public half with its policy-gated request.
  • The vault answers with a sealed box (X25519 + XChaCha20-Poly1305 — the same cipher family it already speaks at rest) over the normal reply edge.
  • The consumer unseals in RAM only, uses the credential (bearer header), never persists it. Forward secrecy: the ephemeral private half is gone before anyone can read the log.
  • No long-lived vault keypair is needed: topology + policy decide who may ask, and the reply rides the established edge — the topology is the authenticity. A vault signature can be retrofitted later.

Scope: the `deliver sealed` vault op (behaviour-changing on a sealed cell → regression lock per the sealed-substrate taxonomy), the broker request path in `invoke` plus the two edges back, the consumer side in the proxy and llm cells, and the migration of the shipped credential knobs onto vault-backed delivery so `.env` shrinks toward the vault passphrase.

Acceptance pin: at no point does a plaintext secret appear in the message_log or in any blob — asserted by test over a full E2E round.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions