| sidebar_position | 12 |
|---|---|
| title | RFC-011 — Identity Resolution |
| description | Normative identity resolution and PTI-ID assignment for PTI. |
| Field | Value |
|---|---|
| RFC | 011 |
| Title | Identity Resolution |
| Status | Proposed |
| Depends on | RFC-001, RFC-003, RFC-005 |
| Updates | — |
This document specifies identity resolution in PTI: assignment of portable PTI-ID identifiers, mapping producer entity_id values, deduplication, confidence scoring, external subject handling, and merge/split governance.
Trust portability requires a stable subject key across producers without exposing national identifiers in every API call. Normative resolution prevents duplicate subjects, erroneous merges, and ambiguous lookup matches.
Identity resolution sits between ingest and graph attachment. It consumes attributes from events and search requests, evaluates match confidence against existing subjects, and either links or creates pti_id records. It is distinct from authentication of API callers.
| Term | Definition |
|---|---|
| PTI-ID | Canonical subject identifier (pti_{alphanumeric}) |
| Entity reference | (tenant_id, entity_id) pair |
| Strong identifier | High-uniqueness attribute (e.g., government ID hash, verified phone) |
| Weak identifier | Low-uniqueness attribute (e.g., name + DOB) |
| Confidence score | 0.0–1.0 match probability |
| External subject | Candidate not yet materialized in trust graph |
- PTI-ID MUST match
^pti_[a-z0-9]{8,32}$. - PTI-ID MUST be assigned only by identity resolution service.
- PTI-ID MUST NOT embed raw national ID or sequential guessable counters without entropy.
- On first event for (
tenant_id,entity_id), resolution MUST assign or linkpti_id. - Subsequent events with same pair MUST resolve to same
pti_idwithout re-evaluation unless split invoked. - Bindings MUST be stored as graph edges (
resolves_to) withconfidence: 1.0for direct producer mappings.
Search and ingest resolution MUST compute confidence from configured rules:
| Signal combination | Minimum confidence to auto-link |
|---|---|
| Strong identifier exact match | 0.95 |
| Strong + weak corroboration | 0.90 |
| Weak identifiers only | MUST NOT auto-link above 0.85 |
Thresholds MAY be tightened per jurisdiction via policy.
- Auto-merge MUST NOT occur when confidence < configured threshold.
- Auto-merge MUST create audit record with inputs and rule version.
- Conflicting strong identifiers MUST block merge and route to manual review queue.
Implementations SHOULD provide operator workflow for:
merge— combine twopti_idrecords with governance approvalsplit— separate erroneously merged subjectsreject— mark candidate as non-match
All actions MUST be audit-logged with actor and justification.
When consumer search finds no graph match but strong identifiers present:
- API MAY return
status: external_route(RFC-004). - External screening MUST not fabricate trust scores; only entitled screening dimensions MAY run.
- If subject later ingests events,
pti_idMUST be created and linked without reusing external temporary tokens in reports.
- Subjects MAY be pre-provisioned via verified onboarding flows before first producer event.
- Deletion MUST mark
pti_iderasedand invalidate entity bindings. - Re-registration after erasure MUST receive new
pti_idunless law requires linkage (documented exception).
Foreign PTI-IDs MUST use pti_{local}@{operator_id} format (RFC-006).
Local resolution MUST NOT merge foreign and local IDs without explicit cross-operator identity agreement.
- Strong identifiers MUST be stored hashed with salt at rest.
- Resolution admin APIs MUST be privileged and monitored for bulk enumeration.
- Match algorithms MUST resist timing side channels on citizen ID lookup.
- Resolution MUST use minimum identifiers necessary.
- Subjects MUST access merge/split history where jurisdiction grants right to explanation.
- Biometric matching MUST NOT be default resolution path.
{
"tenant_id": "mfi_101",
"entity_id": "borrower_8821",
"pti_id": "pti_k9m2x7q1",
"resolution": "entity_binding",
"confidence": 1.0
}{
"candidates": [
{ "pti_id": "pti_a1", "confidence": 0.72 },
{ "pti_id": "pti_b2", "confidence": 0.68 }
],
"status": "ambiguous",
"message": "Refine search with strong identifier"
}- Separate hot path (entity binding) from cold path (fuzzy search).
- Version matching rules; replay disputes against historical rule version.
- Index hashed strong identifiers with constant-time comparison.
- Standard attribute dictionary for cross-border resolution
- Verifiable credential binding to PTI-ID
- Privacy-preserving matching protocols (PSI) for federation