Verifying an EVE Red Team Report
A red team report (eve.redteam.report.v1) is a signed record of running a packaged
adversarial regression suite — single-step cases and multi-step chains — against your own
configuration. For every attack that was blocked, the report records zero unauthorized side
effects, measured by an independent recording target. The report lets a reviewer confirm the
results are authentic, complete, and unaltered — without trusting the EVE server.
Readiness: the customer-runnable red-team harness + signed report is PILOT_READY
(customer-pilot ready at supported boundaries). The suite is representative, not exhaustive, and
standards mappings are descriptive, not certification.
What it proves
- Integrity + authenticity — the results (per-case outcomes, totals, side-effect counts)
were signed by the EVE signing key (Ed25519 in the production configuration; HMAC-SHA256
fallback is symmetric and not independently verifiable) over
jcs-1canonical bytes. - Completeness (no selective omission) — the
results_digestbinds the full result set, so quietly dropping a failed case is detected. Strict verifiers detect tampering and selective omission. - Zero-side-effect proof — for every
blocked_before_executioncase, an independentRecordingTargetcounted external calls / file writes / budget / session / approvals and the count stayed 0; positive controls prove that permitted actions still execute. In the built-in suite, 16 cases plus 2 multi-step chains passed with 0 unauthorized side effects.
What it does NOT prove
- It does not certify anything. The suite is representative, not exhaustive; customers add fixtures. Passing the suite is not a certification, a penetration-test pass, or a compliance guarantee.
- Standards mappings (MITRE ATLAS / OWASP-LLM / NIST AI RMF) are descriptive links from case ids to framework controls — they do not imply certification against those frameworks.
- A green report describes the cases that were run against your configuration; it does not prove the absence of an attack that is not in the suite. Deterministic detectors are pattern-based and novel obfuscations may evade them until a detector is added.
Required keys
eve.redteam.report.v1 binds at least:
| Field | Meaning |
|---|---|
| schema version | eve.redteam.report.v1 identifier |
| suite / scanner / policy / app versions | Versioned components under test |
run_id |
Run identifier |
results_digest |
Digest of the full result set (omission binding) |
| totals | Passed / failed / skipped / unsupported counts |
| side-effect counts | Unauthorized side effects (expected 0 for blocked cases) |
| outcome taxonomy | blocked / failed / unknown / executed / executed-with-findings |
kid, canon, signature |
Signer key, jcs-1, signature |
Verification fails closed if a required key is absent.
Canonicalization (jcs-1)
The report is signed over jcs-1, a constrained RFC 8785 profile with proven byte-for-byte
parity across Python, TypeScript, and the browser for the supported value domain. jcs-1 fails
closed on non-integer floats / NaN / Infinity. A verifier reading a report whose canon is not
jcs-1 reports unsupported canonicalization.
Verification profiles: strict vs standard
- Standard — verifies canonicalization, content hash, signature, and schema.
- Strict — additionally requires an independently verifiable Ed25519 signature, rejects
HMAC-fallback evidence, and enforces the
results_digestbinding so a partial (selectively omitted) result set is rejected. Use strict for third-party review. The Python strict verifier isverify_redteam_report; the Node strict verifier isverify_redteam_report.mjs.
Linked evidence
- MCP Execution Evidence — the agent/MCP attack cases (tenant reuse / surface substitution / replay) exercise MCP execution binding.
- Artifact Scan Evidence — the artifact attack cases and the poisoned-document chain step produce scan evidence.
- Decision Certificate — the CoreGuard decisions recorded per step.
Verify each linked artifact independently.
Selective-disclosure / omission checks
Selective omission is a first-class check here: the results_digest binds the full set of case
results, so removing a case (for example, a failed one) is detected by the strict verifier.
Removing or altering any signature-covered field invalidates the content hash and the signature.
Verify the full report before reading totals; do not re-canonicalize a reduced object.
Failure categories
| Category | Meaning |
|---|---|
| invalid signature | Signature does not match the canonical content under the given key |
| unknown key | kid / public key not recognized or not supplied for a strict check |
| unsupported schema | Report schema version is not understood by this verifier |
| unsupported canonicalization | canon is not jcs-1 |
| digest mismatch | results_digest or content hash does not match the recompute |
| selective omission | A case result was removed from the bound result set |
| stale | Report is older than your freshness window |
Freshness
A red team report is pinned to specific suite / scanner / policy / app versions. It does not
expire on its own; enforce a freshness policy so you do not accept a report produced under an
older configuration than the one you are running, and treat over-age reports as stale. A new
suite, scanner, or policy version warrants a fresh run.
Replay behavior
The harness is safe by default: local recording targets, no destructive tests, dry-run, secret
redaction, bounded concurrency/runtime, and remote testing requires an explicit allowlist. A
report is a record, not an authorization — re-presenting it does not re-run the suite and causes
no side effect. Re-running the suite over the same configuration is reproducible via the run_id
and versioned components.
Verify it yourself
Python
# The unified verifier ships with the EVE service; the first argument is the
# evidence KIND ("redteam"). Synthetic fixture — no production credentials.
import json
from core.eve_sdk import verify_evidence
with open("redteam_report.json", "r", encoding="utf-8") as fh:
report = json.load(fh)
# strict=True enforces the results_digest binding (rejects a selectively-omitted set).
result = verify_evidence("redteam", report, strict=True)
print(result["valid"], result["reason"]) # True, "verified"
# Pip-wheel path for content-hash + Ed25519 signature only:
# from eve_coreguard import verify_decision_record
# r = verify_decision_record(report, public_key_pem=public_key_pem)
# assert r.valid and r.independently_verifiable
Node (TypeScript / ESM, Node >= 18)
import { verifyEvidence } from "@eve/coreguard";
import { readFileSync } from "node:fs";
const publicKeyPem = readFileSync("public_key.pem", "utf8");
const report = JSON.parse(readFileSync("redteam_report.json", "utf8"));
const result = verifyEvidence(report, { publicKeyPem });
console.log(result.valid, result.signature); // true "ed25519-valid"
CLI
# The `eve` CLI ships with the EVE service/repo; it also runs the harness
# (`python -m core.eve_sdk.cli redteam`). Verify a report with:
python -m core.eve_sdk.cli verify redteam redteam_report.json --strict
Readiness
- The customer-runnable red-team harness + signed report is
PILOT_READY(customer-pilot ready at supported boundaries). - Offline verification (Python / Node / browser for the report) is
SUPPORTED;jcs-1isSUPPORTED(constrained RFC 8785 profile). - The harness runs in embedded (service) / sidecar mode; the Python
eve-coreguardclient (0.2.1) reaches the service via hosted mode. TypeScript verifies the report offline and never signs. - Independent verification requires the Ed25519 public key; the HMAC fallback is symmetric and not independently verifiable.
- The release-candidate clients are distributed privately for pilots — install the pilot artifact, not a public
pip/npminstall (see readiness for public-registry status).
Limitations
- The suite is representative, not exhaustive; customers add their own fixtures. Standards mappings are descriptive, not certification.
- Zero-unauthorized-side-effects is proven for the cases in the suite via an independent recording target; it is not a claim about attacks outside the suite.
- Deterministic detectors are pattern-based; novel obfuscations may evade them until a detector is added (findings are versioned so coverage changes are auditable).
- In the pilot, harness state is in-process (bounded, tenant-partitioned); durability is a deployment concern.
- HMAC-fallback signatures are not independently verifiable; use the Ed25519 configuration and the strict profile for external review.