From 316ba7171f87356d579fa4f6b7afa4ed95d03203 Mon Sep 17 00:00:00 2001 From: Aere Network Date: Mon, 19 Oct 2026 00:06:23 +0300 Subject: [PATCH] AIP-23 proof kinds: secret-access carries requestHash (the presentation is signed for this exact request), claimedHolder/claimedPresenter, judged, and the allowed values of each field --- aips/aip23-kinds/KINDS.json | 54 ++++++++++++++++++++++++++++++------- aips/aip23-kinds/README.md | 2 +- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/aips/aip23-kinds/KINDS.json b/aips/aip23-kinds/KINDS.json index 0997dbd..7d1615d 100644 --- a/aips/aip23-kinds/KINDS.json +++ b/aips/aip23-kinds/KINDS.json @@ -490,41 +490,75 @@ "type": "digest", "note": "sha256 of the content, 0x + 64 hex" }, + { + "name": "requestHash", + "type": "hash", + "note": "already a 32-byte hash (0x + 64 hex); any other form is refused, not hashed" + }, { "name": "service", - "type": "plain" + "type": "plain", + "values": "1 to 256 printable ASCII characters without spaces (the audience of the service)" }, { "name": "secret", - "type": "plain" + "type": "plain", + "values": "a secret name (^[a-z0-9][a-z0-9_-]{0,63}$), \"*\" for list, or null" }, { "name": "version", - "type": "plain" + "type": "plain", + "values": "an integer >= 1, or null" }, { "name": "operation", - "type": "plain" + "type": "plain", + "values": "put | get | metadata | rotate | revoke-version | grant | revoke | list" }, { "name": "verdict", - "type": "plain" + "type": "plain", + "values": "allowed | refused | failed (failed: allowed and entered, then the change could not be stored)" }, { "name": "rules", - "type": "plain" + "type": "plain", + "values": "a list of rule names (^[a-z][a-z0-9-]{0,63}$), at most 128" }, { "name": "grant", - "type": "plain" + "type": "plain", + "values": "a grant id (^[A-Za-z0-9][A-Za-z0-9_.:-]{0,63}$), or null" }, { "name": "holder", - "type": "plain" + "type": "plain", + "values": "an aere-id (aere-id: + 40 hex) verified from the presentation, or null" }, { "name": "presenter", - "type": "plain" + "type": "plain", + "values": "an aere-id verified from the presentation, or null" + }, + { + "name": "claimedHolder", + "type": "plain", + "values": "an aere-id the presentation claims and nobody verified, or null" + }, + { + "name": "claimedPresenter", + "type": "plain", + "values": "an aere-id the presentation claims and nobody verified, or null" + }, + { + "name": "judged", + "type": "plain", + "values": "a list of { grant, rules }, at most 64" + }, + { + "name": "createdAt", + "type": "plain", + "values": "an RFC 3339 time" } ], "required": [ @@ -534,7 +568,7 @@ "presentationHash", "createdAt" ], - "attests": "a secrets service judged one request (put, get, rotate, revoke or grant) on a named secret and version: the verdict and the rules that decided it, the presented identity (presentation digest), the holder and presenter, the grant and the policy (digest); never the value", + "attests": "a secrets service judged one request (put, get, metadata, rotate, revoke-version, grant, revoke or list) on a named secret and version: the verdict and the rules that decided it, the presented identity (presentation digest) and the request it was signed for (request digest), the holder and presenter when verified (claimed ones are named as claimed), the grant and the policy (digest); never the value. Its values have a fixed vocabulary (KINDS.json, values)", "added": "2026-10-18", "vector": "secret-access.json" }, diff --git a/aips/aip23-kinds/README.md b/aips/aip23-kinds/README.md index adbacbc..a2ace19 100644 --- a/aips/aip23-kinds/README.md +++ b/aips/aip23-kinds/README.md @@ -40,7 +40,7 @@ ABSENT). Change one field of a statement and it is INVALID at the integrity leve | 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 | -| secret-access (added 2026-10-18) | `aere-proof-of-secret-access` | `service`, `operation`, `verdict`, `presentationHash`, `createdAt` | a secrets service judged one request (put, get, rotate, revoke or grant) on a named secret and version: the verdict and the rules that decided it, the presented identity (presentation digest), the holder and presenter, the grant and the policy (digest); never the value | +| secret-access (added 2026-10-18) | `aere-proof-of-secret-access` | `service`, `operation`, `verdict`, `presentationHash`, `createdAt` | a secrets service judged one request (put, get, metadata, rotate, revoke-version, grant, revoke or list) on a named secret and version: the verdict and the rules that decided it, the presented identity (presentation digest) and the request it was signed for (request digest), the holder and presenter when verified (claimed ones are named as claimed), the grant and the policy (digest); never the value. Its values have a fixed vocabulary (KINDS.json, values) | | 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 | | agent-decision (added 2026-09-29) | `aere-proof-of-agent-decision` | `policyHash`, `action`, `decision`, `createdAt` | an AI agent action was judged against a policy (by its hash): allowed or refused, and why; the action by the digest of its canonical JSON |