Charge Authority v1 reviewer map
Audience: Halborn / NCC / equivalent.
Purpose: Attack each frozen claim intelligently.
Companion freeze: charge-authority-v1-freeze.md
60-second end-to-end map: independent-review-prep.md §60-second map
Charge Authority v1 is feature-frozen and claim-frozen. It is ready for independent review, not “audited” and not “formally verified.”
Claim 1: Authority ↔ intent continuity
| Normative text | charge-authority.md claim 1; qzr-1.md anti-downgrade § (fingerprint authority_id / execution_intent_digest) |
| Authoritative fields | billing.billing_verify_fingerprint.authority_id (vs recomputed grant identity); billing.billing_verify_fingerprint.execution_intent_digest (vs meter intent projection and mirrors) |
| Negative controls | 0x vs bare digest still binds; mutable wire authority_id lie fails vs recomputed id; wrong grant / meter mismatch / digest split fail Minimal and Standard |
| Test file | protocol/test/authority-intent-binding.test.js (+ §4.4 committed-values.test.js for representation consistency) |
| Expected failure | Present identity/intent mismatch → authority_continuity / execution_intent_binding = FAIL at every profile; missing required Standard commitments → NOT_CHECKED and Standard FAIL |
| Non-claims | Receipt authority: PASS is not MAY_EXECUTE; digest on wire alone does not prove CAS |
Claim 2: Fingerprint charge ↔ authority constraints
| Normative text | charge-authority.md claim 2; max_charge_micros section |
| Authoritative fields | billing.billing_verify_fingerprint.expected_charge_micros only for the cap; grant max_charge_micros, tariff id/version/digest, unit_price_micros, currency |
| Negative controls | Convenience/meter under-cap cannot rescue over-cap fingerprint; missing fingerprint charge cannot fall back to meter; string coercion rejected; currency / unit_price / tariff substitution fail; Phase-2 commitments split fails §4.4 |
| Test file | protocol/test/claim2-charge-constraints.test.js |
| Expected failure | Over-cap or unavailable/malformed fingerprint charge with present cap → QZA_ERR_MAX_CHARGE / authority: FAIL; conflicting mirrors → committed_consistency: FAIL |
| Non-claims | Taxes/credits outside the canonical integer; tariff_snapshot max is distinct from grant cap |
Claim 3: Consumption only from trusted evidence
| Normative text | charge-authority.md claim 3; consumption evidence table |
| Authoritative fields | Trusted-channel row: authority_id + event_id + execution_intent_digest → CONSUMED_BY_THIS_EVENT |
| Negative controls | No log → NOT_CHECKED; empty → AVAILABLE/FAIL; wrong authority/event/intent → FAIL; bare event_id when intent expected → FAIL; unsigned map forgery is a trust-channel control, not portable crypto |
| Test file | protocol/test/claim3-consumption-evidence.test.js |
| Expected failure | authority_consumption_check = FAIL fails Standard; PASS only for THIS_EVENT with matching intent when digest expected |
| Non-claims | Unsigned consumedAuthorityIds is not self-authenticating; portable signed ConsumptionEvidence is out of v1 (v1.1 candidate) |
Claim 4: Path enforcement is an integrator non-claim
| Normative text | charge-authority.md claim 4; freeze boundary; TOCTOU / gateway section |
| Authoritative fields | None on the receipt for “path enforced.” Only preflightChargeAuthority may set execution_eligible / may_execute true |
| Negative controls | Skip preflight → attest reject; mutate outbound action after preflight → bind fail; revoke before receipt → REVOKED with may_execute false; receipt authority PASS still may_execute false; open_signature blocked; read-only evaluator cannot flip eligibility; gateway_enforced / may_execute mirrors ignored by reportOffline |
| Test file | protocol/test/claim4-path-enforcement.test.js |
| Expected failure | Any attempt to manufacture post-facto MAY_EXECUTE must leave receipt reports at may_execute = false / execution_eligible = false |
| Non-claims | QuantZK does not stop out-of-band vendor calls; historical validity ≠ permission to execute; gateway mirrors never upgrade the claim |
Cross-cutting: §4.4 committed-value dominance
| Normative text | qzr-1.md §4.4; qzr-1-section-4-4-freeze.md |
| Authoritative artifact | authoritative-field-registry.json v1 (1a2e01b8…); vectors 138b56b7… |
| Negative controls | Wrong authoritative source; self-authorizing schema; exact artifact pin; Minimal downgrade on conflicts |
| Test files | protocol/test/committed-values.test.js; protocol/conformance/qzr-1/run_committed_values.py |
| Expected failure | Conflicting representations → committed_consistency: FAIL at every profile |
| Non-claims | Registry consistency does not replace grant-signature derivation or vkey correspondence |
Suggested attack order
- Split-brain representations (§4.4 + Claim 1/2)
- Cap / coercion / missing fingerprint charge (Claim 2)
- Consumption classification and “authenticated” meaning (Claim 3)
- Manufacture
MAY_EXECUTEfrom receipt or mirrors (Claim 4) - Profile downgrade (Minimal vs Standard) on present conflicts
Reproduce
bash
cd protocol && npm run test:sdk && npm run test:committed-values1
Pin commands: see charge-authority-v1-freeze.md.
