Skip to content

Commit a1f4c61

Browse files
committed
Refine verification trust roadmap
1 parent 29997e3 commit a1f4c61

3 files changed

Lines changed: 157 additions & 28 deletions

File tree

docs/VERSION_PLAN.md

Lines changed: 136 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,12 @@ continues past the relevant dependency point.
236236
| Production signing providers needed side-channel and entropy admission rules. | Expanded `v0.29.0`, `v0.36.1`, and `v0.36.2` with provider side-channel declarations, zeroization, entropy health, hedged-signing fallback policy, fault-injection behavior, platform capability declarations, and external-provider guarantee boundaries. |
237237
| Graph semantics needed an early executable reference model before profile and persistent adapter work. | Added `v0.20.1 - Minimal Graph Reference Model` for atomic insertion, competing inserts, missing-parent promotion, pruning/finalization boundaries, duplicate delivery, and cycles through pruned ancestors. |
238238
| Security controls needed to mirror the new outcome, budget, commitment, hybrid, and quorum rules. | Updated `docs/security-controls.md` and attached ongoing security-control traceability to `v0.17.1`, `v0.31.0`, `v0.47.0`, and `v0.79.0`. |
239+
| Unsupported-suite outcomes could become a downgrade escape hatch. | Tightened `v0.17.1` to distinguish unknown critical suites, policy-forbidden suites, locally unsupported recognized suites, and temporarily unavailable providers. |
240+
| Verification receipts needed trust semantics. | Added receipt trust rules to `v0.17.1` and tied receipt classification into `v0.41.0`. Sender-provided receipts cannot suppress required local verification unless policy admits the receipt signer role. |
241+
| Historical key validity cannot be selected by an unsigned claimed timestamp. | Expanded `v0.27.0` and `v0.31.0` with authenticated evaluation points such as admission receipts, checkpoint sequence/time, transparency inclusion, or profile trusted-clock evidence. |
242+
| Threshold quorum safety needed exact mathematics. | Expanded `v0.79.0` with supported fault model, exact quorum formula, weighted-quorum policy, overflow-safe arithmetic, and policy-time rejection of impossible configurations. |
243+
| Provider side-channel wording could admit variable-time signing into high-assurance profiles. | Added provider assurance classes in `v0.28.1` and required high-assurance profiles to admit only constant-time software or appropriately isolated hardware signing providers. |
244+
| Invalid-result caching needed a complete semantic cache key. | Added cache-key requirements to `v0.17.1` covering statement, policy, trust, revocation, conflict, checkpoint, suite, and profile roots. |
239245

240246
## Phase 0: Published Foundation And Direction Pivot
241247

@@ -829,12 +835,32 @@ Deliverables:
829835
states,
830836
- `Indeterminate(ResourceExhausted)` outcome,
831837
- `Indeterminate(MissingEvidence)` outcome,
832-
- `Indeterminate(UnsupportedSuite)` outcome,
838+
- unknown critical suite or algorithm is structurally invalid,
839+
- suite forbidden by exact policy is invalid for admission,
840+
- protocol-recognized and policy-allowed suite missing in the local
841+
implementation is `Indeterminate(UnsupportedLocally)`,
842+
- temporarily unavailable external provider is
843+
`Indeterminate(ProviderUnavailable)`,
844+
- missing required authorization evidence remains indeterminate as a truth
845+
claim but causes fail-closed denial for consequential admission,
846+
- separate result dimensions for verification truth, evidence completeness,
847+
and authorization usability,
833848
- rule that budget exhaustion cannot be cached as an invalid result,
849+
- rule that invalid outcomes may be cached only when the cache key includes
850+
every relevant statement, policy, trust, revocation, conflict, checkpoint,
851+
suite, and profile root,
834852
- rule that retrying with a larger locally permitted budget may complete
835853
verification without changing the underlying statement validity,
836-
- verification receipt recording `CostScheduleId`, consumed units, and
837-
completion state,
854+
- unsigned local verification receipts are diagnostics only,
855+
- attestable verification receipt binding statement ID, verification context,
856+
roots, policy epoch, `CostScheduleId`, outcome, and completion state,
857+
- explicit trusted role requirement for receipt signers,
858+
- consumer rule to either re-execute verification or accept an attestable
859+
receipt under policy,
860+
- rule that sender-provided receipts cannot suppress required local
861+
verification,
862+
- rejection of receipt replay across different roots, policies, or
863+
checkpoints,
838864
- offline-bundle field identifying the cost schedule used when claiming
839865
completed verification,
840866
- documentation that local resource policies affect completion, not the
@@ -845,16 +871,22 @@ Verification:
845871

846872
- outcome classification tests,
847873
- cache-behavior tests proving resource exhaustion is not stored as invalid,
874+
- complete invalid-result cache-key tests,
848875
- retry-with-larger-budget tests,
849876
- verification receipt fixtures,
877+
- unsigned receipt diagnostic-only fixtures,
878+
- attestable receipt signer-role fixtures,
879+
- receipt replay rejection fixtures,
850880
- offline-bundle cost-schedule fixtures,
851881
- conformance vectors for valid, invalid, resource-exhausted,
852-
missing-evidence, and unsupported-suite outcomes.
882+
missing-evidence, unsupported-locally, provider-unavailable, and
883+
policy-forbidden-suite outcomes.
853884

854885
Exit criteria:
855886

856887
- two implementations with different local budgets can disagree about
857-
completion without disagreeing about semantic validity.
888+
completion without disagreeing about semantic validity,
889+
- verification receipts are trusted only through local policy or re-execution.
858890

859891
### v0.18.0 - Public Identifier Storage Policy
860892

@@ -975,12 +1007,16 @@ Deliverables:
9751007
- pruning and finalization boundary model,
9761008
- duplicate-delivery model,
9771009
- cycle-through-pruned-ancestor model,
1010+
- operation-history generator,
1011+
- state-machine differential test harness comparing the reference model and
1012+
bounded graph implementation after every operation,
9781013
- trace fixtures shared with `bcx-testkit`.
9791014

9801015
Verification:
9811016

9821017
- reference-model property test run,
9831018
- model-to-implementation fixture replay,
1019+
- generated operation-history differential tests,
9841020
- competing insert and missing-parent promotion tests,
9851021
- pruning/finalization cycle tests.
9861022

@@ -1209,7 +1245,7 @@ Verification:
12091245

12101246
- policy commitment fixtures,
12111247
- wrong evaluator, version, input, and resolver fixtures,
1212-
- admission evidence mutation tests.
1248+
- admission evidence mutation tests,
12131249
- fixtures for attested, reproducible, and proven decision modes.
12141250

12151251
Exit criteria:
@@ -1231,6 +1267,12 @@ Deliverables:
12311267
- issuer, realm, audience, algorithm, and key-usage binding,
12321268
- validity intervals,
12331269
- rotation, compromise, and revocation evidence,
1270+
- authenticated evaluation point for historical key and revocation selection,
1271+
- admitted evaluation points: trusted admission receipt time, checkpoint
1272+
sequence and authenticated checkpoint time, transparency inclusion point, or
1273+
profile-defined trusted clock evidence,
1274+
- explicit rejection of unsigned self-declared timestamps for selecting a
1275+
historical key, validity interval, or revocation state,
12341276
- trust-anchor selection,
12351277
- deterministic failure for ambiguous `kid` matches,
12361278
- no network I/O during primitive verification,
@@ -1240,6 +1282,8 @@ Verification:
12401282

12411283
- ambiguous key fixtures,
12421284
- wrong realm, audience, usage, and interval fixtures,
1285+
- unsigned self-declared timestamp rejection fixtures,
1286+
- checkpoint-relative historical key fixtures,
12431287
- revocation and rotation fixtures.
12441288

12451289
Exit criteria:
@@ -1270,6 +1314,37 @@ Exit criteria:
12701314
- primitive verification providers cannot resolve keys, perform network I/O, or
12711315
choose policy inside the core verification operation.
12721316

1317+
### v0.28.1 - Provider Assurance Classes
1318+
1319+
Goal: classify provider side-channel assurance before production provider
1320+
crates are admitted.
1321+
1322+
Deliverables:
1323+
1324+
- `ConstantTimeSoftware` provider assurance class,
1325+
- `HardwareIsolated` provider assurance class,
1326+
- `SideChannelUnassessed` provider assurance class,
1327+
- `TestOnly` provider assurance class,
1328+
- high-assurance policy rule requiring admitted constant-time software or
1329+
appropriately isolated hardware providers for consequential signing,
1330+
- rule that documented variable-time behavior does not qualify for
1331+
high-assurance consequential signing,
1332+
- verifier-provider adversary model for malicious or compromised providers,
1333+
- resource-amplification input handling requirements for provider dispatch.
1334+
1335+
Verification:
1336+
1337+
- assurance-class policy tests,
1338+
- high-assurance rejection tests for side-channel-unassessed providers,
1339+
- test-only provider feature-guard tests,
1340+
- malicious verifier provider fixtures,
1341+
- resource-amplification fixtures.
1342+
1343+
Exit criteria:
1344+
1345+
- provider admission distinguishes documentation from assurance, and
1346+
high-assurance profiles cannot accidentally admit variable-time signing.
1347+
12731348
### v0.29.0 - Signing Provider Boundary
12741349

12751350
Goal: define how BCX creates attestations without exposing private key material
@@ -1279,6 +1354,7 @@ Deliverables:
12791354

12801355
- opaque private-key handles,
12811356
- signer capability metadata,
1357+
- provider assurance class from `v0.28.1`,
12821358
- injected RNG or entropy interface for no-std,
12831359
- ML-DSA and SLH-DSA deterministic versus hedged mode policy,
12841360
- rule that providers cannot fall back from hedged to deterministic signing
@@ -1299,6 +1375,7 @@ Deliverables:
12991375
Verification:
13001376

13011377
- fake signer tests,
1378+
- provider assurance-class tests,
13021379
- entropy failure tests,
13031380
- hedged-signing fallback rejection tests,
13041381
- malformed internal-state rejection tests,
@@ -1358,8 +1435,11 @@ Deliverables:
13581435
composite key for new acceptance,
13591436
- rule that components from different key epochs cannot be mixed,
13601437
- partial component rotation creates a new composite commitment,
1361-
- historical verification uses the checkpoint-relative composite record valid
1362-
at signing time,
1438+
- historical verification uses the composite record valid at an authenticated
1439+
evaluation point, not at an unsigned claimed signing timestamp,
1440+
- admitted composite-key evaluation points: trusted admission receipt time,
1441+
checkpoint sequence and authenticated checkpoint time, transparency inclusion
1442+
point, or profile-defined trusted clock evidence,
13631443
- rule that one component cannot be silently reused in incompatible composite
13641444
suites,
13651445
- compromise recovery and emergency downgrade behavior is policy-bound and
@@ -1371,6 +1451,8 @@ Verification:
13711451
- component substitution tests,
13721452
- old-Ed25519/new-ML-DSA component mixing tests,
13731453
- expired-component and revoked-component tests,
1454+
- unsigned claimed signing timestamp rejection tests,
1455+
- authenticated evaluation point fixtures,
13741456
- component order mutation tests,
13751457
- cross-suite key reuse rejection tests.
13761458

@@ -1534,8 +1616,11 @@ Deliverables:
15341616

15351617
- optional Ed25519 provider crate or integration,
15361618
- feature-gated provider selection,
1537-
- constant-time or documented side-channel properties for signing and key
1538-
operations,
1619+
- provider assurance class from `v0.28.1`,
1620+
- constant-time software or hardware-isolated admission requirement for
1621+
high-assurance consequential signing,
1622+
- side-channel-unassessed provider admission limited to non-high-assurance or
1623+
test-only policy where explicitly allowed,
15391624
- secret-key and seed zeroization guarantees,
15401625
- entropy-source health and failure propagation,
15411626
- hedged-signing fallback policy where the provider supports hedged signing,
@@ -1553,7 +1638,8 @@ Verification:
15531638

15541639
- `cargo test -p <ed25519-provider-crate>`,
15551640
- RFC 8032 vector smoke tests,
1556-
- side-channel declaration review,
1641+
- provider assurance-class review,
1642+
- high-assurance provider admission tests,
15571643
- entropy failure tests,
15581644
- malformed internal-state tests,
15591645
- no root dependency regression.
@@ -1572,8 +1658,11 @@ Deliverables:
15721658

15731659
- optional ML-DSA-65 provider crate or integration,
15741660
- feature-gated provider selection,
1575-
- constant-time or documented side-channel properties for signing and key
1576-
operations,
1661+
- provider assurance class from `v0.28.1`,
1662+
- constant-time software or hardware-isolated admission requirement for
1663+
high-assurance consequential signing,
1664+
- side-channel-unassessed provider admission limited to non-high-assurance or
1665+
test-only policy where explicitly allowed,
15771666
- secret-key and seed zeroization guarantees,
15781667
- entropy-source health and failure propagation,
15791668
- hedged-versus-deterministic signing mode declaration,
@@ -1593,7 +1682,8 @@ Verification:
15931682

15941683
- `cargo test -p <ml-dsa-provider-crate>`,
15951684
- NIST KAT or ACVP-vector smoke tests where available,
1596-
- side-channel declaration review,
1685+
- provider assurance-class review,
1686+
- high-assurance provider admission tests,
15971687
- entropy failure tests,
15981688
- malformed internal-state tests,
15991689
- hedged fallback policy tests,
@@ -1768,14 +1858,25 @@ Deliverables:
17681858

17691859
- operational receipt vocabulary for admission, execution, observation,
17701860
witness, settlement, and synchronization,
1861+
- verification receipt vocabulary from `v0.17.1`,
1862+
- distinction between unsigned local diagnostic receipts and attestable
1863+
verification receipts,
1864+
- trusted verifier role requirements for receipt acceptance,
1865+
- policy rule that consumers re-execute verification unless they accept a
1866+
receipt under an explicit trusted verifier role,
17711867
- transparency receipt vocabulary for inclusion, consistency, disclosure, and
17721868
non-inclusion,
17731869
- receipt-to-statement commitment rules,
1870+
- receipt binding to statement ID, verification context, roots, policy epoch,
1871+
`CostScheduleId`, outcome, and completion state where applicable,
17741872
- receipt assurance classification.
17751873

17761874
Verification:
17771875

17781876
- receipt validation fixtures,
1877+
- forged verification receipt fixtures,
1878+
- sender-provided receipt cannot suppress local verification fixtures,
1879+
- cross-root, cross-policy, and cross-checkpoint receipt replay fixtures,
17791880
- wrong receipt class fixtures,
17801881
- explanation bundle receipt tests.
17811882

@@ -2814,6 +2915,14 @@ sets.
28142915
Deliverables:
28152916

28162917
- threshold policy vocabulary,
2918+
- supported fault model declaration,
2919+
- exact quorum formula; for the unweighted Byzantine model, quorum size `q`
2920+
from `n` members must satisfy `2q > n + f` to intersect in more than `f`
2921+
members,
2922+
- weighted quorum forbidden through `v1.0.0`,
2923+
- overflow-safe arithmetic for threshold and quorum calculations,
2924+
- rejection of impossible threshold, quorum, and fault configurations at
2925+
policy construction time,
28172926
- signer-set epoch binding,
28182927
- signer membership commitment,
28192928
- fault assumption and maximum tolerated faulty witnesses,
@@ -2824,6 +2933,7 @@ Deliverables:
28242933
- threshold change binding,
28252934
- behavior when the threshold or signer set changes,
28262935
- joint-consensus or overlapping-epoch transition rules,
2936+
- old-and-new quorum requirements during joint transitions,
28272937
- proof-of-possession for witness keys where required by the admitted suite,
28282938
- signer set commitment,
28292939
- threshold count validation,
@@ -2834,11 +2944,15 @@ Verification:
28342944

28352945
- `cargo test -p bcx-proof-threshold`,
28362946
- signer-set epoch and rotation fixtures,
2947+
- exact quorum-formula fixtures,
2948+
- overflow-safe arithmetic fixtures,
2949+
- impossible-configuration rejection tests,
28372950
- quorum-intersection fixtures,
28382951
- insufficient-intersection conflicting checkpoint tests,
28392952
- sufficient-intersection conflict rejection tests,
28402953
- equivocation evidence fixtures,
28412954
- joint-consensus transition tests,
2955+
- old-and-new quorum transition tests,
28422956
- proof-of-possession fixtures,
28432957
- threshold mutation tests.
28442958

@@ -3038,19 +3152,18 @@ release-candidate fixture set.
30383152

30393153
Deliverables:
30403154

3041-
- statement builders,
3042-
- attestation builders,
3043-
- binding builders,
3044-
- tamper helpers,
3045-
- deterministic keys for tests only,
3046-
- compile-time guards blocking deterministic keys from production facade
3047-
features,
3048-
- conspicuous test-only key and signer type names.
3155+
- expanded statement, attestation, and binding scenario catalog,
3156+
- advanced tamper helper catalog,
3157+
- additional deterministic test-only key sets behind the `v0.16.2`
3158+
production-facade guards,
3159+
- adversarial receipt, graph, provider, and profile fixture packs,
3160+
- fixture coverage report.
30493161

30503162
Verification:
30513163

30523164
- `cargo test -p bcx-testkit`,
3053-
- production facade feature-guard check.
3165+
- production facade feature-guard check,
3166+
- fixture coverage report check.
30543167

30553168
Exit criteria:
30563169

docs/security-controls.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Required controls from the first production profile:
1414
- immutable trust snapshots for key, policy, and revocation resolution,
1515
- no silent downgrade,
1616
- signer entropy policy and opaque private-key handles,
17-
- production provider admission for side-channel declarations, secret
17+
- production provider admission with provider assurance classes, secret
1818
zeroization, entropy-source health, fault-injection behavior, and external
1919
guarantee boundaries,
2020
- hybrid all-component acceptance with composite key lifecycle, epoch,
@@ -26,8 +26,12 @@ Required controls from the first production profile:
2626
cryptographic verification,
2727
- checked `VerificationBudget` and versioned `VerificationCostSchedule`,
2828
- indeterminate resource-exhaustion outcomes that are not cached as invalid,
29-
- verification receipts recording cost schedule, consumed units, and completion
30-
state,
29+
- locally unsupported recognized suites and temporarily unavailable providers
30+
separated from structurally invalid or policy-forbidden suites,
31+
- verification receipts recording cost schedule, consumed units, completion
32+
state, signer role, roots, and policy epoch,
33+
- sender-provided verification receipts accepted only through explicit local
34+
policy or re-execution,
3135
- bounded WHY depth and node count,
3236
- bounded unresolved-parent staging, orphan retention, fetch attempts, and
3337
referenced bytes,
@@ -38,7 +42,8 @@ Required controls from the first production profile:
3842
- fail-closed unknown algorithm policy,
3943
- checkpoint issuer, monotonic sequence, fork/equivocation, rollback, and
4044
consistency proof handling,
41-
- witness quorum-intersection and equivocation rules for threshold finality,
45+
- exact witness quorum formula, overflow-safe arithmetic,
46+
quorum-intersection, and equivocation rules for threshold finality,
4247
- provider admission for crypto, carrier, settlement, proof, and storage
4348
backends.
4449

@@ -49,4 +54,5 @@ High-assurance deployments should additionally require:
4954
- append-only receipt storage,
5055
- key rotation and revocation evidence,
5156
- remote attestation where admitted,
57+
- constant-time software or appropriately isolated hardware signing providers,
5258
- independent witness commitments for critical events.

0 commit comments

Comments
 (0)