Repository navigation
Workstream K: confidential compute — attestation and conditional key release (confidential-auth-v1) #142
Description
Workstream K — confidential compute: attestation and conditional key release
Makes the J CONFIDENTIAL policy enforceable off-chain. Depends on J (#140, 5a393ef5) and I (compute-conformance-v1). Refs #126 (closed epic; K was recorded there as future work).
Success statement. A worker does not receive confidential private input merely because it claims confidential_execution = true. Instead: valid worker session + fresh, purpose-bound challenge + acceptable attestation evidence + verified session/executor/task binding + trust and measurement policy + J policy eligible → conditional release. Any failure → no key, no plaintext input, no confidential capability, no execution start.
Scope
- Challenge model (
confidential-auth-v1): fresh, unpredictable, single-use, short-lived, bound to session, executor, task and purpose (CONFIDENTIAL_INPUT_RELEASE); ephemeral off-chain state Issued → Presented → Consumed | Expired | Revoked | Denied. - Evidence envelope (
attestation-envelope-v1): format, verifier kind, bindings, window, opaque vendor payload kept separate from normalized verified claims; logs carry a hash reference, never the payload. - Verifier interface
AttestationVerifier— vendor-neutral; normalizes intoVerifiedAttestation(environment type, measurement, security version, debug state, environment key, bindings, window, trust anchor). Future NVIDIA / AMD / Intel / confidential-VM adapters implement it without touching J orComputeTask. - Trust policy (deployment, non-consensus): accepted formats, trust anchors with revocation, measurement allowlist with revocation, minimum security version, debug policy, freshness bounds, TTLs. Rotation and revocation semantics documented; in-flight authorizations resting on a revoked anchor are revoked; already-redeemed releases cannot be undone.
- Reference attestation verifier — REFERENCE / TEST ONLY, not hardware attestation, not production confidential compute: Ed25519-signed evidence under a distinct test root (never the executor key), domain-separated, nonce/session/executor/task/purpose bound, measurement allowlist, expiry.
- J integration:
VerifiedAttestation→ JEvidence { level = ATTESTED, binding = CHALLENGE(session), window, verifier, reference }injected by the authority (callers cannot inject ATTESTED evidence);policy::eligibleremains the final policy decision; claim-only / CERTIFIED / expired / wrong-session all fail. - Release authorization —
ReleaseAuthority(control-plane confidential authorization service): Requested → ChallengeIssued → EvidencePresented → Verified → PolicySatisfied → Released → Consumed | Expired | Revoked | Denied; single-use, TTL-bounded, bound to task/executor/session; not a bearer token (redeemed only inside the authenticated session). - Conditional release, two separate abstractions per F §9: (A) the control plane issues the FetchInput capability for a confidential input only against a redeemed release authorization (
authorize_fetch_confidential; ordinaryauthorize_fetchrefusesConfidentialReleaseRequired); (B)KeyReleaseAuthority(the client's delegated key service, F §11/§14) releases the client-registered content key wrapped (X25519 + BLAKE3 KDF + XChaCha20-Poly1305) to the environment key the attestation bound. The data plane stores ciphertext; plaintext exists only inside the (reference) environment. - Named suite
confidential-auth-v1, cases K01–K30, CI step Mbongo Compute Confidential Authorization printingCONFIDENTIAL AUTHORIZATION: PASS; negative-control verifiers (signature-blind, binding-blind) that the suite must catch. - Architecture document
docs/architecture/compute-confidential-attestation-key-release.md(NORMATIVE, non-consensus).
What K proves, and does not
Proven: policy-gated release; encrypted-at-rest confidential input; content key released only to the key a verified attestation bound, only after J eligibility, once per challenge, within a window; every replay / binding / freshness / trust failure fails closed; PUBLIC and VERIFIED paths unchanged; no consensus, RPC, SDK-wire, ComputeTask or Receipt change.
Not proven: provider-resistant confidentiality — the reference environment is a software process with software keys; REFERENCE_ATTESTED is not hardware attestation. Hardware-vendor compromise, TEE side channels, malicious firmware accepted by policy, host denial of service, output correctness (#52), traffic analysis and metadata observation are outside K.
Follow-up gate
Hardware Attestation Adapter — first production backend: the first real vendor/confidential-VM verifier implementing AttestationVerifier, with its own trust-root distribution and evidence format. K is not production hardware-confidential until it exists.
Success criteria
claim-only confidential fails · valid ATTESTED evidence satisfies J · session, executor, task, challenge and freshness bindings proven · replay (challenge, session, task) denied · unknown format, untrusted root, revoked root, bad measurement, verifier outage fail closed · J remains the final policy evaluator · release before authorization impossible · keys absent from chain artifacts and logs · PUBLIC flow unchanged (conformance 38/38, reference harness, v0.4 vertical) · protected blobs identical · CRITICAL = HIGH = BLOCKING_MEDIUM = 0.
Activity
feat(compute): confidential attestation and conditional key release (…
gkalombo21 commentedon Sep 8, 2026
Workstream K — done (reference path; hardware adapter is the follow-up gate)
Merged:
d2bd1429426876b386cce8369741e0589e3f3877(#143, squash of sourcebed3885c; tree identical to the source). Baseline5a393ef5.Evidence bound to those SHAs
bed3885c): Rust Checks, Mbongo Compute v0.4 Vertical, Docker Devnet Bootstrap, Monetary Policy Model, TypeScript SDK (Node 20.19.0 and 24), spelling — pass; Devnet Convergence Harness skipped (push-only, by design). The new named step Mbongo Compute Confidential Authorization ran inside Rust Checks:RESULT: PASS (30/30),CONFIDENTIAL AUTHORIZATION: PASS.d2bd1429426876b386cce8369741e0589e3f3877): success, 7/7 — Rust Checks, Mbongo Compute v0.4 Vertical, Devnet Convergence Harness, Docker Devnet Bootstrap, Monetary Policy Model, TypeScript SDK (Node 20.19.0 and 24); 0 skipped.-D warnings, workspace 460 / 0 / 2, replay harness, reference harness PASS, conformance 38/38, provider policy 41/41, confidential authorization 30/30 (+ the 6-test group; both negative-control verifiers fail the suite as they must), SDK 153 tests + typecheck + build, v0.4 vertical PASS,git diff --check; 54 relative links and every section citation resolve; INDEX integrity; LF endings; workflow YAML parses.5a393ef5throughbed3885candd2bd1429426876b386cce8369741e0589e3f3877. Existing crate files changed by design:control_plane.rs(+83: confidential registration,authorize_fetch_confidential, the ordinary path's refusal),lib.rs(+1),Cargo.toml,Cargo.lock(+2 dependency edges, no new crate).Delivered
docs/architecture/compute-confidential-attestation-key-release.md— NORMATIVE architecture, non-consensus,confidential-auth-v1+attestation-envelope-v1; indexed.crates/mbongo-compute/src/confidential/—ReleaseAuthority,KeyReleaseAuthority, sealing and key wrapping,AttestationVerifierboundary,reference/(REFERENCE_ATTESTED, test only),suite.rsK01–K30 with negative controls; binconfidential_authorization; CI step Mbongo Compute Confidential Authorization.What is proven: claim-only confidential → nothing; valid, fresh, session-, executor- and task-bound attestation under a trusted root and an approved measurement, with J eligible → one single-use release → fetch capability for the sealed input + content key wrapped to the attested environment key; every replay, binding, freshness, trust, measurement, policy and outage failure fails closed; PUBLIC unchanged; keys and plaintext absent from chain bytes and logs;
ComputeTask,Receipt, RPC and SDK wire untouched.What is not proven, stated: provider-resistant confidentiality. The reference environment is a software process endorsed by a test root;
REFERENCE_ATTESTEDis not hardware attestation. Replay protection is scoped to one authority process lifetime (in-memory state).Follow-up gate: Hardware Attestation Adapter — first production backend (a confidential-VM, CPU-vendor or GPU-vendor
AttestationVerifierwith its own trust-root distribution and aHARDWARE_ATTESTEDlabel, run through the same suite).Dependency graph after K
Every success criterion in this issue is met for the reference path. Closing intentionally as completed; the hardware adapter is tracked as its own gate.
gkalombo21 commentedon Sep 8, 2026
Closing intentionally as completed for the reference path: merged d2bd142 (#143), PR CI and post-merge push CI green, protected blobs identical. The reference attestation path is REFERENCE_ATTESTED (test only); the next gate is the first hardware attestation adapter.
feat(compute): AMD SEV-SNP hardware attestation adapter (K-HW, live r…
gkalombo21 commentedon Sep 8, 2026
Post-closure note: the first hardware attestation adapter (AMD SEV-SNP,
snp-adapter-v1) behind K'sAttestationVerifierboundary merged as89cadb67(#145), tracked in #144. Proven on real captured Milan evidence; the live SEV-SNP guest run is still outstanding, so the confidential path remains REFERENCE_ATTESTED operationally and provider-resistant confidentiality is not yet claimed. This issue stays closed; nothing here reopens it.