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

This commit is contained in:
Aere Network 2026-10-19 00:06:23 +03:00
parent 6110ef2047
commit 316ba7171f
2 changed files with 45 additions and 11 deletions

View File

@ -490,41 +490,75 @@
"type": "digest", "type": "digest",
"note": "sha256 of the content, 0x + 64 hex" "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", "name": "service",
"type": "plain" "type": "plain",
"values": "1 to 256 printable ASCII characters without spaces (the audience of the service)"
}, },
{ {
"name": "secret", "name": "secret",
"type": "plain" "type": "plain",
"values": "a secret name (^[a-z0-9][a-z0-9_-]{0,63}$), \"*\" for list, or null"
}, },
{ {
"name": "version", "name": "version",
"type": "plain" "type": "plain",
"values": "an integer >= 1, or null"
}, },
{ {
"name": "operation", "name": "operation",
"type": "plain" "type": "plain",
"values": "put | get | metadata | rotate | revoke-version | grant | revoke | list"
}, },
{ {
"name": "verdict", "name": "verdict",
"type": "plain" "type": "plain",
"values": "allowed | refused | failed (failed: allowed and entered, then the change could not be stored)"
}, },
{ {
"name": "rules", "name": "rules",
"type": "plain" "type": "plain",
"values": "a list of rule names (^[a-z][a-z0-9-]{0,63}$), at most 128"
}, },
{ {
"name": "grant", "name": "grant",
"type": "plain" "type": "plain",
"values": "a grant id (^[A-Za-z0-9][A-Za-z0-9_.:-]{0,63}$), or null"
}, },
{ {
"name": "holder", "name": "holder",
"type": "plain" "type": "plain",
"values": "an aere-id (aere-id: + 40 hex) verified from the presentation, or null"
}, },
{ {
"name": "presenter", "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": [ "required": [
@ -534,7 +568,7 @@
"presentationHash", "presentationHash",
"createdAt" "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", "added": "2026-10-18",
"vector": "secret-access.json" "vector": "secret-access.json"
}, },

View File

@ -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 | | 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 | | 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 | | 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 | | 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 | | 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 |