docs: plan cryptographic fresh-user and biometric assurance proofs (coven#815) - #12
Open
CompleteDotTech wants to merge 4 commits into
Open
Conversation
…oven#815) Specify COVEN-ASSURANCE/1, an independently verifiable step-up proof so request authentication can satisfy FreshUserVerification/FreshBiometric grant requirements without trusting client-asserted assurance levels. The plan defines: possession/step-up key separation; binding the optional step-up authorization key and its declared assurance class into the pairing-v2 transcript; a separate authorization-key store; canonical proof bytes over device, grant, revocation epoch, exact request or DeviceActionIntent digest, server-issued single-use challenge, window, and requested assurance; server-side effective assurance computed as min(claimed, class ceiling) and passed to DeviceGrant::authorize; fail-closed possession-only degradation; rotation/revocation semantics; iOS/Android platform mapping; a self-verifying synthetic golden vector; and TypeScript/JSON Schema for implementers. Every claim cites the current mobile_memory code path it builds on. No code changes: this is the design artifact the issue asks for. Signed-off-by: Timothy Wayne Gregg <5861166+CompleteDotTech@users.noreply.github.com>
CompleteDotTech
marked this pull request as ready for review
August 30, 2026 16:00
Add docs/design/mobile-assurance-step-up-v1.md, the plan and implementation contract for issue OpenCoven#815: a separately enrolled, platform-policy-protected step-up authorization key, bound into the pairing-v2 transcript before grant issuance, whose fresh signatures over canonical COVEN-ASSURANCE/1 bytes (device, grant, revocation epoch, exact request or DeviceActionIntent digest, single-use server challenge, validity window, requested assurance) are the only way to raise assurance above possession. The server verifies the signature, computes effective assurance itself, and passes it to DeviceGrant::authorize; absent/invalid/expired/replayed proofs fail closed. Covers storage separate from the possession key, replay protection independent of request nonces, rotation/revocation semantics, iOS/Android key-policy mapping, a security-invariant mapping, TypeScript types + JSON Schema, and a portable golden vector. Design artifact only; no behavior change. Refs OpenCoven#815 Signed-off-by: Timothy Wayne Gregg <5861166+CompleteDotTech@users.noreply.github.com>
Merged
5 tasks
…854) (OpenCoven#861) Adds one dated status/decision record for issue OpenCoven#854 in docs/superpowers/plans/. Independently verified against main @ 1364cec (2026-08-30): the coven#816 foundation series (PR OpenCoven#846, PR OpenCoven#847, parts 6-8 commits) landed the durable local scheduler core - definitions, SQLite definition/occurrence/run records with unique occurrence fencing, RRULE planning, bounded leases with expiry recovery, latest-only misfire / overlap refusal, the 60s daemon tick with scheduled dispatch, shared launch path, health and run history, non-destructive paused legacy import, and coven.automations.* control actions. Records what is still absent for v1 (versioned protocol schemas, authority/receipt binding, deterministic-time contract, SDK surface, conformance/chaos/SLO gates, live Beads mutation), the gate-by-gate verdict, and the critical path. The program issue remains open; this record closes no issue. Refs OpenCoven#854. Signed-off-by: Timothy Wayne Gregg <5861166+CompleteDotTech@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
docs/design/mobile-assurance-step-up-v1.md— the concrete plan/spec for issue Plan: cryptographic fresh-user and biometric assurance proofs OpenCoven/coven#815: an independently verifiableCOVEN-ASSURANCE/1step-up proof that lets request authentication satisfyFreshUserVerification/FreshBiometricgrant requirements without ever trusting a client-asserted assurance level.MobileAuthenticator::verifyhardcodesAssuranceLevel::Possessionwhen callingDeviceGrant::authorize(crates/coven-cli/src/mobile_memory/auth.rs:149), so assurance requirements are unreachable. The spec introduces a separately enrolled, platform-policy-protected step-up authorization key whose fresh signatures — over canonical bytes binding device, grant, revocation epoch, the exact request orDeviceActionIntentdigest, a server-issued single-use challenge, a ≤120 s window, and the requested assurance — are the only way to raise assurance.min(claimed, enrolled-class ceiling)) and passes it toDeviceGrant::authorize(grant.rs:157-194); absent/invalid/expired/replayed proofs degrade to possession-only or fail closed per grant policy.authorization-keys.jsonstore, rotation/revocation semantics that never touch familiar/root identity, iOS (SecAccessControl/LocalAuthentication) and Android (hardware Keystore/BiometricPrompt) mappings, a security-invariant mapping table, a self-verifying synthetic golden vector (hex-encoded, themobile-pairing-v2fixture convention), and TypeScript types + JSON Schema for Swift/Android implementers. Every design claim cites the currentmobile_memorycode path it builds on.Issue
Implementation
docs/design/mobile-assurance-step-up-v1.md(new, alongsidemobile-pairing-protocol-v2.mdandmobile-device-trust.md).Verification
python3 scripts/check-secrets.py— equivalent content-level scan executed locally (python3 unavailable in the authoring environment): no secret-rule, generic-assignment, or high-entropy findings in the added file; all synthetic vector values are hex-encoded per the existingmobile-pairing-v2fixture conventionpython3 scripts/check-coven-privacy.py --staged— equivalent scan of the added file: no Coven-specific identifiers, absolute home paths, or phone/invite-URL patternscargo fmt --check,cargo clippy --workspace --all-targets -- -D warnings,cargo test --workspace --locked— deferred to CI; no Rust sources are added or modified (docs-only change; thechangesclassifier should mark this PRdocs_onlyand skip the Rust/AFS/npm/engine jobs)Uuid::new_v5grant id, key id, context digest, and ECDSA P-256 signature from the documented hex values alone; the signature rejects any tampered byteRisk and Rollback
Agent Handoff
assurance.rscanonical bytes + challenge store, pairing extension + authorization-key store, gateway plumbing, golden-vector fixture + conformance test).python3was unavailable locally, so the two policy-guard scripts were emulated at the content level rather than run verbatim; CI runs the real ones.