identity ceiling - XibalbaTechSol/integrity-core GitHub Wiki
title: Identity Ceiling & Verification Ladder [BUILT] created: 2026-07-09 updated: 2026-09-09 type: concept tags: [identity, metrics, compliance] confidence: high source_files:
- README.md
- integrity-oracle/scoring-core/src/lib.rs
- integrity-oracle/backend/src/handlers.rs
- integrity-oracle/backend/src/verification.rs
- integrity-oracle/backend/src/attestation.rs
- integrity-oracle/backend/src/kyc.rs
- integrity-oracle/backend/migrations/0011_identity_verifications.sql
- bcc_middleware/app/chain.py
- bcc_middleware/policies/bcc.rego
[BUILT] β tier is server-derived from evidence and enforced in both AIS
scoring and sensitive BCC policy decisions.
- Tier assignment is server-verified, not client-asserted. Registration establishes tier 1. Active, unexpired, unrevoked evidence raises the effective tier; the compatibility request field is ignored.
bcc_middleware's OPA policy consults tier for a subset of actions.bcc.rego'smin_tier_by_intent_typerule denies clinical intent-types (EMR_WRITE,DISPENSE_MEDICATION,BILLING_SUBMISSION,SECURE_EMR_WRITE,CLINICAL_DATA_ACCESS) from any agent whose server-verified tier is below the required minimum.- The AIS identity ceiling is enforced.
scoring-coreprovidesAisEngine::ceiling_for_tierandAisEngine::score_with_tierwhich cap calculated post-boost scores per tier: Tier 0 (300), Tier 1 (600), Tier 2 (850), and Tier 3 (1000 maximum). Unknown or negative tiers cannot bypass the Tier-0 ceiling; the normalized constraint score uses the same cap.handlers::compute_ais_for_agentpassesagent.verification_tierintoscore_with_tier.
Table of contents
- The design
- Evidence lifecycle
- Correcting the old wiki's mechanism
- EIP-712 legal-controller binding ([PLANNED])
The design
The idea: an agent's AIS ceiling (not just its measured score) is tied to how strongly its identity is verified, so a freshly created, unverified agent can never simply out-score a hardware-attested institutional one.
| Tier | Verification | AIS ceiling | Status |
|---|---|---|---|
| 1 β Sovereign | Software-key possession plus on-chain primitive match | 600 | Assigned at registration |
| 2 β Linked | Dual-resolver DNS TXT proof or GitHub repository proof | 850 | Built; evidence expires after 90 days |
| 3 β Institutional | Nonce-bound AWS Nitro attestation with AWS-root certificate validation | 1000 maximum after boost | Built; evidence expires after 30 days |
| 3 β Institutional KYC | Trusted receipt asserting document authenticity, liveness, and sanctions/PEP screening | 1000 maximum after boost | Built; provider-neutral and expiring |
| Developer API key (testnet convenience) | Issued by integrity-userapi |
Capped at 300 | Score ceiling enforced in scoring-core (300) |
KYC uses a provider-neutral signed-receipt boundary. A commercial provider or
self-hosted open-source verifier holds an Ed25519 key configured independently in
KYC_PROVIDER_KEYS. The open_source_kyc_v1 profile grants Tier 3 only when the
signed receipt affirms document authenticity, biometric liveness, and sanctions/PEP
screening. The Oracle stores only the provider, opaque reference, check flags,
timestamps, and receipt hashβnever raw PII. This records technical assurance; legal
equivalence still depends on deployment jurisdiction and operator policy.
Evidence lifecycle
DNS, GitHub, TEE, and KYC proofs are challenge-bound and stored in
identity_verifications. Agents can revoke one row through a fresh Ed25519-signed
challenge; the signed message binds DID, row ID, nonce, and UTF-8 reason. Evidence
is retained with revoked_at and revoked_reason for auditability. Because every
tier read filters expired and revoked rows, revocation immediately lowers the
effective tier and its AIS ceiling.
Correcting the old wiki's mechanism
The old wiki's identity-ceiling.md/hardware-fingerprinting.md described
Tier 1 as "hardware-tethered" and Tier 2/3 verification building on a
did:xibalba:<hardware_hash> derived by hashing CPU model, MAC address,
and OS machine-id. This does not match the current design. Identity
in this rewrite is a software-held Ed25519/secp256k1 keypair (see
DID) β there is no hardware fingerprint anywhere in
integrity-sdk/integrity-cli today, and the corrected long-term roadmap
(README's "Identity & hardware trust" table) points at a different, more
credible mechanism: keys tethered to a real TEE/SGX enclave or an HSM (AWS
KMS, FIPS 140-2 Level 3), verified via genuine remote attestation
(AWS Nitro/Intel SGX), not a locally-computed hardware hash a host could
freely fabricate. integrity-sdk's
security/attestation.py and the Oracle's attestation.rs implement real AWS
Nitro document and certificate-chain verification β proof generation needs
real enclave hardware this environment doesn't have. Treat any
mention of MAC-address/CPU-serial hashing as never-built product ideation,
not a superseded-but-once-real mechanism.
EIP-712 legal-controller binding ([PLANNED])
The old wiki proposed an EntityBinding EIP-712 typed-data schema binding
an agent's wallet to a named legal controller. No such schema or
verification code exists in contracts/ or integrity-sdk/ today β noted
here only because it is a plausible additional institutional binding, not
because it's built.
Related: DID, AIS, agent primitives.