What gets proven
The ZK proof covers the verdict derivation rules: the deterministic mapping from analysis outputs to the final verdict. Specifically, the proof demonstrates:-
Category-to-severity mapping: Each concern category (e.g.,
boundary_violation,prompt_injection,value_misalignment) is mapped to the correct severity level (low,medium,high,critical) according to the protocol rules. -
Severity-to-verdict escalation: The most severe concern determines the checkpoint verdict:
- No concerns or all
lowseverity results inclear mediumseverity results inreview_neededhighorcriticalseverity results inboundary_violation
- No concerns or all
- Concerns hash integrity: The hash of the concerns array in the proof journal matches the hash in the certificate, proving the verdict was derived from the exact concerns that were reported.
- Card constraint evaluation: The verdict accounts for the agent’s declared autonomy envelope — bounded actions, forbidden actions, and escalation triggers — as specified in the Alignment Card.
What does NOT get proven
The ZK proof intentionally excludes:- LLM inference: The analysis LLM’s reasoning process is not proven. LLM inference is non-deterministic and computationally infeasible to prove inside a zkVM. The proof covers only the deterministic post-processing of the LLM’s structured output.
-
Thinking block content: The raw thinking block is never included in the proof. Only the SHA-256 hash (
thinking_block_hash) is referenced, preserving the agent’s reasoning privacy. - Analysis model selection: The choice of which LLM to use for analysis is an operational decision outside the proof scope.
Guest program
The verdict derivation logic runs inside an SP1 zkVM guest program. The guest program is a deterministic Rust binary that takes structured inputs, applies the verdict rules, and produces public outputs.Inputs (Private)
These are provided to the guest program but are not revealed in the proof:Computation
The guest program executes the following deterministic steps:- Validate input structure: Verify concerns array and card summary are well-formed.
- Apply category mapping: Map each concern’s category to the protocol-defined severity rules.
- Compute verdict: Determine the final verdict from the highest severity across all concerns.
- Compute concerns hash: SHA-256 hash of the serialized concerns array (deterministic key ordering).
- Write journal: Output the verdict, concerns hash, and card ID as public commitments.
Outputs (Public journal)
These are committed to the proof’s public journal and are visible to verifiers:STARK proof format
The proof is an SP1 STARK (Scalable Transparent ARgument of Knowledge), stored and transmitted in three components:
The
image_id is a content hash of the compiled guest program. It acts as a commitment to the exact computation that was proven. A verifier checks:
- The
image_idmatches the expected verdict derivation program (published in the Mnemom GitHub repository). - The
receiptis a valid STARK proof for the givenimage_idandjournal. - The
journaloutputs are consistent with the certificate’s claims.
Tiered proving strategy
Not every checkpoint receives a ZK proof. Proving has non-trivial cost and latency, so AIP uses a tiered proving strategy that distinguishes real violations from configuration errors:Deferred proofs
When the policy engine detectscard_gaps alongside a boundary_violation, the gateway creates a proof record with status: deferred instead of immediately dispatching to the prover. This creates a tamper-evident audit trail without incurring GPU cost.
The observer’s DDR (Distributed Deliberation Review) reconciliation later classifies the violation:
This means only confirmed real violations receive the expensive GPU treatment. During rapid development when alignment cards frequently drift, this can reduce proving costs by 80-95%.
On-demand proving
Any checkpoint can be proven on demand viaPOST /v1/checkpoints/{checkpoint_id}/prove. This is useful when:
- An operator wants to verify a specific
review_neededverdict - An auditor requires proof for a specific checkpoint
- The stochastic sample missed a checkpoint of interest
- A deferred proof needs to be forced without waiting for DDR
Cost and latency
Proving is asynchronous. The checkpoint verdict is returned immediately; the proof is generated in the background (~700ms on GPU) and attached to the certificate when complete. With GPU acceleration, proof generation completes before the next integrity checkpoint in most conversations.
Proof input persistence
When the gateway creates a proof request, it stores the full proving inputs alongside theverdict_proofs row:
This ensures that proof inputs survive prover restarts, network failures, and machine stops. If the initial proving attempt fails, the retry loop can reconstruct the full proof request from the database without needing the original HTTP payload.
Self-healing retry loop
The prover service runs a background retry loop every 30 seconds that:- Queries
get_pending_proofs()for proofs with statuspendingorfailed(up to 5 retries) - Filters out proofs without stored input data (legacy orphans)
- Sets status to
provingand spawnsprove_verdict_derivation()with the stored inputs - On success, calls
complete_proof()to persist the receipt, journal, and verification result - On failure, calls
fail_proof()to increment the retry counter
If a proof fails to generate after 5 retries, it remains in
failed status. The checkpoint is still valid — it just lacks the additional computational integrity guarantee. Proofs without stored inputs (created before input persistence was added) are skipped by the retry loop and marked as permanently failed.Verification
Server-side
Submit the full certificate toPOST /v1/verify. The API delegates STARK verification to the prover service and returns a structured result including checks.verdict_derivation.valid.
Local verification
Use the SP1 verifier SDK to verify locally:Checking proof status
For checkpoints where proving is in progress, query the status:status field progresses through: pending -> proving -> completed (or failed).
For deferred proofs, the progression is: deferred -> skipped_card_gap | skipped_noise | pending (then normal flow).
See also
- Integrity Certificates — The certificate format that contains ZK proofs
- AIP Specification — Verification — Protocol-level verification specification
- SP1 Documentation — The zkVM platform used for proving