TRAIL (Trust Registry for AI Identity Layer) ist ein offenes, dezentrales Identitätsprotokoll für KI-Agenten und autonome Systeme, basierend auf W3C Decentralized Identifiers v1.1 [DID-CORE] und Verifiable Credentials 2.0 [VC-DATA-MODEL]. Das Protokoll definiert eine neue DID-Methode (did:trail) mit drei Modi (org, agent, self), kryptographische Integritätsnachweise via Ed25519 DataIntegrityProof (eddsa-jcs-2023) und JSON Canonicalization Scheme (JCS, RFC 8785), sowie ein dreistufiges Trust-Modell (Tier 0–2) mit dezentraler CA-Infrastruktur. TRAIL zielt darauf ab, die fehlende Vertrauensschicht zwischen KI-Infrastruktur (LLMs, Agenten, Automatisierungsplattformen) und menschlichen Entscheidungsträgern zu schließen - rechtskonform nach EU AI Act Art. 13/14 und datenschutzkonform nach DSGVO.
TRAIL (Trust Registry for AI Identity Layer) is an open, decentralised identity protocol for AI agents and autonomous systems, built on W3C Decentralized Identifiers v1.1 [DID-CORE] and Verifiable Credentials 2.0 [VC-DATA-MODEL]. The protocol defines a new DID method (did:trail) with three modes (org, agent, self), cryptographic integrity proofs via Ed25519 DataIntegrityProof (eddsa-jcs-2023) and JSON Canonicalization Scheme (JCS, RFC 8785), and a three-tier trust model (Tier 0–2) with decentralised CA infrastructure. TRAIL addresses the missing trust layer between AI infrastructure (LLMs, agents, automation platforms) and human decision-makers - compliant with EU AI Act Art. 13/14 and GDPR by design.
Die Proliferation autonomer KI-Agenten im B2B-Umfeld - insbesondere im Bereich der Outreach-Automatisierung, der Entscheidungsunterstützung und der agentenbasierten Prozessautomation - erzeugt ein fundamentales Vertrauensproblem: Es gibt keinen standardisierten Weg, zu verifizieren, wer oder was hinter einem KI-System steht.
The proliferation of autonomous AI agents in B2B contexts - particularly in outreach automation, decision support, and agent-based process automation - creates a fundamental trust problem: there is no standardised mechanism to verify who or what is behind an AI system.
Konkret ergeben sich drei Problemkategorien:
Specifically, three problem categories emerge:
| ProblemProblem | Heutiger ZustandCurrent State | KonsequenzConsequence |
|---|---|---|
| AnonymitätAnonymity | KI-Agenten agieren ohne überprüfbare IdentitätAI agents act without verifiable identity | Phishing, Social Engineering, HaftungsvakuumPhishing, social engineering, liability vacuum |
| IntransparenzOpacity | Keine Offenlegung, ob mit KI oder Mensch kommuniziert wirdNo disclosure of whether communication is human or AI | Täuschung, EU AI Act-Verstoß (Art. 52)Deception, EU AI Act violation (Art. 52) |
| ZentralisierungCentralisation | Vertrauenssilos pro Plattform (OpenAI, Anthropic, …)Trust silos per platform (OpenAI, Anthropic, …) | Kein plattformübergreifendes Vertrauen möglichNo cross-platform trust possible |
TRAIL adressiert primär die Ebene der Agenten-zu-Mensch (A2H) und Agenten-zu-Agenten (A2A) Interaktionen. Es ersetzt keine bestehenden Authentifizierungsstandards, sondern ergänzt diese um eine vertrauenszertifizierte Identitätsebene.
TRAIL primarily addresses Agent-to-Human (A2H) and Agent-to-Agent (A2A) interaction layers. It does not replace existing authentication standards but augments them with a trust-certified identity layer.
TRAIL ist nach folgenden nicht-verhandelbaren Anforderungen entworfen:
TRAIL is designed according to the following non-negotiable requirements:
Die did:trail-Methode folgt der formalen ABNF-Syntax gemäß [DID-CORE §8.1]:
The did:trail method follows the formal ABNF syntax per [DID-CORE §8.1]:
trail-did = "did:trail:" trail-specific-id
trail-id = 8HEXDIG "-" 4HEXDIG "-" 4HEXDIG "-" 4HEXDIG "-" 12HEXDIG
trail-tag = 1*(ALPHA / DIGIT / "-") ; optional agent type label
; Example: did:trail:3a8f7c21-b19e-4d02-a7f3-9c1e2b4d8a6f
; Example: did:trail:3a8f7c21-b19e-4d02-a7f3-9c1e2b4d8a6f#agent-type=sales-sdr
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://trailprotocol.org/ns/v1"
],
"id": "did:trail:3a8f7c21-b19e-4d02-a7f3-9c1e2b4d8a6f",
"verificationMethod": [{
"id": "did:trail:3a8f7c21...#key-1",
"type": "JsonWebKey2020",
"controller": "did:trail:3a8f7c21-b19e-4d02-a7f3-9c1e2b4d8a6f",
"publicKeyJwk": {
"kty": "EC",
"crv": "P-256",
"x": "f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9OQoVv",
"y": "x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI"
}
}],
"authentication": ["did:trail:3a8f7c21...#key-1"],
"assertionMethod": ["did:trail:3a8f7c21...#key-1"],
// TRAIL-specific extensions
"trail:agentType": "sales-sdr", // agent classification
"trail:registeredAt": "2026-03-01T00:00:00Z",
"trail:caIssuer": "did:trail:ca:founding-ca-001",
"trail:status": "active", // active | suspended | revoked
"trail:fingerprint": "hmac-sha256:a7f4..." // see §5
}
| Operation | Method | Endpoint | BeschreibungDescription |
|---|---|---|---|
| Create | POST | /v1/dids | Registrierung eines neuen did:trail IdentifiersRegister a new did:trail identifier |
| Read | GET | /v1/dids/{did} | Auflösung des DID-DokumentsResolve the DID document |
| Update | PATCH | /v1/dids/{did} | Key-Rotation, Status-Update - nur durch InhaberKey rotation, status update - owner-only |
| Deactivate | DELETE | /v1/dids/{did} | Soft-Delete: Status auf "revoked" setzenSoft-delete: set status to "revoked" |
TRAIL verwendet Ed25519-Signaturen mit der W3C-standardisierten eddsa-jcs-2023 Cryptosuite für alle DataIntegrityProofs. JSON-Dokumente werden vor dem Signieren mittels JSON Canonicalization Scheme (JCS, RFC 8785) kanonisiert - damit ist die Signatur unabhängig von Serialisierungsreihenfolge oder Formatierung deterministisch verifizierbar.
TRAIL uses Ed25519 signatures with the W3C-standardised eddsa-jcs-2023 cryptosuite for all DataIntegrityProofs. JSON documents are canonicalised using JSON Canonicalization Scheme (JCS, RFC 8785) before signing - making signatures deterministically verifiable regardless of serialisation order or formatting.
// Step 1: Generate Ed25519 key pair
{ publicKey, privateKey } = crypto.generateKeyPairSync("ed25519")
// Step 2: Canonicalise document using JCS (RFC 8785)
// Sorted keys (UTF-16 order), normalised numbers, deterministic output
canonical = JCS.canonicalize(document)
// Step 3: Sign canonical form with Ed25519
signature = crypto.sign(null, canonical, privateKey)
// Step 4: Encode as Multibase (base58btc, z-prefix)
proofValue = "z" + base58btc.encode(signature)
// Verification: re-canonicalise + verify signature → deterministic
valid = crypto.verify(null, JCS.canonicalize(document), publicKey, signature)
Für Org- und Agent-DIDs wird der DID-Suffix aus einem SHA-256-Hash der Initialwerte berechnet, trunkiert auf 12 Hex-Zeichen (48 Bit). Dies bindet den Identifier kryptographisch an seinen Ursprung und verhindert Namespace-Squatting.
For org and agent DIDs, the DID suffix is computed from a SHA-256 hash of the initial values, truncated to 12 hex characters (48 bits). This cryptographically binds the identifier to its origin and prevents namespace squatting.
hash = SHA-256("{slug}|{publicKeyMultibase}|{timestamp}")
suffix = hash.hex().substring(0, 12)
// → did:trail:org:acme-corp-a7f3b2c1e9d0
Die JCS-Implementierung der Referenzimplementierung (@trailprotocol/core) hat null externe Abhängigkeiten und folgt strikt RFC 8785 - einschließlich korrekter UTF-16-Sortierung, -0→0-Normalisierung und NaN/Infinity-Ablehnung. Die Ed25519-Signatur wird über die kanonisierte Bytefolge berechnet, nicht über die Stringrepräsentation.
The JCS implementation in the reference package (@trailprotocol/core) has zero external dependencies and strictly follows RFC 8785 - including correct UTF-16 sorting, -0→0 normalisation, and NaN/Infinity rejection. The Ed25519 signature is computed over the canonicalised byte sequence, not the string representation.
Eine CA stellt einem registrierten KI-Agenten ein Verifiable Credential aus, das die Identität und den Vertrauensstatus bestätigt:
A CA issues a Verifiable Credential to a registered AI agent confirming its identity and trust status:
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://trailprotocol.org/ns/credentials/v1"
],
"type": ["VerifiableCredential", "TrailAgentCredential"],
"id": "https://registry.trailprotocol.org/credentials/vc-a4f92b1c",
"issuer": {
"id": "did:trail:ca:founding-ca-001",
"name": "TRAIL Founding CA"
},
"validFrom": "2026-03-01T00:00:00Z",
"validUntil": "2027-03-01T00:00:00Z", // annual renewal
"credentialSubject": {
"id": "did:trail:agent:acme-sales-sdr-a7f3b2c1e9d0",
"trail:agentType": "sales-sdr",
"trail:trustLevel": "verified", // basic | verified | certified
"trail:operatorDID": "did:web:acme-corp.example.com",
"trail:auditLog": "https://registry.trailprotocol.org/audit/3a8f7c21",
"trail:euAiActScope": ["art13", "art14"],
"trail:trailTrustTier": 1
},
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-jcs-2023",
"created": "2026-03-01T00:00:00Z",
"verificationMethod": "did:trail:ca:founding-ca-001#key-1",
"proofPurpose": "assertionMethod",
"proofValue": "z58DAdFfa9MzHUxPeVXVKTJnnJBkv..."
}
}
TRAIL verwendet ein zweistufiges, dezentrales CA-Modell - analog zu X.509 PKI, jedoch ohne Single-Root-of-Trust:
TRAIL uses a two-tier, decentralised CA model - analogous to X.509 PKI, but without a single root of trust:
| CA-TypCA Type | AnforderungenRequirements | Ausstellbare VCsIssuable VCs |
|---|---|---|
| Founding CA | TrailSign AI GmbH-Audit, technische ZertifizierungTrailSign AI GmbH audit, technical certification | basic, verified |
| Accredited CA | WebTrust oder ETSI EN 319 401, EU-AkkreditierungWebTrust or ETSI EN 319 401, EU accreditation | basic, verified, certified |
Die TRAIL Registry exponiert eine REST-API mit OpenAPI 3.0-Spezifikation. Basis-URL: https://registry.trailprotocol.org/v1
The TRAIL Registry exposes a REST API with an OpenAPI 3.0 specification. Base URL: https://registry.trailprotocol.org/v1
| Endpoint | Method | BeschreibungDescription | Auth |
|---|---|---|---|
/dids/{did} | GET | DID-Dokument auflösen (öffentlich)Resolve DID document (public) | - |
/dids | POST | Neue DID registrierenRegister new DID | CA-Key |
/verify | POST | VC-Präsentation verifizierenVerify VC presentation | API-Key |
/credentials/{id} | GET | VC-Status prüfen (aktiv/widerrufen)Check VC status (active/revoked) | - |
/audit/{did} | GET | Öffentliches Audit-Log (Hash-only)Public audit log (hash-only) | - |
POST /v1/verify
Content-Type: application/json
X-API-Key: <api-key>
{
"presentation": {
"@context": ["https://www.w3.org/ns/credentials/v2"],
"type": ["VerifiablePresentation"],
"holder": "did:trail:3a8f7c21-b19e-4d02-a7f3-9c1e2b4d8a6f",
"verifiableCredential": ["..."] // compact JWT or JSON-LD
}
}
// Response
{
"verified": true,
"did": "did:trail:3a8f7c21-b19e-4d02-a7f3-9c1e2b4d8a6f",
"agentType": "sales-sdr",
"trustLevel": "verified",
"status": "active",
"validUntil": "2027-03-01T00:00:00Z"
}
Das Trust Badge Widget ermöglicht die 1-Zeilen-Integration von TRAIL-Vertrauensstatus in beliebige Web-Frontends:
The Trust Badge Widget enables 1-line integration of TRAIL trust status into any web frontend:
<script src="https://cdn.trailprotocol.org/badge.js"
data-did="did:trail:3a8f7c21-b19e-4d02-a7f3-9c1e2b4d8a6f"
data-theme="dark"
data-lang="de"></script>
Das Widget holt den aktuellen Vertrauensstatus live vom Registry und rendert ein standardisiertes Badge (SVG). Parameter:
The widget fetches the current trust status live from the registry and renders a standardised badge (SVG). Parameters:
| Parameter | Type | BeschreibungDescription | PflichtRequired |
|---|---|---|---|
data-did | string | did:trail Identifier des AgentenAgent's did:trail identifier | ✓ |
data-theme | light|dark | Visuelles Theme des BadgesVisual theme of badge | - |
data-lang | de|en | Sprache des Badge-LabelsBadge label language | - |
data-compact | boolean | Minimalmodus (nur Icon)Compact mode (icon only) | - |
data-callback | function | JS-Callback bei Status-ÄnderungJS callback on status change | - |
| NormRegulation | Artikel / AnforderungArticle / Requirement | TRAIL-UmsetzungTRAIL Implementation | Status |
|---|---|---|---|
| EU AI Act | Art. 13 - Transparenz (Hochrisiko-KI)Transparency (high-risk AI) | KI-Agenten-Typ im DID-Dokument · öffentlich auflösbarAI agent type in DID document · publicly resolvable | ✓ Design |
| EU AI Act | Art. 14 - Menschliche AufsichtHuman oversight | Audit-Log-URL im VC · Operator-DID verknüpftAudit log URL in VC · Operator DID linked | ✓ Design |
| EU AI Act | Art. 52 - Offenlegungspflicht (Chatbots)Disclosure obligation (chatbots) | Trust Badge Signal: "Diese Nachricht kommt von KI-Agent [DID]"Trust Badge signal: "This message is from AI agent [DID]" | → Q3 2026 |
| DSGVO | Art. 5 - DatensparsamkeitData minimisation | Kein Personenbezug im DID-Dokument. Signaturen enthalten nur öffentliche Schlüssel.No personal data in DID document. Signatures contain only public keys. | ✓ Design |
| DSGVO | Art. 25 - Privacy by DesignPrivacy by design | Fingerprint-Schema ermöglicht Verifikation ohne DatenweitergabeFingerprint scheme enables verification without data disclosure | ✓ Design |
| eIDAS 2.0 | EUDIW-KompatibilitätEUDIW compatibility | VC 2.0-Profil kompatibel mit EUDIW-VC-SpezifikationVC 2.0 profile compatible with EUDIW VC specification | → Evaluation |
| BedrohungThreat | AngriffsvektorAttack Vector | TRAIL-GegenmaßnahmeTRAIL Countermeasure |
|---|---|---|
| IdentitätsfälschungIdentity forgery | Angreifer gibt sich als registrierten Agenten ausAttacker impersonates a registered agent | Ed25519-Signatur erfordert den privaten Schlüssel; Proof-Verifikation über öffentlichen Schlüssel im DID-DokumentEd25519 signature requires private key; proof verification via public key in DID document |
| Registry Compromise | Angreifer kompromittiert das zentrale RegistryAttacker compromises the central registry | Dezentrale CA-Signaturen; kompromittiertes Registry kann VCs nicht fälschenDecentralised CA signatures; compromised registry cannot forge VCs |
| Replay Attack | Wiederverwendung eines alten, gültigen VCsReuse of an old, valid VC | VCs enthalten validUntil und Challenge-Nonce in der PresentationVCs contain validUntil and challenge nonce in presentation |
| CA-KompromittierungCA Compromise | Rogue CA stellt ungültige VCs ausRogue CA issues invalid VCs | Kein Single Root of Trust; Community kann CA aus vertrautem Set entfernenNo single root of trust; community can remove CA from trusted set |
| DID HijackingDID Hijacking | Angreifer übernimmt eine DID-IdentitätAttacker takes over a DID identity | Kontrolle über DID erfordert den privaten Ed25519-Schlüssel; Hash-Suffix im DID ist an den Initialschlüssel gebundenControl over DID requires the private Ed25519 key; hash suffix in DID is bound to the initial key |
TRAIL-DID-Dokumente enthalten keinerlei personenbezogene Daten. DataIntegrityProofs ermöglichen kryptographische Verifizierung allein über öffentliche Schlüssel. Self-Mode-DIDs (did:trail:self:z...) ermöglichen vollständig pseudonyme Identitäten ohne Registry.
TRAIL DID documents contain no personal data whatsoever. DataIntegrityProofs enable cryptographic verification using only public keys. Self-mode DIDs (did:trail:self:z...) enable fully pseudonymous identities without any registry.
Folgende Privacy-Eigenschaften sind im Protokolldesign verankert:
The following privacy properties are anchored in the protocol design: