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 Inhaber)Key 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. Signatures are therefore 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 zu 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 to 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: