Implement WebAuthn-signed shard recryption transport #12
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Current status — 2026-09-24
The release protocol and native/browser integrations are implemented; security hardening and deployment acceptance remain.
Published PR heads checked on 2026-09-24: Platform
1f7e296, Locksmith9f702bb, Bootproof821b5c6. Platform's dependency/model/mock/default-runtime pins are aligned at Locksmithd2876e9; subsequent Locksmith changes concern examples, configuration, documentation and terminology. These are published implementation states, not merged/deployed-state claims.Implemented: Fresh destination/custody nonce and measurement checks, CA-certified holder context, verified UV, atomic single-use authorization and encrypted holder-signed output are implemented. Signed stale/future attestation tests and cross-session destination-evidence replay regressions now exist; the older comments listing those as absent are superseded. Native approval cancellation, browser cleanup and holder eligibility checks are integrated in Platform.
Remaining: Harden recovery framing/connections and HTTP admission/session fairness; implement effective revocation for old credential snapshots, including pending sessions/restarts; assess common-root/private-key capabilities with Platform #383; commission independent parser/stateful fuzzing and saturation testing. Record exact-artifact Nitro/hardware/mixed/negative/restart acceptance and finish review/merge. A holder-authorized destination PCR policy is not an independent organization workload allowlist.
Evidence: current implementation/documentation, V1 contract. The September 23 default release suite passed 11 tests; all 19 certificate-service cases passed across the initial run and socket-permission rerun. Those results apply to
c33e35e, not a fresh full-suite run of the later terminology change. Earlier generation/model/loader/synthetic results remain scoped to the revisions recorded in their documentation. Current PRs remain open/unmerged.Implemented release flow
/v1/releases/beginauthenticates the bundle, selected certificate, credential snapshot and CA-certified organization/bundle/index, then reserves expiring state and a destination challenge./prepareverifies that fresh challenge, the destination key/evidence and approved PCRs, then binds the release intent into WebAuthn options. Fresh client nonces bind custody response evidence to the exact request/context; the client verifies it independently./completeconsumes pending authorization once, verifies the assertion/credential/RP/origin/user-verification and exact release context, derives the selected custody key, decrypts one share only inside custody, and emits the existing destination-encrypted, holder-signed Locksmith request.Sessions expire after three minutes, with global 64 and per-authenticated-organization/bundle eight limits; four release workers retain permits through actual completion despite caller timeout/disconnect. HTTP restart invalidates approvals while retaining Keyfork's root; enclave restart requires fresh quorum recovery. The issuance bearer token grants no release authority. See migration and acceptance runbook.
Security requirements
Acceptance criteria
Related work
Updated this issue so it stays scoped to WebAuthn-signed shard recryption rather than duplicating the v1 bundle generation/loading contracts.
It now points at #10 for Keymaker v1 generation, #11 for Locksmith v1 loading, and PR #13 for the merged public certificate service foundation. It also reflects the finalized public-cert behavior where the service generates the bundle UUID server-side.
The Platform creation prerequisites are now integrated (
ee9ab08,706b2d8).Still required: WebAuthn release authorization, single-use challenges, destination attestation verification, private-key derivation/recryption, and CLI/receiver integration. Custody-root bootstrap and real Nitro recovery validation remain outstanding.
WebAuthn shard recryption is now implemented and the integrated flow has been exercised end to end. Earlier comments listing authorization, challenges, destination verification, recryption and client/receiver integration as unimplemented are stale.
The custody enclave verifies the bundle/holder association, destination evidence and UV assertion, atomically consumes authorization, and derives/recrypts only the selected share. Plaintext remains inside custody. Output uses the holder’s OpenPGP signature and existing Locksmith wire format, consistent with the later #7 clarification.
Remaining acceptance coverage:
Production checks exist for both boundaries; current synthetic tests do not establish coverage of the signed timestamp path. Add these regressions and reconcile stale deployment-status documentation before closure.