55 lines
4.6 KiB
Markdown
55 lines
4.6 KiB
Markdown
# AERE Proof Protocol: proof kinds and their conformance vectors (AIP-23)
|
|
|
|
AIP-23 constrains only the envelope: a `statement`, its `statementHash`, an optional signature and an optional notarization. Each
|
|
kind of proof keeps its own statement fields. This folder lists the kinds AERE produces today, with one envelope per kind, so that an
|
|
independent implementation can produce and check them without us. The machine-readable list is `KINDS.json`.
|
|
|
|
## Check conformance
|
|
|
|
For each `<kind>.json`:
|
|
|
|
1. take the `statement` object;
|
|
2. serialize it canonically: `JSON.stringify(statement)`, keys in the order they appear in the file, UTF-8;
|
|
3. SHA-256 over those bytes, prefixed with `0x`;
|
|
4. the result MUST equal `statementHash`.
|
|
|
|
The same with the reference verifier, which also checks form, signature and finality when present:
|
|
|
|
```
|
|
node verify-proof.mjs data.json --json # verify-proof.mjs is published in aere-node/tools/
|
|
```
|
|
|
|
Every envelope here is VALID offline (form and integrity pass; it carries no signature and no notarization, so those levels are
|
|
ABSENT). Change one field of a statement and it is INVALID at the integrity level.
|
|
|
|
## Kinds
|
|
|
|
| kind | statement kind | required fields | what it attests |
|
|
| --- | --- | --- | --- |
|
|
| data | `aere-proof-of-data` | `sha256`, `name`, `createdAt` | a file or dataset had exactly this content (its SHA-256) under this name |
|
|
| execution | `aere-proof-of-execution` | `program`, `inputHash`, `outputHash`, `createdAt` | a program ran on this input and produced this output (digests), with this exit code |
|
|
| identity | `aere-proof-of-identity` | `subjectId`, `publicKeyHash`, `createdAt` | a subject identifier is bound to this public key (digest), by this method |
|
|
| compliance | `aere-proof-of-compliance` | `subject`, `policy`, `result`, `createdAt` | a subject was checked against a named policy with this result; the evidence is referenced by digest |
|
|
| runtime | `aere-proof-of-runtime` | `host`, `artifactSha256`, `createdAt` | a host runs this artifact (digest), and whether it matches the attested one |
|
|
| location | `aere-proof-of-location` | `subject`, `region`, `createdAt` | a subject is in this region, by this method; the evidence is referenced by digest |
|
|
| device | `aere-proof-of-device` | `deviceId`, `attestationHash`, `createdAt` | a device identifier carries this attestation and key (digests) and this posture |
|
|
| payment | `aere-proof-of-payment` | `from`, `to`, `amount`, `createdAt` | a payment of this amount and asset from one party to another, with its transaction (digest) |
|
|
| ownership | `aere-proof-of-ownership` | `owner`, `assetId`, `createdAt` | an owner holds this asset identifier; the asset is referenced by digest |
|
|
| time | `aere-proof-of-time` | `subjectHash`, `at`, `createdAt` | a subject (digest) existed at this time, from this time source |
|
|
| block | `aere-proof-of-block` | `blockHash`, `stateRoot`, `certificateDigest`, `createdAt` | a block hash and state root, with the post-quantum anchor certificate digest that covers them |
|
|
| authorization (added 2026-09-28) | `aere-proof-of-authorization` | `grantor`, `grantee`, `scope`, `createdAt` | a grantor gave a grantee the right to act within a scope, under a policy (digest), until an expiry |
|
|
| settlement (added 2026-09-28) | `aere-proof-of-settlement` | `chainId`, `txHash`, `blockHash`, `amount`, `asset`, `createdAt` | a settlement on a chain: its transaction and block (32-byte hashes carried as they are, never re-hashed), amount and asset |
|
|
| provenance (added 2026-09-28) | `aere-proof-of-provenance` | `subjectHash`, `parents`, `createdAt` | an artifact (digest) was produced from a non-empty list of parents (digests), by a process (digest), by an actor |
|
|
| ai | `aere-proof-of-ai` | `model.name`, `createdAt` | an AI action: which model and version, which prompt, input and output (digests), which tools, which agent, who asked |
|
|
|
|
Field types in `KINDS.json`: `digest` is the SHA-256 of some content (0x + 64 hex), so nothing sensitive enters the statement in
|
|
the clear; `hash` is a value that is already a 32-byte hash (a transaction or block hash) and is refused if it has another form;
|
|
`list` is a non-empty list of digests; `plain` is carried as given. Proof of Software has its own statement, and its conformance
|
|
vector is `aere-node/tools/proof-vectors/01-proof-of-software.json`.
|
|
|
|
## What an envelope does not prove
|
|
|
|
An envelope binds a claim to its hash and, when signed, to its signer; with a notarization, to a time certified post-quantum on
|
|
chain. It does not make the claim true in the world: the truth of a "location" or a "device" depends on who attests it and how.
|
|
Read the signer, not only the verdict.
|