{ "v": 1, "kind": "aere-conformance-rules", "levels": [ "integrity", "authenticity", "anchoring", "finality" ], "verifiers": { "aip23-envelope": { "artifacts": [ "envelope" ], "rules": [ { "id": "envelope.form", "source": "form", "level": "integrity", "sites": 1, "says": "the envelope has a statement (object) and a statementHash (0x + 64 hex)" }, { "id": "envelope.integrity", "source": "integrity", "level": "integrity", "sites": 1, "says": "sha256 of the canonical statement text is the statementHash" }, { "id": "envelope.signature", "source": "signature", "level": "authenticity", "sites": 5, "says": "the ML-DSA signature the envelope carries verifies over the canonical statement text" }, { "id": "envelope.finality", "source": "finality", "level": "anchoring", "sites": 6, "says": "the statementHash is recorded in the notary under a state root that a verified post-quantum anchor certificate covers (level by site: see finalitySites)" } ], "finalitySites": [ { "site": "most recent anchor did not verify", "level": "finality", "reachableWithAnHonestEndpoint": false }, { "site": "the header the endpoint served for block", "level": "anchoring", "reachableWithAnHonestEndpoint": false }, { "site": "has no account at", "level": "anchoring", "reachableWithAnHonestEndpoint": false }, { "site": "is not the AereNotary contract", "level": "anchoring", "reachableWithAnHonestEndpoint": false }, { "site": "the Merkle proof for block", "level": "anchoring", "reachableWithAnHonestEndpoint": false }, { "site": "not notarized:", "level": "anchoring", "reachableWithAnHonestEndpoint": true } ] }, "payment-risk": { "artifacts": [ "payment-risk" ], "rules": [ { "id": "risk.form", "source": "forma", "level": "integrity", "sites": 4, "says": "payer and payee are addresses; chain, asset, a positive integer amount and the time are given" }, { "id": "risk.asset", "source": "activ", "level": "integrity", "sites": 1, "says": "the asset on that chain is allowed by the declared policy" }, { "id": "risk.counterparty", "source": "contrapartida", "level": "integrity", "sites": 1, "says": "the payee is not the payer and is not a refused counterparty of the policy" }, { "id": "risk.rate", "source": "curs", "level": "integrity", "sites": 1, "says": "the USD rate is declared (value, source, time) when the policy requires it" }, { "id": "risk.limit", "source": "limita", "level": "integrity", "sites": 1, "says": "the amount in USD is within the per-payment limit of the policy" }, { "id": "risk.window", "source": "fereastra", "level": "integrity", "sites": 1, "says": "the amount and the count stay within the sliding window of the policy" } ], "marked": "by a marker on every check" }, "payment-receipt": { "artifacts": [ "payment-receipt" ], "rules": [ { "id": "receipt.binding", "source": "legatura", "level": "integrity", "sites": 2, "says": "the settlement envelope commits to this instruction and says the same thing" }, { "id": "receipt.amount", "source": "suma", "level": "integrity", "sites": 1, "says": "the USD amount is the amount at the declared rate, exactly" }, { "id": "receipt.policy", "source": "politica", "level": "integrity", "sites": 1, "says": "the policy shown hashes to the policy the risk verdict names" }, { "id": "receipt.risk", "source": "risc", "level": "integrity", "sites": 3, "says": "the risk verdict reproduces from the inputs and the policy, and it allowed this payment" }, { "id": "receipt.chain", "source": "lant", "level": "integrity", "sites": 1, "says": "the transaction supplied is this payment: payer, payee, value, block, mined" } ], "marked": "by a marker on every check" }, "market-timeline": { "artifacts": [ "market-timeline" ], "rules": [ { "id": "market.form", "source": "forma", "level": "integrity", "sites": 1, "says": "the timeline is well formed: events with name, arguments, sender, integer time and block; the job and the constants with their integer fields" }, { "id": "market.complete", "source": "intreg", "level": "integrity", "sites": 1, "says": "the timeline carries every event the job state implies: posted; claimed when a provider is set; submitted and disputed when their times are set" }, { "id": "market.posting", "source": "postare", "level": "integrity", "sites": 1, "says": "the JobPosted event matches the job (requester, spec, deadline, reward)" }, { "id": "market.deadline", "source": "termen", "level": "integrity", "sites": 3, "says": "claim and submission are within the deadline; an expiry refund only after it" }, { "id": "market.window", "source": "fereastra", "level": "integrity", "sites": 2, "says": "a dispute is raised inside the challenge window; a third party finalizes only after it" }, { "id": "market.arbiter", "source": "arbitru", "level": "integrity", "sites": 3, "says": "a dispute is resolved by the arbiter, or timed out only after the arbitration timeout" }, { "id": "market.payout", "source": "plata", "level": "integrity", "sites": 4, "says": "the terminal payout matches the final state (who, how much, which bond)" }, { "id": "market.result", "source": "rezultat", "level": "integrity", "sites": 1, "says": "the result bytes hash to the commitment on chain" }, { "id": "market.replay", "source": "replay", "level": "integrity", "sites": 3, "says": "the public task recomputed agrees with who was paid or slashed" }, { "id": "market.proof", "source": "dovada", "level": "integrity", "sites": 5, "says": "the execution envelope names this job and existed before the window closed" } ], "marked": "by a marker on every check" }, "dataset": { "artifacts": [ "dataset-record", "dataset-answer", "dataset-consistency", "dataset-sample" ], "rules": [ { "id": "dataset.form", "source": "forma", "level": "integrity", "sites": 1, "says": "a row carries its field commitments and its disclosed fields" }, { "id": "dataset.commitment", "source": "angajament", "level": "integrity", "sites": 4, "says": "the record, answer or proof names the commitment it is checked against" }, { "id": "dataset.field", "source": "camp", "level": "integrity", "sites": 2, "says": "a disclosed value opens its salted field commitment" }, { "id": "dataset.inclusion", "source": "includere", "level": "integrity", "sites": 1, "says": "the record is in the log of that version (RFC 9162 inclusion)" }, { "id": "dataset.index", "source": "index", "level": "integrity", "sites": 2, "says": "the row is at its stated position of the sorted index" }, { "id": "dataset.range", "source": "interval", "level": "integrity", "sites": 2, "says": "every row returned is inside the queried range" }, { "id": "dataset.order", "source": "ordine", "level": "integrity", "sites": 1, "says": "consecutive rows are in index order" }, { "id": "dataset.completeness", "source": "completitudine", "level": "integrity", "sites": 5, "says": "the rows are the whole contiguous run; the neighbours on both sides are outside the range" }, { "id": "dataset.consistency", "source": "consistenta", "level": "integrity", "sites": 3, "says": "the older log is a prefix of the newer (RFC 9162 consistency) and the versions are linked" }, { "id": "dataset.sample", "source": "esantion", "level": "integrity", "sites": 1, "says": "every sampled position is served and verifies" } ], "marked": "by a marker on every check" }, "ai-trust": { "artifacts": [ "ai-trust-bundle" ], "rules": [ { "id": "aitrust.form", "source": "form", "level": "integrity", "sites": 1, "says": "the bundle has the format, an identity, a ledger with its policy, and a Proof of AI envelope" }, { "id": "aitrust.identity-mismatch", "source": "identity-mismatch", "level": "authenticity", "sites": 1, "says": "the id derived from the key is the one the bundle, the ledger and the output name" }, { "id": "aitrust.identity-key", "source": "identity-key", "level": "authenticity", "sites": 1, "says": "the public key of the identity can be read" }, { "id": "aitrust.version-attestation", "source": "version-attestation", "level": "integrity", "sites": 1, "says": "the Proof of Software attestation of the model artifact verifies as an envelope" }, { "id": "aitrust.version-artifact-mismatch", "source": "version-artifact-mismatch", "level": "integrity", "sites": 1, "says": "the output names model weights that the attestation covers" }, { "id": "aitrust.version-label-mismatch", "source": "version-label-mismatch", "level": "integrity", "sites": 1, "says": "the output and the attestation name the same model version" }, { "id": "aitrust.runtime-record", "source": "runtime-record", "level": "integrity", "sites": 1, "says": "the runtime record is a verified runtime attestation" }, { "id": "aitrust.runtime-artifact-mismatch", "source": "runtime-artifact-mismatch", "level": "integrity", "sites": 1, "says": "the host ran the artifact the output names" }, { "id": "aitrust.runtime-after-output", "source": "runtime-after-output", "level": "integrity", "sites": 1, "says": "the runtime record is not dated after the output" }, { "id": "aitrust.audit-log-broken", "source": "audit-log-broken", "level": "integrity", "sites": 1, "says": "the hash chain of the audit log given is intact" }, { "id": "aitrust.runtime-not-in-audit-log", "source": "runtime-not-in-audit-log", "level": "integrity", "sites": 1, "says": "the runtime record is an entry of the audit log given" }, { "id": "aitrust.audit-head", "source": "audit-head", "level": "integrity", "sites": 1, "says": "the audit log continues the attested head given" }, { "id": "aitrust.witness-head", "source": "witness-head", "level": "anchoring", "sites": 1, "says": "every notarized head given is a head of this ledger, recorded on the chain" }, { "id": "aitrust.policy-hash", "source": "policy-hash", "level": "integrity", "sites": 1, "says": "the policy given hashes to the policy hash the bundle pins" }, { "id": "aitrust.ledger-invalid", "source": "ledger-invalid", "level": "integrity", "sites": 1, "says": "the ledger verifies under its policy (signatures, chain, every decision re-derived)" }, { "id": "aitrust.output-not-in-ledger", "source": "output-not-in-ledger", "level": "integrity", "sites": 1, "says": "a ledger entry links this Proof of AI envelope" }, { "id": "aitrust.action-refused", "source": "action-refused", "level": "integrity", "sites": 1, "says": "the ledger entry of the output was allowed by the policy" }, { "id": "aitrust.ledger-time-mismatch", "source": "ledger-time-mismatch", "level": "integrity", "sites": 1, "says": "the ledger entry and the output are dated within the tolerance" }, { "id": "aitrust.policy", "source": "policy", "level": "integrity", "sites": 1, "says": "the policy given is a policy" }, { "id": "aitrust.provenance-envelope", "source": "provenance-envelope", "level": "integrity", "sites": 1, "says": "the Proof of AI envelope verifies as an envelope of its kind" }, { "id": "aitrust.provenance-finality", "source": "provenance-finality", "level": "anchoring", "sites": 1, "says": "a notarization the Proof of AI envelope claims is on the chain" } ], "marked": "at the refusal helper" }, "audit-log": { "artifacts": [ "audit-log" ], "rules": [ { "id": "auditlog.entry", "source": "intrare", "level": "integrity", "sites": 2, "says": "the log is a list, and each entry is a log entry" }, { "id": "auditlog.seq", "source": "seq", "level": "integrity", "sites": 1, "says": "the entries are numbered from zero, without a gap" }, { "id": "auditlog.chain", "source": "lant", "level": "integrity", "sites": 1, "says": "each entry links the hash of the one before it" }, { "id": "auditlog.hash", "source": "hash", "level": "integrity", "sites": 1, "says": "the hash of each entry is the hash of its content" }, { "id": "auditlog.head-form", "source": "cap-forma", "level": "integrity", "sites": 2, "says": "the attested head is an audit head attestation with a count and a head hash" }, { "id": "auditlog.head-hash", "source": "cap-hash", "level": "integrity", "sites": 1, "says": "the statementHash of the attested head is the hash of its statement" }, { "id": "auditlog.head-unsigned", "source": "cap-nesemnat", "level": "authenticity", "sites": 1, "says": "the head is signed when a signer is required" }, { "id": "auditlog.head-scheme", "source": "cap-schema", "level": "authenticity", "sites": 2, "says": "the head signature is an ml-dsa-65 signature, made with an ML-DSA-65 key" }, { "id": "auditlog.head-key", "source": "cap-cheie", "level": "authenticity", "sites": 1, "says": "the public key of the head signature can be read" }, { "id": "auditlog.head-signature", "source": "cap-semnatura", "level": "authenticity", "sites": 1, "says": "the head signature verifies over the statement" }, { "id": "auditlog.head-signer", "source": "cap-semnatar", "level": "authenticity", "sites": 1, "says": "the head is signed by the expected signer" }, { "id": "auditlog.head-short", "source": "cap-scurt", "level": "integrity", "sites": 1, "says": "the log has at least as many entries as the attested head covers" }, { "id": "auditlog.head-rewritten", "source": "cap-rescris", "level": "integrity", "sites": 1, "says": "the entry at the attested point is the attested head (the history before it was not rewritten)" } ], "marked": "by a marker on every check" }, "audit-tree": { "artifacts": [ "audit-inclusion", "audit-consistency" ], "rules": [ { "id": "audittree.proof-form", "source": "dovada-forma", "level": "integrity", "sites": 2, "says": "the proof is an inclusion or a consistency proof that can be read" }, { "id": "audittree.head-form", "source": "arbore-forma", "level": "integrity", "sites": 2, "says": "the tree head is a tree head attestation with a size and a root" }, { "id": "audittree.head-hash", "source": "arbore-hash", "level": "integrity", "sites": 1, "says": "the statementHash of the tree head is the hash of its statement" }, { "id": "audittree.inclusion-index", "source": "includere-index", "level": "integrity", "sites": 1, "says": "the entry shown is the entry of the index proven" }, { "id": "audittree.inclusion-entry", "source": "includere-intrare", "level": "integrity", "sites": 1, "says": "the hash of the entry shown is the hash of its content" }, { "id": "audittree.inclusion-envelope", "source": "includere-plic", "level": "integrity", "sites": 1, "says": "the envelope inside the entry hashes to its statementHash" }, { "id": "audittree.inclusion-leaf", "source": "includere-frunza", "level": "integrity", "sites": 1, "says": "the leaf is the leaf of this entry" }, { "id": "audittree.inclusion-path", "source": "includere-drum", "level": "integrity", "sites": 1, "says": "the path leads from the leaf to the root (RFC 9162 inclusion)" }, { "id": "audittree.inclusion-head", "source": "includere-cap", "level": "integrity", "sites": 1, "says": "the proof is for the tree of the head given (size and root)" }, { "id": "audittree.consistency-start", "source": "consistenta-inceput", "level": "integrity", "sites": 1, "says": "the consistency proof starts at the old head" }, { "id": "audittree.consistency-end", "source": "consistenta-sfarsit", "level": "integrity", "sites": 1, "says": "the consistency proof ends at the new head" }, { "id": "audittree.consistency", "source": "consistenta", "level": "integrity", "sites": 1, "says": "the new tree extends the old one (RFC 9162 consistency)" } ], "marked": "by a marker on every check" }, "agent-ledger": { "artifacts": [ "agent-ledger" ], "rules": [ { "id": "agents.ledger-form", "source": "registru", "level": "integrity", "sites": 1, "says": "a ledger with a list of entries is given" }, { "id": "agents.policy", "source": "politica", "level": "integrity", "sites": 2, "says": "the policy given is a policy, and hashes to the hash the verifier pins" }, { "id": "agents.other-policy", "source": "alta-politica", "level": "integrity", "sites": 3, "says": "the ledger and every entry name the policy given, and the policy is this agent's" }, { "id": "agents.session", "source": "sesiune", "level": "integrity", "sites": 1, "says": "the session is the one derived from the agent and the policy" }, { "id": "agents.key", "source": "cheie", "level": "authenticity", "sites": 2, "says": "the agent key can be read and is an ML-DSA-65 key" }, { "id": "agents.identity", "source": "identitate", "level": "authenticity", "sites": 1, "says": "the agent id is derived from the key" }, { "id": "agents.anchor", "source": "ancora", "level": "integrity", "sites": 3, "says": "every anchor given names an entry of this ledger, with a time" }, { "id": "agents.seq", "source": "seq", "level": "integrity", "sites": 1, "says": "the entries are numbered from zero, without a gap" }, { "id": "agents.chain", "source": "lant", "level": "integrity", "sites": 1, "says": "each entry links the hash of the one before it" }, { "id": "agents.body", "source": "corp", "level": "integrity", "sites": 1, "says": "the body of an entry names the agent, the session and the sequence number of its header" }, { "id": "agents.signature", "source": "semnatura", "level": "authenticity", "sites": 1, "says": "every entry is signed by the agent key" }, { "id": "agents.hash", "source": "hash", "level": "integrity", "sites": 1, "says": "the hash of each entry reproduces" }, { "id": "agents.time", "source": "timp", "level": "integrity", "sites": 6, "says": "entry times do not go backwards and stay within the bounds the verifier has (its clock, a witnessed start, the anchors)" }, { "id": "agents.revocation", "source": "revocare", "level": "integrity", "sites": 3, "says": "a revocation entry carries a revocation that verifies, and says what it carries" }, { "id": "agents.approvals", "source": "aprobari", "level": "integrity", "sites": 1, "says": "an approvals field, when present, is a list that is not empty" }, { "id": "agents.decision", "source": "decizie", "level": "integrity", "sites": 1, "says": "every decision written is the decision the policy gives when replayed" } ], "marked": "by a marker on every check" }, "identity": { "artifacts": [ "identity-presentation" ], "rules": [ { "id": "identity.form", "source": "form", "level": "integrity", "sites": 3, "says": "the presentation, its credential and its binding are well formed" }, { "id": "identity.issuer-id", "source": "issuer-id", "level": "authenticity", "sites": 1, "says": "the issuer id is the id derived from the issuer keys in the credential" }, { "id": "identity.holder-id", "source": "holder-id", "level": "authenticity", "sites": 1, "says": "the holder id is the id derived from the holder keys in the credential" }, { "id": "identity.credential-signature", "source": "credential-signature", "level": "authenticity", "sites": 1, "says": "the credential is signed by its issuer, Ed25519 and ML-DSA-65, both" }, { "id": "identity.issuer-trusted", "source": "issuer-trusted", "level": "authenticity", "sites": 1, "says": "the issuer is one of the issuers the verifier trusts" }, { "id": "identity.credential-window", "source": "credential-window", "level": "integrity", "sites": 1, "says": "the credential is valid on the verifier's clock" }, { "id": "identity.status-list", "source": "status-list", "level": "integrity", "sites": 1, "says": "a current status list of the issuer, handed to the verifier, can be read at the credential's index" }, { "id": "identity.credential-revoked", "source": "credential-revoked", "level": "integrity", "sites": 1, "says": "no current status list of the issuer revokes the credential" }, { "id": "identity.sd-distinct", "source": "sd-distinct", "level": "integrity", "sites": 1, "says": "the digests the credential signs are distinct" }, { "id": "identity.disclosure-readable", "source": "disclosure-readable", "level": "integrity", "sites": 1, "says": "every disclosure shown is in its one canonical form (salt of 16 bytes or more, an allowed name)" }, { "id": "identity.disclosure-signed", "source": "disclosure-signed", "level": "integrity", "sites": 1, "says": "the digest of every disclosure shown is one the issuer signed" }, { "id": "identity.disclosure-once", "source": "disclosure-once", "level": "integrity", "sites": 1, "says": "no claim is disclosed twice" }, { "id": "identity.disclosure-plain", "source": "disclosure-plain", "level": "integrity", "sites": 1, "says": "no disclosure covers a claim the credential has in the clear" }, { "id": "identity.claim-name", "source": "claim-name", "level": "integrity", "sites": 1, "says": "every plain claim has an allowed name" }, { "id": "identity.binding-credential", "source": "binding-credential", "level": "integrity", "sites": 1, "says": "the presenter signed for this credential" }, { "id": "identity.binding-disclosures", "source": "binding-disclosures", "level": "integrity", "sites": 1, "says": "the presenter signed for exactly the disclosures shown" }, { "id": "identity.binding-delegations", "source": "binding-delegations", "level": "integrity", "sites": 1, "says": "the presenter signed for exactly the delegation chain shown" }, { "id": "identity.presenter", "source": "presenter", "level": "authenticity", "sites": 1, "says": "the presenter is the holder, or the last delegate of the chain" }, { "id": "identity.presentation-signature", "source": "presentation-signature", "level": "authenticity", "sites": 1, "says": "the presentation is signed by the presenter, Ed25519 and ML-DSA-65, both" }, { "id": "identity.audience", "source": "audience", "level": "integrity", "sites": 1, "says": "the presentation was made for this verifier" }, { "id": "identity.nonce", "source": "nonce", "level": "integrity", "sites": 1, "says": "the presentation carries the nonce this verifier gave" }, { "id": "identity.freshness", "source": "freshness", "level": "integrity", "sites": 1, "says": "the presentation was made within the allowed age of the verifier's clock" }, { "id": "identity.chain-length", "source": "chain-length", "level": "integrity", "sites": 1, "says": "the delegation chain has at most eight links" }, { "id": "identity.delegation-form", "source": "delegation-form", "level": "integrity", "sites": 1, "says": "every link of the chain is a delegation" }, { "id": "identity.delegation-ids", "source": "delegation-ids", "level": "authenticity", "sites": 1, "says": "in every link, the giver and the delegate carry the ids derived from their keys" }, { "id": "identity.delegation-from", "source": "delegation-from", "level": "authenticity", "sites": 1, "says": "the first link is given by the holder, every other by the delegate of the link before" }, { "id": "identity.delegation-parent", "source": "delegation-parent", "level": "integrity", "sites": 1, "says": "every link names the hash of the link before it" }, { "id": "identity.delegation-signature", "source": "delegation-signature", "level": "authenticity", "sites": 1, "says": "every link is signed by who gave it, Ed25519 and ML-DSA-65, both" }, { "id": "identity.delegation-scope", "source": "delegation-scope", "level": "integrity", "sites": 2, "says": "the scope of every link can be read and is in its normal form" }, { "id": "identity.delegation-window", "source": "delegation-window", "level": "integrity", "sites": 1, "says": "every link is valid on the verifier's clock and when the presentation was made" }, { "id": "identity.delegation-depth", "source": "delegation-depth", "level": "integrity", "sites": 1, "says": "every link allows as many links as come after it" }, { "id": "identity.delegation-narrows", "source": "delegation-narrows", "level": "integrity", "sites": 1, "says": "a link only narrows the one before: scope, window and depth" }, { "id": "identity.delegation-credential", "source": "delegation-credential", "level": "integrity", "sites": 1, "says": "the scope of every link covers this credential" }, { "id": "identity.delegation-claims", "source": "delegation-claims", "level": "integrity", "sites": 1, "says": "the scope of every link covers the claims disclosed" }, { "id": "identity.delegation-audience", "source": "delegation-audience", "level": "integrity", "sites": 1, "says": "the scope of every link covers the audience" }, { "id": "identity.delegation-revoked", "source": "delegation-revoked", "level": "integrity", "sites": 1, "says": "no revocation handed to the verifier, signed by the giver of a link or by the holder, has taken effect" }, { "id": "identity.unreadable", "source": "unreadable", "level": "integrity", "sites": 1, "says": "every field a check reads can be read (a time is an RFC 3339 UTC time, a hash input is JSON)" } ], "marked": "by a marker on every check" }, "device": { "artifacts": [ "device-bundle" ], "rules": [ { "id": "device.form", "source": "form", "level": "integrity", "sites": 1, "says": "the file is a device bundle" }, { "id": "device.manufacture-form", "source": "manufacture-form", "level": "integrity", "sites": 1, "says": "the manufacture credential is a DeviceManufacture credential with the device id, the device key, the model and the serial in the clear" }, { "id": "device.manufacturer-id", "source": "manufacturer-id", "level": "authenticity", "sites": 1, "says": "the manufacturer id is the id derived from the manufacturer keys in the credential" }, { "id": "device.manufacture-holder", "source": "manufacture-holder", "level": "authenticity", "sites": 1, "says": "the manufacture credential is held by the manufacturer itself: ownership leaves it only by a signed transfer" }, { "id": "device.manufacture-signature", "source": "manufacture-signature", "level": "authenticity", "sites": 1, "says": "the manufacture credential is signed by the manufacturer, Ed25519 and ML-DSA-65, both (each signature in canonical base64: the same bytes in another text are not that signature; the link is exactly its statement and its signature, and the signature object exactly its members: a member more is another text of the same signed statement, and is refused)" }, { "id": "device.manufacturer-trusted", "source": "manufacturer-trusted", "level": "authenticity", "sites": 1, "says": "the manufacturer is one of the manufacturers the verifier trusts" }, { "id": "device.manufacture-window", "source": "manufacture-window", "level": "integrity", "sites": 1, "says": "the manufacture credential is valid on the verifier's clock" }, { "id": "device.manufacture-status-list", "source": "manufacture-status-list", "level": "integrity", "sites": 1, "says": "a current status list of the manufacturer, handed to the verifier, can be read at the credential's index" }, { "id": "device.manufacture-revoked", "source": "manufacture-revoked", "level": "integrity", "sites": 1, "says": "no current status list of the manufacturer recalls the manufacture credential" }, { "id": "device.device-key", "source": "device-key", "level": "authenticity", "sites": 1, "says": "the device key the manufacturer names is a canonical ML-DSA-65 public key" }, { "id": "device.device-id", "source": "device-id", "level": "authenticity", "sites": 1, "says": "the device id is the id derived from the device key" }, { "id": "device.firmware-form", "source": "firmware-form", "level": "integrity", "sites": 1, "says": "the firmware release has a model, a version, a sequence number and the digest of the image" }, { "id": "device.firmware-signer", "source": "firmware-signer", "level": "authenticity", "sites": 1, "says": "the release is signed by the manufacturer of the device, whose id is the id of its keys" }, { "id": "device.firmware-signature", "source": "firmware-signature", "level": "authenticity", "sites": 1, "says": "the release is signed by who released it, Ed25519 and ML-DSA-65, both (each signature in canonical base64: the same bytes in another text are not that signature; the link is exactly its statement and its signature, and the signature object exactly its members: a member more is another text of the same signed statement, and is refused)" }, { "id": "device.firmware-model", "source": "firmware-model", "level": "integrity", "sites": 1, "says": "the release is for the model of the device" }, { "id": "device.firmware-retracted", "source": "firmware-retracted", "level": "integrity", "sites": 1, "says": "no current firmware policy of the manufacturer retracts the release" }, { "id": "device.firmware-rollback", "source": "firmware-rollback", "level": "integrity", "sites": 1, "says": "the sequence number of the release is at or above the highest floor of the manufacturer's current firmware policies" }, { "id": "device.firmware-software", "source": "firmware-software", "level": "integrity", "sites": 1, "says": "the attestation handed is a Proof of Software attestation that hashes to its statementHash, is the one the release names, and lists the image digest" }, { "id": "device.chain-length", "source": "chain-length", "level": "integrity", "sites": 1, "says": "the ownership chain has at most sixty-four transfers" }, { "id": "device.transfer-form", "source": "transfer-form", "level": "integrity", "sites": 1, "says": "every link of the ownership chain is a transfer" }, { "id": "device.transfer-device", "source": "transfer-device", "level": "integrity", "sites": 1, "says": "every transfer is a transfer of this device" }, { "id": "device.transfer-ids", "source": "transfer-ids", "level": "authenticity", "sites": 1, "says": "in every transfer, the giver and the recipient carry the ids derived from their keys" }, { "id": "device.transfer-from", "source": "transfer-from", "level": "authenticity", "sites": 1, "says": "the first transfer is given by the manufacturer, every other by the recipient of the transfer before" }, { "id": "device.transfer-prev", "source": "transfer-prev", "level": "integrity", "sites": 1, "says": "every transfer carries its position and the hash of the link before it" }, { "id": "device.transfer-signature", "source": "transfer-signature", "level": "authenticity", "sites": 1, "says": "every transfer is signed by who gave it, Ed25519 and ML-DSA-65, both (each signature in canonical base64: the same bytes in another text are not that signature; the link is exactly its statement and its signature, and the signature object exactly its members: a member more is another text of the same signed statement, and is refused)" }, { "id": "device.transfer-time", "source": "transfer-time", "level": "integrity", "sites": 1, "says": "transfer times do not go backwards and none is in the verifier's future" }, { "id": "device.authorization-form", "source": "authorization-form", "level": "integrity", "sites": 1, "says": "the authorization names a device, an ownership head and a sorted list of action names" }, { "id": "device.authorization-device", "source": "authorization-device", "level": "integrity", "sites": 1, "says": "the authorization is for this device" }, { "id": "device.authorization-owner", "source": "authorization-owner", "level": "authenticity", "sites": 1, "says": "the authorization is granted by the current owner, whose id is the id of its keys" }, { "id": "device.authorization-ownership", "source": "authorization-ownership", "level": "integrity", "sites": 1, "says": "the authorization is given under the current ownership head" }, { "id": "device.authorization-signature", "source": "authorization-signature", "level": "authenticity", "sites": 1, "says": "the authorization is signed by who granted it, Ed25519 and ML-DSA-65, both (each signature in canonical base64: the same bytes in another text are not that signature; the link is exactly its statement and its signature, and the signature object exactly its members: a member more is another text of the same signed statement, and is refused)" }, { "id": "device.authorization-window", "source": "authorization-window", "level": "integrity", "sites": 1, "says": "the authorization is valid on the verifier's clock and when the device attested" }, { "id": "device.authorization-action", "source": "authorization-action", "level": "integrity", "sites": 1, "says": "the action the device asks for is one the owner granted" }, { "id": "device.status-retired", "source": "status-retired", "level": "integrity", "sites": 1, "says": "no status record read retires the device: of the manufacturer (never lifted), or of the current owner of the chain shown under any ownership head or none (it holds while the chain shown says that owner owns the device)" }, { "id": "device.status-suspended", "source": "status-suspended", "level": "integrity", "sites": 1, "says": "the record with the highest number read of the manufacturer, and of the current owner of the chain shown under any ownership head or none, does not suspend the device (of two with one number the stricter holds)" }, { "id": "device.attestation-form", "source": "attestation-form", "level": "integrity", "sites": 1, "says": "the attestation carries a nonce, an audience, a time, the firmware it runs, an ownership head and an action" }, { "id": "device.attestation-key", "source": "attestation-key", "level": "authenticity", "sites": 1, "says": "the key in the attestation is a canonical ML-DSA-65 public key and the device id is derived from it" }, { "id": "device.attestation-device", "source": "attestation-device", "level": "authenticity", "sites": 1, "says": "the attestation is by the device, and with the key, that the manufacturer certified" }, { "id": "device.attestation-signature", "source": "attestation-signature", "level": "authenticity", "sites": 1, "says": "the attestation is signed with the device key (ML-DSA-65), the signature in canonical base64; the link is exactly its statement and its signature, and the signature object exactly its members: a member more is another text of the same signed statement, and is refused" }, { "id": "device.audience", "source": "audience", "level": "integrity", "sites": 1, "says": "the attestation was made for this verifier" }, { "id": "device.nonce", "source": "nonce", "level": "integrity", "sites": 1, "says": "the attestation carries the nonce this verifier gave" }, { "id": "device.freshness", "source": "freshness", "level": "integrity", "sites": 1, "says": "the attestation is dated no further ahead of the verifier's clock than its tolerance, and no longer before it than the allowed age" }, { "id": "device.attestation-firmware", "source": "attestation-firmware", "level": "integrity", "sites": 1, "says": "the firmware the device says it runs is the release shown (digest and sequence)" }, { "id": "device.attestation-ownership", "source": "attestation-ownership", "level": "integrity", "sites": 1, "says": "the attestation names the current ownership head" }, { "id": "device.witness-envelope", "source": "witness-envelope", "level": "integrity", "sites": 1, "says": "the AIP-23 envelope given is the envelope of a device attestation, hashes to its statementHash and commits to this device and this attestation" }, { "id": "device.witness-time", "source": "witness-time", "level": "integrity", "sites": 1, "says": "the attestation is not dated after the moment the verifier read its envelope on the chain (of several readings, the earliest)" }, { "id": "device.unreadable", "source": "unreadable", "level": "integrity", "sites": 1, "says": "every field a check reads can be read (a time is an RFC 3339 UTC time, a hash input is JSON)" } ], "marked": "by a marker on every check" } }, "notEnrolled": [ { "verifier": "identity: SD-JWT (RFC 9901)", "refusalSites": 26, "why": "its refusals carry texts, not rule ids (counted: the calls of its refusal helper); it is checked by its own probe, on the RFC 9901 vectors" }, { "verifier": "identity: Travel Rule", "refusalSites": 20, "why": "its refusals are reasons in a list, not rule ids (counted: the places that add one); it takes the presentation verdict from the enrolled verifier" }, { "verifier": "identity: compliance", "refusalSites": 3, "why": "its refusals are reasons in a list, not rule ids (counted: the places that add one); it takes the presentation verdict from the enrolled verifier" } ] }