Etch

Security

Etch is a signed audit chain for AI agent decisions. This page names the security properties Etch does guarantee, the properties Etch does not guarantee, the adversarial tests that prove the guarantees hold, the conformance vectors any independent implementation can verify against, and the coordinated-disclosure channel. Kept on one URL so a buyer-side security team or regulator can walk the whole posture in one pass.

What Etch guarantees, and what Etch does not

Etch is a stay-pure notary. It proves what happened. It does not decide what should happen next. Every guarantee below is a detection property, not a prevention property.

More precisely, Etch proves the integrity, sequence, and attribution of what was recorded. Completeness of the record and legitimacy of the underlying authority are separate organizational properties, not chain guarantees. The distinction matters when an auditor evaluates the evidence against a specific standard: the chain establishes that the record has not been altered and that its entries are attributed to the signing party; the organization must still establish that the required events were captured and that the authority under which each action was taken was itself legitimate.

Threat model

Etch's threat model assumes an insider adversary: the operator themselves may be malicious, may hold the classical Ed25519 signing key, may modify storage on disk, and may serve different history to different clients (split-view). The threat model assumes the adversary cannot forge SLH-DSA signatures without the SLH-DSA private key (envelope-encrypted in KMS, separate custody from Ed25519), cannot recompute SHA-256 collisions on demand, and cannot access previously-observed client pinned heads.

Full threat-model write-up with per-attack property + defense citations lives in the open-source repository at docs/adversarial_analysis.md. Every claim in that doc is locked by a green test in the same repository under tests/test_adversarial.py.

Adversarial benchmark

Two layered adversarial suites lock the threat-model claims to green tests.

Conformance vectors

The Portable Agent Identity v1.0 specification (Zenodo DOI 10.5281/zenodo.22154537, CC-BY-4.0) ships with 9 published conformance vectors under spec/portable-agent-identity/vectors/ in the hosted-service repository. Any independent implementation can prove conformance by parsing every valid vector and rejecting every invalid vector with the reason named in the sibling .meta.json file.

Vector files: spec/portable-agent-identity/vectors. Specification: spec/portable-agent-identity/v1.0.md.

Row-quality report (G3)

Track B v1.1.1 shipped a G3 row-quality report: every verifier run reports the fraction of rows in the chain that carry a weight-bearing field (a field the record's later behavior depends on, not a purely descriptive tag). The report is per-project, computed at verify time from the chain manifest, and surfaced on the auditor-preview page an operator mints for their auditor.

Semantics: ratio = weight_bearing_rows / total_rows. A row is weight-bearing when its stored fields would change a verifier's replay outcome; a row is not weight-bearing when it only decorates the record. The ratio is not a pass/fail metric; it is a legibility metric an auditor uses to decide whether the chain carries enough substance to reconstruct decisions or is mostly descriptive noise. The report freezes to a specific spec version so a chain that verifies today verifies the same way against the same report next year.

The ratio speaks to legibility, not to evidentiary completeness or organizational sufficiency. A technically substantive record with a high weight-bearing ratio may still omit the specific event or condition that matters to a later decision. Whether the required events were captured in the first place is an organizational property outside the chain's scope.

Post-quantum stance

Ed25519 will eventually be broken by a sufficiently large quantum computer running Shor's algorithm. Every closed epoch Etch signs today carries a hybrid signature envelope: Ed25519 (classical, fast) alongside SLH-DSA-SHA2-128f (FIPS 205, stateless hash-based, post-quantum). For any epoch signed today, the signature envelope remains valid evidence in a post-quantum world; an adversary who develops quantum capability and steals the operator's Ed25519 key still cannot forge a past head, because the SLH-DSA signature over the same payload would need to be forged too.

This is the "harvest now, decrypt later" defense applied to signatures: sign now with both algorithms, and the historical record survives even if one algorithm is broken later.

Coordinated disclosure

Suspected vulnerabilities: contact channel + PGP fingerprint at /.well-known/security.txt (RFC 9116). Please do not open a public GitHub issue for a vulnerability. Sensitive reports get a private-response acknowledgment within one business day; the policy line and canonical URLs are documented in the same security.txt file. Etch operates a single-maintainer disclosure channel today; scope grows when the team grows.

What Etch is not

Etch does not gate agent actions, sit in the request path, or decide what an agent should do next. Runtime control planes, policy engines, and gateways exist for that. Etch's job is to prove after the fact what did happen, in a form an external auditor, regulator, or insurer can verify without cooperation from the operator.

"We prove, we do not block."