diff --git a/docs/ietf-readiness.md b/docs/ietf-readiness.md index 0403724..a750e0e 100644 --- a/docs/ietf-readiness.md +++ b/docs/ietf-readiness.md @@ -1,25 +1,23 @@ # IETF -02 readiness -**Not submitted. The full requested acceptance criteria are not yet satisfied.** The implementation is merged at `7b79cd2`; the prepared text remains an individual proposal, not an IETF standard. +**Revision -02 has not been submitted.** It remains an individual proposal, not an IETF standard or an endorsed implementation. Formal submission preparation and this project's production/interoperability acceptance goals are separate below. ## Prepared materials -The authoritative RFCXML v3, generated Markdown, rendered text, embedded JSON Schema and examples describe one v2 contract. Version 1 remains available for existing qScan producers. The proposal requests a provisional well-known suffix; it introduces no media type, signature format, feed protocol or cryptographic algorithm. Contributor instructions require complete schema validation and regeneration checks rather than a partial hand-written schema check. +The authoritative RFCXML v3, generated Markdown, rendered text, embedded JSON Schema and examples describe one v2 contract. Version 1 remains available for existing qScan producers. The proposal requests a provisional well-known suffix; it introduces no media type, signature format, feed protocol or cryptographic algorithm. Contributor instructions require complete schema validation and regeneration checks. -## Verified submission process (2026-10-11) +## Submission process checked on 2026-10-13 -- [Datatracker](https://datatracker.ietf.org/doc/draft-acosta-crypto-agility-manifest/) lists -01; -02 is the next revision. The author email is `leon@quantakrypto.com`. -- [IETF author guidance](https://github.com/ietf/authors.ietf.org/blob/main/submitting-your-internet-draft.md) prefers standalone RFCXML v3, validates with xml2rfc/idnits, and requires author confirmation unless submitted by an authenticated listed author. -- [IETF 127 dates](https://datatracker.ietf.org/meeting/127/important-dates/) list the draft cutoff as 2026-11-02 at 23:59 UTC. Recheck when submitting. -- Author confirmation and a submission transaction have not been attempted. +The [Datatracker record](https://datatracker.ietf.org/doc/draft-acosta-crypto-agility-manifest/) still lists -01 as an individual Internet-Draft; -02 is the intended next revision. Its published status explicitly does not imply IETF endorsement. -## Remaining gates +The [official author guidance](https://authors.ietf.org/submitting-your-internet-draft) prefers RFCXML v3 and describes submission through the [Datatracker submission tool](https://datatracker.ietf.org/submit/). Posting requires the requested author confirmation unless the submitter is authenticated and listed as an author. The [IETF 127 dates](https://datatracker.ietf.org/meeting/127/important-dates/) list the Internet-Draft cutoff as November 2, 2026 at 23:59 UTC. Recheck these sources immediately before submitting; no submission transaction or author confirmation has been attempted for -02. -1. Hosted checks must pass on the exact candidate commit and generated submission artifacts. Implementation PR #2 is merged; its green checks do not waive the remaining acceptance gates. -2. Complete the production issuer/exporter trust and deployment boundaries in [implementation-status.md](implementation-status.md). Reference fixture keys are not production trust anchors, and unsigned historical telemetry is not authenticated evidence. -3. Demonstrate the required heterogeneous runtime interoperability. Current profile tests assess declarations; Node/Python tests establish JWS and schema interoperability, not independent complete security consumers. -4. Review the final idnits diagnostics and obtain independent IETF-area feedback on the breaking v2 contract and registration. AI security review is not IETF endorsement. Recheck author metadata, references and the submission deadline. +Before an upload, verify the revision, author metadata, references, standalone XML and generated renderings; review the exact candidate's idnits diagnostics and resolve blocking submission-tool errors. Hosted CI must pass on the final committed tree as this project's release policy. Passing offline idnits is preparation evidence, not a receipt from the submission service. -The implementation changes have merged. Submission remains blocked while these acceptance gates are open; a green reference test suite alone does not establish technical readiness. +## Project acceptance and quality goals -The official Datatracker document and submission instructions were checked again during the 2026-10-11 follow-up: -01 remains published and -02 remains the intended next revision. Standalone RFCXML v3 and an idnits review remain the preparation path; author confirmation and a submission transaction were not attempted. Dated production receipts are recorded in [implementation-status.md](implementation-status.md): the scheduled collector ran successfully, and the legacy website writers now use one durable serialized ledger with verified real issuance. The 203 retained production collector records remain unsigned; standard-JWS handoff, authorization, exact manifest binding, shared-ledger integration, consumer monitoring and alert delivery remain unaccepted. Authoritative current key status is still missing because the documented revocation endpoint returned HTTP 404. No independent complete semantic consumer implementation or IETF-area endorsement is inferred from the Node/Python wire tests. +The [dated implementation status](implementation-status.md) records the narrower evidence actually observed. October 11 established the stricter unsigned collector and durable legacy issuance. October 13 added fresh standard-JWS own-origin issuance, authenticated KMS status under the internal trust policy, exact manifest binding, persistent consumer restart/replay rejection and fresh-bundle recovery. A labeled test obtained provider-reported delivery. Independent verification also checked the public JWS, exact manifest/transcript bytes and ledger history. The consumer and alert timer are enabled; retained production alerts obtained durable provider-reported delivered receipts before exact acknowledgment. These receipts are bounded production evidence, not proof of every implementation or device. + +Independent complete semantic consumers, representative device execution and independent IETF-area feedback remain project quality goals. Node/OpenSSL/Python wire tests establish a narrower interoperability boundary. The individual Internet-Draft submission guidance does not require production deployment, heterogeneous device measurements or prior independent implementation; those must not be presented as formal IETF upload requirements. Equally, filing an Internet-Draft would not establish those engineering properties or grant standards status. + +The internal KMS status policy is not public root-signed nonrevocation. Compatibility stays unknown or declared where representative execution is absent. Prepare the submission materials while retaining these limitations; do not submit until the user's technical-readiness condition and current submission checks have been reviewed. No submission or IETF endorsement is claimed. diff --git a/docs/implementation-status.md b/docs/implementation-status.md index 1b1df41..6beafba 100644 --- a/docs/implementation-status.md +++ b/docs/implementation-status.md @@ -1,18 +1,18 @@ # Implementation and acceptance -The v2 reference implementation is merged at `7b79cd2`. It does not certify a deployment. The workflow tests the PR head commit explicitly, not only GitHub's merge ref, and retains logs and draft renderings as `validation-` artifacts. Production receipts below distinguish the deployed collector and legacy issuer from the remaining standard-JWS acceptance work. +The v2 reference implementation and persistent consumer are merged. The workflow tests the PR head commit explicitly and retains logs and draft renderings as `validation-` artifacts. The [consumer runtime checks](https://github.com/quantakrypto/crypto-agility/actions/runs/38382277746) passed on `7c0c43cc54c721b8a835ebaf6241cb735d4b9f7e`, merged as `3a459dd`. Production receipts below are dated observations, not a certification of every deployment or device. | Requirement | Reference implementation and evidence | Remaining acceptance boundary | | --- | --- | --- | -| Authenticated ingestion | JWS issuer policy, endpoint/subject binding, transcript digest, provenance and freshness; ingestion and live pipeline tests | Existing scheduled Observatory collector deployed at `238860e`; its full production run retained 203 certificate-validated records, all unsigned. Authenticated handoff, authorized subjects, exact manifest binding and standard-JWS output remain unverified | +| Authenticated ingestion | JWS issuer policy, endpoint/subject binding, transcript digest, provenance and freshness; ingestion and live pipeline tests | October 13 own-origin observations authenticate in the deployed consumer; independent verification checked the public JWS, exact manifest/transcript bytes and ledger binding. Historical full-panel telemetry remains unsigned | | TLS hybrid and fallback | Mandatory local OpenSSL 3.5.9 handshakes; hybrid, classical, deny-classical, invalid CA, wrong name, expired certificate, TLS 1.2 rejection | Tests cover the pinned TLS stack and fixture endpoints, not every provider, client or CDN edge | -| Signed attestations | Standard compact JWS/JWT, explicit algorithm policy, trusted issuer/key allowlists, revocation, audience, expiry, durable replay state; independent Node/OpenSSL/Python wire tests | RFC 9964 ML-DSA-65 support reuses the existing authority key. Real KMS canary and legacy production issuance passed; authoritative current key status and standard-JWS observation issuance remain unverified | +| Signed attestations | Standard compact JWS/JWT, explicit algorithm policy, trusted issuer/key allowlists, revocation, audience, expiry, durable replay state; independent Node/OpenSSL/Python wire tests | Existing-key RFC 9964 ML-DSA-65 issuance and fresh authenticated KMS status passed. Internal key-status policy is not public root-signed nonrevocation or independent measurement truth | | Compatibility | Conservative profile comparison across supported device classes, per-hop scope and constraint handling | Declared compatibility is not execution on browsers, mobile hardware, gateways or constrained devices; no fleet enrollment/coverage claim | -| Monitoring | Repeated assessments, stable actionable alert IDs, expiry/regression detection, atomic owner-only state, concurrent-writer and symlink tests | Operator must deploy supervisor and route alerts; state deletion/rollback by its owner requires operational recovery | +| Monitoring | Repeated assessments, stable actionable alert IDs, expiry/regression detection, atomic owner-only state, concurrent-writer and symlink tests | Deployed consumer passed singleton, restart/replay rejection and fresh-bundle recovery; alert timer is enabled; retained production alerts obtained persisted provider delivery receipts before acknowledgment | | Discovery | HTTPS certificate validation, origin allowlist, pinned public IP, total deadline/size limits, ETag/Last-Modified, no stale-on-error | Optional change notifications only trigger a snapshot refresh; no unnecessary feed protocol | | qScan | Pinned real qScan v1 producer/scan, repeatable bytes and v2 adapter with exact evidence digest and repository/commit binding | Native qScan remains v1; the merged reference implementation supplies the tested adapter rather than changing its release | | Tests | Unit, adversarial, real TLS, Node/Python interoperability, qScan integration, concurrency and bounded performance gates | Structural schema and JWS interoperability do not establish independent full semantic implementations or device interoperability | -| Draft | Self-contained -02 XML, Markdown, schema, examples and offline text/HTML rendering | Internet-Draft submission checks and independent IETF-area review remain a separate gate | +| Draft | Self-contained -02 XML, Markdown, schema, examples and offline text/HTML rendering | Formal submission checks are distinct from project interoperability and review goals; see IETF readiness | ## Scope and necessity @@ -29,31 +29,43 @@ QSCAN_ROOT="$PWD/build/pqc-tools" \ python scripts/check-tests.py ``` -Hosted CI must pass on the exact published commit. Local passing tests are not a substitute. The implementation PRs have merged; unresolved production and interoperability boundaries remain acceptance and IETF-submission gates. +Hosted CI must pass on the exact published commit. Local passing tests are not a substitute. The implementation PRs have merged. Project acceptance boundaries and formal Internet-Draft submission preparation are tracked separately in [ietf-readiness.md](ietf-readiness.md). -## Production validation receipts (2026-10-11) +## Historical production validation receipts (2026-10-11) -The original implementation changes merged as crypto-agility `7b79cd2`, Observatory `238860e`, Authority `55ff0fd` and website `c5cdbe0`. Independent engineering and security review corrected monitor alert-loss and baseline-loss failure paths: pending delivery IDs require explicit acknowledgment, and rejected evidence cannot erase the historical authenticated baseline or turn it into current assurance. +These paragraphs preserve what was established on October 11. Statements about work not yet integrated describe that date; the October 13 section below supersedes their operational status. + +The original public implementation changes merged as crypto-agility `7b79cd2` and Observatory `238860e`. Independent engineering and security review corrected monitor alert-loss and baseline-loss failure paths: pending delivery IDs require explicit acknowledgment, and rejected evidence cannot erase the historical authenticated baseline or turn it into current assurance. The existing Observatory timer and service were updated to `238860e`; no second scheduler was created. Its full run from 18:41:47 to 19:00:31 UTC completed with exit status 0 and refreshed all 271 database rows. It retained 203 certificate-validated collector records in an owner-only directory (0700) with owner-only files (0600); filename and transcript hashes were checked. All 203 records remain unsigned. Successful collection and local hashes do not establish an authenticated signing handoff, subject authorization or exact manifest-bound issuance. -The stricter TLS 1.3/certificate-validation methodology changed the measured web denominator from 70 to 66 while the hybrid count stayed at 48: `48/70` became `48/66`. This is a methodology effect, not adoption growth. The basic website methodology disclosure is live. The explicit cutover-date disclosure is tracked in [website PR #276](https://github.com/quantakrypto/website/pull/276). Device compatibility remains unknown or declared wherever representative execution evidence is absent. +The stricter TLS 1.3/certificate-validation methodology changed the measured web denominator from 70 to 66 while the hybrid count stayed at 48: `48/70` became `48/66`. This is a methodology effect, not adoption growth. The basic website methodology disclosure is live. The explicit cutover-date disclosure is now visible in the [website metrics methodology](https://quantakrypto.com/observatory/methodology). Device compatibility remains unknown or declared wherever representative execution evidence is absent. -The existing-key KMS canary succeeded in [website Actions run 38162473186](https://github.com/quantakrypto/website/actions/runs/38162473186) at website commit `36f64b7705d3f152f3780093f96a8fe4da7f0e37`. It matched the historical online key SPKI fingerprint, requested a bounded RAW signature and verified it locally. Legacy issuance was skipped; no token or ledger entry was created. This demonstrates signing access and key continuity, not non-revocation or authorized observation issuance. +The existing-key KMS canary succeeded on October 11. It matched the historical online key SPKI fingerprint, requested a bounded RAW signature and verified it locally. Legacy issuance was skipped; no token or ledger entry was created. This demonstrates signing access and key continuity, not non-revocation or authorized observation issuance. ### Durable legacy issuance -[Website PR #286](https://github.com/quantakrypto/website/pull/286) merged as `b37e956`. Its [CI run](https://github.com/quantakrypto/website/actions/runs/38165662878), [deployment](https://github.com/quantakrypto/website/actions/runs/38165903487) and [production SEO/JSON-LD checks](https://github.com/quantakrypto/website/actions/runs/38166157610) succeeded. The two legacy website writers now share one serialized durable authority at `/var/lib/quantakrypto-attestation`; the public ledger is a replica, and recovery journals and per-subject artifact state survive website asset swaps. +The two legacy website writers were integrated with one serialized durable authority. The public ledger is a replica, and recovery journals and per-subject artifact state survive website asset swaps. Authenticated migration preserved the existing 51-entry ledger with full-file SHA-256 `3c0262b8b37edb4c1e8e3f81d254f907c35c759287fe3fafb507a4afab99f765`. Real production issuance increased the ledger to 52 entries, giving full-file SHA-256 `0ab2c5823eeb2d717f6e70c2c3695a04ded4810d28e8b17426ab9126c69c9bb0`. The canonical and served ledgers and all three artifact replicas matched, and no pending journal remained. The public legacy ML-DSA signature verified against SPKI pin `33698c1c345d1df7a5308c513ee5c3925bc7f31c12aeb883549430a6d8f7cc80`. These receipts cover the legacy writers only. Legacy v1 signs the qScan logical content hash and readiness value; retained byte checksums are storage checks, not signed exact manifest/evidence bindings. The standard-JWS exporter has not been integrated with this shared transaction, and a source attestation does not prove the corresponding build is the live runtime. -### Remaining acceptance gates +## Current production validation (2026-10-13) + +The deployed consumer authenticated fresh own-origin observations at 12:11:23 UTC, after a controlled restart at 12:15:06 UTC, and following a website deployment at 12:28:06 UTC. The observations reported certificate-validated TLS 1.3 with `X25519MLKEM768`. They bind the exact [origin manifest](https://quantakrypto.com/.well-known/crypto-agility-origin.json) bytes, whose SHA-256 was `6fe2a44b51dc117818eec67b685d288d24a1caafeede7ebda24965f968cc2d26`. This explicit origin declaration is separate from the existing qScan repository declaration; neither is silently reinterpreted as the other. + +The standard observation issuer uses the existing signing identity and one serialized durable ledger shared with legacy issuance. Fresh authenticated KMS status, an independently pinned public key, explicit subject/audience authorization and a separate local withdrawal decision govern the consumer. The earlier status-read permission failure was resolved and the actual signing environment passed its status preflight. This internal operational policy does not establish public root-signed nonrevocation, an independent collector, PQC certificate authentication or device interoperability. + +The production supervisor rejected a concurrent second process. Restart rejected the already-consumed observation as replay, retained the historical authenticated baseline and pending alerts, and then accepted the second fresh bundle without resetting state. All three replay entries persisted. A labeled delivery test obtained a durable provider-reported delivered receipt before acknowledgment; this is not proof of inbox visibility or human action. The consumer and alert timer are enabled. At 12:29:34 UTC the timer persisted matching provider-reported delivered receipts for all three retained production alerts before acknowledging their exact occurrences; the pending outbox was empty and historical receipts remained retained. An initial public artifact HTTP 404 was corrected before the independent public verification below. + +An independent read-only verification at 12:28:46 UTC checked the [public observation JWS](https://quantakrypto.com/.well-known/observations/eb01a9bbbb9fac37b1e7f215c8dc1608715f1f89616f7953c3947429daf17d7f/observation.jwt), [captured manifest](https://quantakrypto.com/.well-known/observations/eb01a9bbbb9fac37b1e7f215c8dc1608715f1f89616f7953c3947429daf17d7f/manifest.json), [TLS transcript](https://quantakrypto.com/.well-known/observations/eb01a9bbbb9fac37b1e7f215c8dc1608715f1f89616f7953c3947429daf17d7f/transcript.txt) and [public ledger](https://quantakrypto.com/.well-known/attestation-ledger.jsonl) against the pinned key and native consumer report. The signed observation used ledger index 62 in the 63-entry ledger; the previously captured 56-entry prefix was unchanged. This independently verifies the signature and byte bindings, not the truth of a measurement performed by the same operator. These live URLs advance with later observations; the times and index above identify this receipt. + +The assessment remains `needs-review` because fallback behavior is declared unknown. Representative browser, mobile, gateway and constrained-device measurements have not been established; those compatibility claims remain unknown or declared. The 203 historical full-panel collector records described above remain unsigned; these new own-origin observations do not retroactively authenticate them. A configured refresh interval is not evidence that the scheduler has actually maintained that cadence. -- Establish authoritative current key status. The documented revocation endpoint returned HTTP 404; a matching public key, valid historical certificate and working KMS signing access do not prove non-revocation. -- Complete the standard-JWS collector handoff, authenticated source identity, authorized subject policy, exact manifest binding and integration with the same durable issuer ledger. Recollect fresh evidence before issuance; retained unsigned records are not a substitute. -- Deploy and verify consumer trust, persistent monitor/replay state and delivery acknowledgment. Establish the intended alert destination and verify actionable receipt there. -- Demonstrate independent complete consumer interoperability and obtain independent IETF-area feedback. Node/Python wire tests and declared compatibility are narrower evidence. +### Remaining project acceptance and quality goals -No IETF submission has occurred. The merged code, deployed collector and successful legacy issuance do not close these remaining gates. +- Retain the observed production safeguards: public artifact byte binding, owner-private persistent state, local withdrawal, and acknowledgment only after confirmed provider delivery. These passed the dated checks above and require continued operation. +- Observe continued freshness and automatic refresh behavior without weakening expiry, replay or local-withdrawal checks. +- Demonstrate independent complete consumer interoperability and obtain independent IETF-area feedback. These are project quality goals, not formal prerequisites imposed by the individual Internet-Draft upload process. +- Recheck the final candidate's renderings, idnits diagnostics and current submission requirements before any submission. No -02 submission or IETF endorsement is claimed.