10 KiB
10 KiB
Workplan
Last updated: 2026-04-24
This is the execution plan for making ChromeCard FIDO2 development and validation reproducible on this machine.
Constraints
- Treat
/home/user/chromecard/CR_SDK_CK-mainas read-only. - Keep helper scripts such as
fido2_probe.pyandwebauthn_local_demo.pyat/home/user/chromecard. - Target deployment model is Qubes OS with 3 AppVMs based on
debian-13-xfce:k_client,k_proxy,k_server. - Current authenticator link is card->
k_proxy(USB), but architecture must allow migration to wireless phone-mediated validation.
Goals
- Re-establish deterministic host-to-card FIDO2 communication over USB HID/CTAPHID.
- Restore a buildable/flashable firmware workspace for
CR_SDK_CK-main. - Turn ad-hoc demos into a repeatable verification flow.
- Stand up chained TLS communication in Qubes:
k_client -> k_proxy -> k_server. - Support both login flow (browser in
k_client) and user enrollment flow (process ink_client). - Minimize repeated card prompts by introducing secure session reuse after successful authentication.
- Implement a protected dummy resource on
k_server(monotonic counter) for end-to-end validation. - Ensure
k_proxyandk_serverare thread-safe and support concurrent access. - Prepare
k_proxyauth path for future transport shift: USB-direct -> wireless phone bridge.
Phase 0: Qubes VM Baseline (Blocking)
- Provision/verify AppVMs.
- Ensure
k_client,k_proxy,k_serverexist and are based ondebian-13-xfce.
- Assign functional responsibilities.
k_client: browser client + enrollment process.k_proxy: USB card access + proxy/auth bridge.k_server: protected resource/service endpoint.
- Define TLS endpoints and certificates.
k_proxypresents TLS service tok_client.k_serverpresents TLS service tok_proxy.- Trust roots and cert distribution model documented per VM.
Exit criteria:
- All 3 VMs exist, boot, and have clearly defined service ownership.
Phase 1: Qubes Firewall Policy (Blocking)
- Enforce allowed forward paths only.
- Allow
k_clientoutbound TLS only tok_proxyservice port(s). - Allow
k_proxyoutbound TLS only tok_serverservice port(s). - Deny direct
k_clienttok_servertraffic.
- Validate return path behavior.
- Confirm responses propagate back through established flows.
- Verify with simple probes.
- TLS handshake and HTTP(S) checks from
k_clienttok_proxy. - TLS handshake and HTTP(S) checks from
k_proxytok_server.
Exit criteria:
- Policy matches intended chain and is test-verified.
Phase 2: TLS Certificates and Service Endpoints
- Certificate model.
- Create or import CA and issue certs for
k_proxyandk_server. - Install trust roots in client VM(s) that need validation.
- Service shape.
k_server: HTTPS service exposing protected resource endpoint(s), including a monotonic counter endpoint.k_proxy: minimal HTTPS API gateway service (full web server framework not required).
- Endpoint contract.
- Define request/response schema between
k_clientandk_proxy. - Define upstream request contract from
k_proxytok_server.
Exit criteria:
- Mutual TLS trust decisions are documented and tested.
- HTTPS calls succeed on both links with expected cert validation.
Phase 2.5: Define State Ownership and Concurrency Model
- State ownership.
- Decide where user/session state is authoritative (
k_proxy,k_server, or split model). - Define token/session format and validation boundary.
- Concurrency controls.
- Define thread-safe strategy for session store and shared counters.
- Define locking/atomic/update semantics for counter increments and session updates.
- Runtime model.
- Choose service runtime/config that supports simultaneous requests safely.
Exit criteria:
- Architecture clearly documents state authority and race-free update rules.
Phase 3: Recover Basic Device Visibility on k_proxy (Blocking)
- Verify physical + USB enumeration path.
- Check cable/port and confirm device appears in USB listings.
- Confirm
/dev/hidraw*nodes appear when card is connected.
- Validate Linux permissions.
- Install/update udev rule for ChromeCard HID VID/PID.
- Reload udev and verify non-root read/write access to hidraw node.
- Re-run host probe.
- Run
python3 /home/user/chromecard/fido2_probe.py --list. - Run
python3 /home/user/chromecard/fido2_probe.py --json. - Record VID/PID/path and CTAP2
getInfooutput inSetup.md.
Exit criteria:
- At least one CTAP HID device is listed.
--jsonreturns validctap2_info.
Phase 4: Re-validate Local WebAuthn Demo on k_proxy
- Start local demo server.
- Run
python3 /home/user/chromecard/webauthn_local_demo.py. - Confirm URL is
http://localhost:8765.
- Exercise register/login.
- Register a test user.
- Authenticate with same user.
- Capture errors (if any) and update
Setup.md.
- Decide next demo hardening step.
- Keep bring-up-only mode, or
- add signature verification for attestation/assertion.
Exit criteria:
- Register and login both complete with card interaction prompts.
Phase 5: Implement Proxy Auth + Session Reuse
- Authenticate via card once per session window.
k_proxyhandles initial auth using connected card.- On success, create session state for
k_client.
- Session model.
- Prefer server-side session store or signed session token.
- Include TTL/expiry, rotation, and explicit invalidation/logout path.
- Do not expose card secrets or long-lived auth material to
k_client.
- Proxying behavior.
- With valid session:
k_proxyforwards request tok_serverand returns result. - Without valid session: require fresh card-backed auth flow.
Exit criteria:
- Repeated authorized requests do not require card interaction until session expiry.
- Expired/invalid sessions are correctly rejected.
Phase 5.5: Implement Dummy Resource + Access Policy on k_server
- Protected dummy resource.
- Add endpoint returning increasing number.
- Require valid upstream auth/session context from
k_proxy.
- Optional user/session handling.
- Add minimal user/session checks if
k_serveris chosen as authority (or partial authority).
- Correctness under concurrency.
- Ensure increments are monotonic and race-safe under parallel calls.
Exit criteria:
- Authorized requests obtain consistent increasing values.
- Unauthorized requests are rejected.
Phase 6: Integrate Client Enrollment + Proxy Login Flow
- Enrollment process in
k_client.
- Start process from
k_clientthat captures new-user enrollment intent/data. - Route enrollment requests to
k_proxyover TLS.
- Card-mediated login in
k_proxy.
k_proxyuses connected card for FIDO2/WebAuthn operations.k_proxyauthenticates towardk_serverover TLS.
- Browser flow in
k_client.
- Browser traffic goes only to
k_proxy. - Validate end-to-end login to
k_serverresource through proxy chain.
Exit criteria:
- Enrollment and login both function end-to-end via
k_client -> k_proxy -> k_server.
Phase 6.5: Concurrency and Multi-Client Test Setup
- Single-VM concurrency tests.
- Generate parallel request bursts from
k_clienttok_proxy. - Verify response integrity, session reuse behavior, and error rates.
- Multi-client tests.
- Run requests from multiple
k_clientinstances (or equivalent parallel clients) concurrently. - Verify isolation between users/sessions.
- Acceptance checks.
- No race-related crashes/corruption in
k_proxyork_server. - Counter/resource behavior remains correct under load.
- Session reuse reduces card prompts while preserving authorization checks.
Exit criteria:
- Test results demonstrate stable concurrent operation with documented limits.
Phase 7: Restore Firmware Build/Flash Path
- Validate SDK tree completeness.
- Confirm presence of
mvp,setup,components,samplesunderCR_SDK_CK-main. - If missing, obtain full repository/checkpoint and document source.
- Install/enable build tools.
- Ensure
westandnrfjprogare available in shell. - Confirm target board/toolchain match (
nrf7002dk/nrf5340/cpuapp, NCSv2.9.2baseline in docs).
- Run baseline build+flash.
- From
CR_SDK_CK-main, run./scripts/build_flash_mvp.sh. - If flashing fails, run documented recovery and retry.
Exit criteria:
- Successful
west buildandwest flash.
Phase 8: Consolidate Documentation and Paths
- Remove path drift between docs and actual files.
- Keep
fido2_probe.pyandwebauthn_local_demo.pyat workspace root. - Ensure docs never instruct placing helper scripts under
CR_SDK_CK-main. - Update references consistently in all docs.
- Keep
Setup.mdcurrent.
- After each significant change, update status snapshot and outcomes.
- Add minimal reproducibility checklist.
- One command list for probe + demo + build/flash prechecks.
- Maintain Markdown execution records continuously.
Setup.mdandWorkplan.mdare the canonical living docs for this workspace.- Re-scan relevant
.mdfiles before each new execution cycle and reconcile drift. - Record date-stamped session notes when priorities or blockers change.
Exit criteria:
- New team member can follow docs end-to-end without path or tooling ambiguity.
Phase 9: Migrate to Phone-Mediated Wireless Validation (Future)
- Auth transport abstraction in
k_proxy.
- Introduce/keep a transport interface for authenticator operations.
- Implement at least two backends:
- USB-direct backend (current).
- Phone-wireless backend (future).
- Wireless phone integration.
- Define protocol between
k_proxyand phone service. - Define secure pairing/authentication and message integrity for wireless link.
- Add timeout/retry behavior and offline handling.
- Functional equivalence tests.
- Verify login/enrollment behavior is unchanged at API level for
k_client. - Verify session reuse still works and card prompts are not increased unexpectedly.
Exit criteria:
k_proxycan validate via wireless phone path with no client-facing API changes.
Inputs Expected During This Session
- Exact observed behavior on reconnect attempts (USB/hidraw/probe).
- Whether we should pull server-side code now.
- Any board/firmware variants different from default documentation assumptions.
- Preferred TLS ports, certificate approach, and hostname scheme for
k_client,k_proxy,k_server. - Session TTL and invalidation requirements for cached authenticated access.
- Decision on where user/session authority lives (
k_proxyvsk_servervs split). - Target concurrency level for validation (parallel clients and parallel requests per client).
- Preferred wireless transport/protocol between
k_proxyand phone (for future phase).