The Financial Action Task Force's (FATF) Travel Rule (Recommendation 16) mandates that Virtual Asset Service Providers (VASPs) share originator and beneficiary information for cryptocurrency transactions. Traditional centralized solutions create data silos and privacy risks. Decentralized Identity (DID) and Verifiable Credentials (VCs) offer a paradigm shift, enabling selective disclosure of verified user data without a central authority. This approach aligns with core Web3 principles of user sovereignty and cryptographic trust.
How to Implement a Decentralized Identity Solution for Travel Rule Compliance
Introduction: Decentralized Identity for Travel Rule Compliance
A technical guide to implementing a privacy-preserving, verifiable credential system for meeting global Travel Rule requirements.
A compliant DID architecture for the Travel Rule typically involves three core roles: the Issuer (a regulated entity like a bank or licensed VASP that attests to a user's identity), the Holder (the user who controls their credentials in a digital wallet), and the Verifier (the receiving VASP that needs to confirm the sender's data). The flow uses the W3C Verifiable Credentials Data Model and protocols like DIDComm for secure, peer-to-peer messaging between VASP wallets, ensuring data is shared only between obligated parties.
Implementation begins with choosing a DID method suitable for the target blockchain environment, such as did:ethr for Ethereum or did:key for a more portable approach. The issuer creates a DID Document for the user, which contains public keys and service endpoints. A Verifiable Credential is then issued, containing the required Travel Rule attributes (e.g., name, account number, physical address) and signed with the issuer's private key. This credential is cryptographically bound to the user's DID.
When a transaction is initiated, the sending VASP's wallet (acting for the Holder) creates a Verifiable Presentation. This presentation packages the relevant credentials, often using Zero-Knowledge Proofs (ZKPs) via BBS+ signatures or zk-SNARKs to prove the user is over 18 or is not on a sanctions list without revealing the underlying data. This presentation is encrypted and sent directly to the receiving VASP's DID service endpoint via DIDComm.
The verifier (receiving VASP) decrypts the message, resolves the DIDs to check their revocation status (e.g., via a smart contract or a credential status list), and verifies the cryptographic signatures on the presentation and the embedded credentials. This process ensures data authenticity, integrity, and freshness. All actions are logged for audit purposes, creating a cryptographic audit trail that satisfies regulatory requirements without exposing full user PII to intermediaries.
Key technical considerations include interoperability through standards like the Travel Rule Universal Protocol (TRUP) and OpenVASP, key management for institutional wallets, and privacy-preserving computation for sanctions screening. Frameworks like Hyperledger Aries provide toolkits for building these agent-based systems. This architecture reduces counterparty risk, minimizes data breaches, and creates a user-centric compliance model scalable across jurisdictions.
Prerequisites and Technical Stack
Building a decentralized identity (DID) solution for Travel Rule compliance requires a specific technical foundation. This guide outlines the core concepts, tools, and infrastructure you need before writing your first line of code.
The Travel Rule mandates that Virtual Asset Service Providers (VASPs) share originator and beneficiary information for cryptocurrency transfers. A decentralized identity solution addresses this by allowing users to self-sovereignly control and share their verified credentials (e.g., proof of identity, VASP affiliation) without a central database. The core stack involves Decentralized Identifiers (DIDs), Verifiable Credentials (VCs), and a Verifiable Data Registry (VDR) like a blockchain. Key standards to understand are the W3C's DID Core and Verifiable Credentials Data Model.
Your development environment must support cryptographic operations and blockchain interaction. Essential prerequisites include Node.js (v18+ recommended) or Python (3.9+), a package manager like npm or pip, and a code editor. You will need libraries for creating and signing VCs. For JavaScript/TypeScript, consider did-jwt-vc and @veramo/core. For Python, aries-cloudagent or libraries like vc-js via bindings are common. Familiarity with public-key cryptography (Ed25519, secp256k1) and JSON-LD or JWT VC formats is required for credential issuance and verification.
A Verifiable Data Registry is necessary to resolve DIDs and check credential status. You can use a permissioned blockchain for enterprise control (e.g., Hyperledger Indy, Besu) or a public blockchain for interoperability (e.g., Ethereum, Polygon). For testing, you can start with a local Indy network or the Ethereum Sepolia testnet. You will also need a DID resolver. Implement your own or use a service like did:web for development or universal resolvers like those from Spruce ID or Microsoft's ION for did:ion.
The final core component is a VC wallet for end-users, which can be a mobile app or browser extension. For prototyping, you can use open-source wallet SDKs like Veramo Agent or Trinsic's ecosystem. Your infrastructure must also include secure key management. Never store private keys in plaintext. Use Hardware Security Modules (HSMs), cloud KMS (e.g., AWS KMS, GCP Cloud KMS), or dedicated key management libraries like @noble/curves and @noble/hashes for cryptographic operations in a secure, server-side environment.
How to Implement a Decentralized Identity Solution for Travel Rule Compliance
This guide explains how to use Decentralized Identifiers (DIDs), Verifiable Credentials (VCs), and selective disclosure to build a privacy-preserving system for meeting Financial Action Task Force (FATF) Travel Rule requirements.
The FATF Travel Rule requires Virtual Asset Service Providers (VASPs) to share sender and beneficiary information for cryptocurrency transactions exceeding a threshold (e.g., $3,000 in the US). Traditional centralized data-sharing models create privacy risks and single points of failure. A decentralized identity approach using Decentralized Identifiers (DIDs) and Verifiable Credentials (VCs) offers a more secure and interoperable alternative. DIDs, such as those defined by the W3C standard, provide a cryptographically verifiable identifier controlled by the user or VASP, independent of any central registry.
In this model, a user's identity attributes—like name, address, and wallet address—are issued as Verifiable Credentials by a trusted entity, such as a licensed VASP after a Know Your Customer (KYC) process. These VCs are signed cryptographically, making them tamper-evident and instantly verifiable. The user stores their VCs in a personal digital wallet. When initiating a Travel Rule transaction, the user's wallet can present a VC to the sending VASP, proving their verified identity without exposing the underlying KYC documents or raw personal data.
The core privacy mechanism is selective disclosure. Instead of sending an entire credential, the user's wallet can generate a Zero-Knowledge Proof (ZKP) or use BBS+ signatures to prove specific claims. For example, a wallet could prove "I am over 18 and a resident of Country X" from a government-issued ID VC, or "My wallet address 0x... is linked to my verified identity" from a VASP-issued credential, without revealing the full credential contents. This minimizes data exposure and aligns with data protection regulations like GDPR.
Implementation requires selecting a DID method (e.g., did:ethr for Ethereum, did:key for simplicity) and a VC data model. For developers, libraries like did-jwt-vc (JavaScript) or aries-framework-go (Go) provide tools for creating, signing, and verifying VCs. A basic flow involves: 1) The VASP issuer creates a signed VC for a user after KYC. 2) The user stores it in a compatible wallet (e.g., based on w3c standards). 3) During a transaction, the wallet creates a verifiable presentation with selective disclosure for the receiving VASP. 4) The receiving VASP verifies the presentation's signature and the issuer's DID on-chain or via a resolver.
Key technical considerations include revocation. A common pattern uses revocation registries (like in Hyperledger AnonCreds) or status lists where the issuer publishes a cryptographic accumulator. Verifiers must check this registry to ensure the credential hasn't been revoked. Interoperability is critical; using W3C-standard data models and the Decentralized Identity Foundation's (DIF) specifications ensures different VASP systems can communicate. For high-volume verification, consider batch verification of ZKPs or using JSON Web Tokens for Verifiable Credentials (JWT-VC) for simpler, if less privacy-preserving, implementations.
Adopting DIDs and VCs for Travel Rule compliance shifts the paradigm from centralized data silos to user-centric, verifiable data exchanges. It enhances security by removing central honeypots of PII, improves user privacy through cryptographic proofs, and can reduce operational costs by automating verification. Successful deployment requires collaboration across the industry to establish trusted issuer frameworks, common schemas for Travel Rule VCs, and integration with existing VASP communication protocols like the Travel Rule Universal Solution Technology (TRUST) in the US or OpenVASP in Europe.
Travel Rule Data: Centralized vs. Decentralized Approach
Key differences in data handling, security, and compliance between traditional and decentralized identity models for the Travel Rule.
| Feature | Centralized VASP Database | Decentralized Identity (DID) & Verifiable Credentials |
|---|---|---|
Data Storage | Centralized database controlled by VASP or third-party provider | User-held verifiable credentials stored in a personal wallet |
Data Access | Direct query between VASP databases via APIs or intermediaries | Selective disclosure via cryptographic proofs (e.g., ZKPs) |
Data Sovereignty | VASP retains full custody and control of user PII | User controls and consents to data sharing via their private keys |
Interoperability | Requires standardized APIs and bilateral agreements between VASPs | Uses open W3C standards (DIDs, VCs) for universal compatibility |
Audit Trail | Centralized logging within each VASP's system | Immutable, cryptographic proof of consent and disclosure on-chain or via VCs |
Regulatory Burden | High (data protection, secure storage, breach liability) | Shifted (user manages data, VASP verifies proofs) |
Single Point of Failure | ||
Real-time Compliance Verification |
Step 1: Creating and Managing Decentralized Identifiers (DIDs)
Decentralized Identifiers (DIDs) form the cryptographic foundation for a verifiable, self-sovereign identity system, essential for compliant cross-border crypto transactions.
A Decentralized Identifier (DID) is a globally unique, persistent identifier that an individual, organization, or device controls without reliance on a central registry. Unlike traditional identifiers (like an email address), a DID is anchored to a verifiable data registry, typically a blockchain or distributed ledger. This creates a root of trust where the DID's cryptographic proofs can be independently verified by any party, a core requirement for automating Travel Rule compliance checks between Virtual Asset Service Providers (VASPs).
Creating a DID involves generating a DID Document (DID Doc). This JSON-LD document contains the public keys, authentication mechanisms, and service endpoints associated with the DID. For a VASP implementing Travel Rule, the DID Doc would include public keys for signing compliance messages and a service endpoint (like "serviceEndpoint": "https://vasp.example.com/travel-rule") where other VASPs can send encrypted transaction data. The DID itself is a URI, such as did:ethr:0xabc123... for the Ethereum ecosystem or did:key:z6Mk... for a key-based method.
Here is a simplified example of a DID Document a VASP might publish:
json{ "@context": "https://www.w3.org/ns/did/v1", "id": "did:ethr:0x5cF...", "verificationMethod": [{ "id": "did:ethr:0x5cF...#controller", "type": "EcdsaSecp256k1VerificationKey2019", "controller": "did:ethr:0x5cF...", "publicKeyHex": "02b97c30de767f084ce..." }], "authentication": ["did:ethr:0x5cF...#controller"], "service": [{ "id": "did:ethr:0x5cF...#travel-rule", "type": "TravelRuleService", "serviceEndpoint": "https://api.securevasp.com/travel-rule/v1" }] }
The service block is critical, as it defines how other VASPs discover and communicate with your compliance system.
Managing DIDs requires secure key management. The private key corresponding to the public key in the DID Doc is used to sign all outgoing compliance attestations. Loss of this key compromises the VASP's ability to prove its identity. Best practices involve using Hardware Security Modules (HSMs) or cloud-based key management services. Furthermore, DIDs can be updated to rotate keys or change service endpoints by submitting a new DID Doc transaction to the underlying ledger, signed by the current private key.
For Travel Rule, the DID's resolvability is paramount. Any counterparty VASP must be able to fetch your current, valid DID Document from the ledger to verify your signatures and find your compliance endpoint. Protocols like the W3C DID Resolution specification standardize this process. When VASP A needs to send traveler information to VASP B, it first resolves VASP B's DID to get the public key (for encrypting data) and the service endpoint (for sending it), creating a secure, peer-to-peer communication channel without a central intermediary.
Implementing DIDs shifts the compliance paradigm from fragmented, bilateral agreements to a globally interoperable framework. By anchoring their institutional identity to a DID, VASPs can automate the discovery and verification process, reducing operational overhead and enabling real-time compliance for transactions. The next step is to define the verifiable credentials that carry the actual traveler information, which will be signed and encrypted using the keys established in this DID layer.
Step 2: Designing the Travel Rule Credential Schema
Define the structure of the verifiable credentials that will securely transmit Travel Rule information between VASPs.
A credential schema defines the data model for a Verifiable Credential (VC). For Travel Rule compliance, this schema must standardize the required information fields, their data types, and their semantic meaning to ensure interoperability between different VASPs and identity systems. The schema acts as a shared blueprint, ensuring that when a VASP issues a credential stating "Alice sent 1.5 ETH to Bob," every receiving system understands the data structure. Common standards like the W3C Verifiable Credentials Data Model provide the foundation, but you must define the specific claims relevant to the Travel Rule.
The core of your Travel Rule schema will include mandatory fields from the FATF Recommendation 16 and local regulatory variants. Essential claims typically include: originatorVASPdid (the issuer's Decentralized Identifier), beneficiaryVASPdid, originatorName, originatorAccountNumber, beneficiaryName, beneficiaryAccountNumber, transactionHash, assetType, amount, and timestamp. Each field should have a defined type (e.g., string, number, datetime) and can include constraints. Using a JSON Schema is the standard method to formally define this structure, enabling validation before credential issuance.
Here is a simplified example of a JSON Schema definition for a Travel Rule credential's credentialSubject:
json{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "originatorVASPdid": { "type": "string", "format": "uri" }, "transactionHash": { "type": "string", "pattern": "^0x[a-fA-F0-9]{64}$" }, "amount": { "type": "string" }, "assetType": { "type": "string", "enum": ["ETH", "USDC", "WBTC"] } }, "required": ["originatorVASPdid", "transactionHash", "amount", "assetType"] }
This schema ensures the transactionHash is a valid 64-character hex string and the assetType is from a predefined list. The schema's URI (e.g., https://yourvasp.com/schemas/travel-rule-v1.0.json) is then embedded in the issued VC, allowing any verifier to fetch and validate the credential's structure.
Beyond basic fields, consider privacy-enhancing design. You may create separate, linked schemas for sensitive PII (like names and account numbers) and non-sensitive transaction data. This allows the use of zero-knowledge proofs or selective disclosure, where a VASP can prove compliance (e.g., "I have verified the beneficiary's name") without revealing the actual name string in every transaction. The schema should also include a context (@context) property linking to standard vocabularies like Schema.org or the W3C VC context to ensure semantic clarity.
Finally, the schema must be published to a trusted and persistent location, such as a decentralized storage network (IPFS, Arweave) or a highly available HTTPS endpoint. The schema's content identifier (like an IPFS CID) becomes its immutable reference. Any change to required fields necessitates a new schema version with a new URI. This versioning is critical for maintaining backward compatibility and audit trails. Designing a robust, extensible schema is a foundational step that dictates the security, privacy, and interoperability of your entire Travel Rule implementation.
Step 3: Issuing Verifiable Credentials to Users
This step details the technical process of creating and issuing cryptographically signed Verifiable Credentials (VCs) to represent a user's verified identity data for Travel Rule compliance.
A Verifiable Credential (VC) is a W3C-standard data structure that packages claims about a subject (e.g., a user's name and address) into a tamper-evident, cryptographically signed document. The issuer (your VASP) signs the VC using a private key, creating a Verifiable Presentation that can be shared with other parties. For Travel Rule, the credential's claims would include the verified originator or beneficiary information required by the FATF's Recommendation 16, such as name, walletAddress, dateOfBirth, and nationalIdNumber. The core data model is defined in JSON-LD, enabling semantic interoperability between different systems.
To issue a VC, you first construct the credential payload. This involves creating a JSON object containing the @context, a unique id, the type (e.g., ["VerifiableCredential", "TravelRuleIdentityCredential"]), the issuer (your VASP's DID), the issuanceDate, the credentialSubject (the user's data), and optionally a credentialSchema for validation. Here's a simplified example of the payload before signing:
json{ "@context": ["https://www.w3.org/2018/credentials/v1"], "id": "urn:uuid:7c938b7a-0d5e-4b5a-9a7c-123456789abc", "type": ["VerifiableCredential", "TravelRuleIdentityCredential"], "issuer": "did:ethr:0x1234...", "issuanceDate": "2024-01-15T10:00:00Z", "credentialSubject": { "id": "did:ethr:0xabcd...", "name": "Jane Doe", "walletAddress": "0x7890..." } }
The next step is cryptographically signing this payload to produce a Verifiable Presentation. You would typically use a Decentralized Identifier (DID) and its associated private key for signing. Libraries like did-jwt-vc (for Ethereum) or ssi-sdk provide methods for this. The signing process generates a JSON Web Token (JWT) or a Linked Data Proof (like Ed25519Signature2020) attached to the credential. This proof contains the signature and the public key information needed for verification, binding the data irrevocably to you as the issuer. The signed VC is now a portable, verifiable asset the user controls.
After creation, the VC must be delivered to the user's digital wallet. This is typically done via a credential offer protocol. Your backend generates a unique offer URL or QR code containing a reference to the credential. The user scans this with their identity wallet app (e.g., Spruceid's credible or a walt.id wallet), which then sends a request to your issuer endpoint to fetch the signed VC. The wallet securely stores the VC, often in an encrypted local vault. The user now holds the credential and can present it during a transaction, initiating the verification process described in the next step.
Critical implementation considerations include selective disclosure and privacy. Using Zero-Knowledge Proofs (ZKPs), a user can prove they hold a valid VC from your VASP without revealing all the underlying data (e.g., proving they are over 18 without disclosing their birth date). Frameworks like anoncreds or zkp-enabled VC formats support this. Furthermore, you must establish a revocation mechanism, such as a revocation list (e.g., a W3C StatusList2021) or a smart contract registry, to invalidate credentials if a user's KYC status changes or is revoked.
Finally, integrate this issuance flow into your user onboarding. After successful KYC verification (Step 2), trigger the VC issuance process automatically. Log the credential id and issuance event in your compliance ledger. Provide clear instructions to users for importing the credential into a compatible wallet. By issuing standardized VCs, you transform static KYC data into a reusable, user-centric, and interoperable asset that fulfills the data portability intent of modern Travel Rule solutions like the Travel Rule Universal Solution Technology (TRUST) framework.
Step 4: Implementing Selective Disclosure with BBS+ Signatures
This step details how to use BBS+ signatures to enable users to prove specific identity claims for Travel Rule compliance without revealing their entire credential.
Selective disclosure is the cryptographic ability to reveal only a subset of the claims signed within a Verifiable Credential (VC). For Travel Rule compliance, a Virtual Asset Service Provider (VASP) like a crypto exchange might need to verify a user's name and jurisdiction, but not their date of birth or full address. BBS+ signatures, a type of zero-knowledge proof (ZKP)-ready signature scheme, enable this functionality. Unlike simpler schemes like EdDSA, which require revealing the entire signed message to verify, BBS+ allows the creation of a derived proof that validates only the disclosed attributes while cryptographically guaranteeing the integrity of the hidden ones.
The process begins when the user's wallet receives a Presentation Request from the requesting VASP. This request specifies which claims (e.g., givenName, countryOfResidence) must be disclosed. The wallet, which holds the full signed credential, uses a BBS+ proof generation library to create a BBS+ Signature Proof. This proof is generated from the original BBS+ signature and the credential's disclosed claims. Critically, the undisclosed claims are not sent; instead, the proof contains cryptographic commitments and a zero-knowledge proof of knowledge that convinces the verifier the hidden data exists and was properly signed.
From a developer's perspective, implementing this involves libraries like @mattrglobal/bbs-signatures. The key steps are: 1) Key Generation creating a BLS12-381 key pair, 2) Signing the credential's claims to produce a BBS+ signature, and 3) Proof Generation where the prover creates the derived proof. A simplified code snippet for proof creation might look like:
javascriptconst derivedProof = await BBS.signDerivedProof({ messages: disclosedMessages, // Array of only the disclosed claim values proof: originalBbsSignature, publicKey: issuerPublicKey, nonce: verifierProvidedNonce, // Prevents replay attacks revealed: disclosedIndices // Positions of disclosed claims in original set });
The verifying VASP receives this derived proof and the disclosed claim values. It performs a BBS+ proof verification using the issuer's public key, the disclosed messages, and the same nonce. The verification algorithm confirms that: the disclosed claims are part of the original, valid credential; the undisclosed claims remain unchanged and committed to; and the signature originates from the trusted issuer. This satisfies the Travel Rule's need for verified, minimal disclosure. The nonce is crucial here, as it ensures the proof is generated fresh for each session, preventing replay attacks where an old proof is reused.
For a production Travel Rule system, this selective disclosure mechanism would be integrated within a broader Decentralized Identifier (DID) and VC flow. Standards like the W3C Verifiable Credentials Data Integrity specification with BBS+ cryptosuites provide the interoperability framework. The user's identity wallet (e.g., based on Trinsic, Spruce ID, or Veramo) handles the complex cryptography, presenting a simple consent interface to the user. The receiving VASP's compliance engine would use a compatible verification SDK to process the proof, extract the mandated data (like the beneficiary's name), and log it for their regulatory reporting, all without ever seeing or storing the user's full identity dataset.
Step 5: Building the VASP Verification Endpoint
This guide details the server-side implementation of a decentralized identity verification endpoint for Travel Rule compliance, enabling secure, peer-to-peer data exchange between Virtual Asset Service Providers (VASPs).
The VASP Verification Endpoint is a secure HTTPS server that acts as your institution's gateway for Travel Rule compliance. It exposes a standardized API, typically based on the IVMS 101 data model and protocols like the Travel Rule Protocol (TRP) or OpenVASP, to receive and respond to verification requests from other VASPs. Its primary functions are to authenticate incoming requests, validate the structure of the received data, and trigger your internal compliance workflows to screen the counterparty and transaction details.
A core security requirement is endpoint authentication. You must implement mutual Transport Layer Security (mTLS). This ensures that both the requesting VASP and your server cryptographically verify each other's identity using X.509 certificates before any data is exchanged. Your endpoint should be configured to only accept connections from certificates issued by a trusted Certificate Authority (CA) recognized by the Travel Rule scheme you are participating in, such as the Travel Rule Universal Certificate Authority (TRUCA).
The endpoint must parse and validate incoming JSON payloads. A request will contain the originator's and beneficiary's Verifiable Credentials (VCs), which are signed JWTs containing IVMS 101 identity data and a proof of control over a decentralized identifier (DID). Your server must verify the JWT signature against the issuer's DID document on the relevant blockchain (e.g., Ethereum, Polygon) to ensure the credential has not been tampered with and was issued by a trusted VASP.
Upon successful credential verification, the endpoint hands off the structured identity data to your internal compliance engine. This engine performs the necessary Sanctions Screening, PEP checks, and risk assessment based on the provided name, geographic identifiers, wallet address, and transaction amount. The result of this check, along with an acknowledgment of receipt, is formatted into a response payload and sent back to the requesting VASP to complete the compliance handshake.
Here is a simplified Node.js/Express example showcasing the core endpoint structure for handling an incoming TRP-style request. Note that in production, you would integrate a full IVMS 101 parser, a robust DID resolver, and your compliance vendor's SDK.
javascriptconst express = require('express'); const { verifyJWT } = require('./did-verifier'); const { screenTransaction } = require('./compliance-engine'); const app = express(); app.use(express.json()); // This endpoint expects mTLS to be handled upstream by the web server (e.g., Nginx) app.post('/api/v1/travelrule/verify', async (req, res) => { try { const { originatorVC, beneficiaryVC, transaction } = req.body; // 1. Verify the Verifiable Credentials' signatures const originatorData = await verifyJWT(originatorVC); const beneficiaryData = await verifyJWT(beneficiaryVC); // 2. Pass validated data to internal compliance checks const complianceResult = await screenTransaction({ originator: originatorData, beneficiary: beneficiaryData, ...transaction }); // 3. Return standardized response res.json({ status: 'COMPLIANCE_CHECK_PASSED', // or other status message: 'Screening completed.', timestamp: new Date().toISOString(), // ... other required fields }); } catch (error) { res.status(400).json({ error: error.message }); } }); app.listen(3000);
Finally, ensure your endpoint is highly available, logged, and monitored. Compliance requests are time-sensitive, and failures can block customer transactions. Implement rate limiting to prevent abuse, detailed audit logging of all requests and decisions for regulatory examination, and alerts for any downtime or spike in verification failures. Your endpoint's URL and public certificate must be correctly listed in the shared VASP Directory so other participants can discover and trust it.
Implementation Stack and Libraries
Comparison of major frameworks and libraries for building a decentralized identity solution compliant with the Travel Rule (FATF Recommendation 16).
| Component / Feature | Verifiable Credentials (W3C) | Decentralized Identifiers (DID) | Travel Rule Protocol (TRP) |
|---|---|---|---|
Core Standard | W3C Verifiable Credentials Data Model v2.0 | W3C Decentralized Identifiers v1.0 | IVMS 101 (InterVASP) Data Model |
Identity Anchoring | DID Document (on-chain) | DID Method (e.g., did:ethr, did:key) | LEI or equivalent legal identifier |
Credential Format | JSON-LD with LD-Proofs or JWT | Not applicable | JSON schema adhering to IVMS 101 |
Selective Disclosure | |||
ZK-Proof Support | BBS+ Signatures, CL-Signatures | Limited (depends on method) | Not typically required |
Transaction Binding | Presentation Exchange | DID-Auth / SIOPv2 | URI linking to VASP endpoint |
Primary Library (JS/TS) | Veramo Framework | DID-JWT, did-resolver | Not standardized; custom implementation |
Estimated Dev Time | 8-12 weeks | 4-6 weeks | 6-10 weeks (integration) |
Resources and Further Reading
These resources provide concrete specifications, protocols, and tooling needed to implement a decentralized identity (DID) architecture aligned with Travel Rule requirements. Each link supports practical design, integration, or compliance decisions.
Frequently Asked Questions (FAQ)
Common technical questions and solutions for developers building decentralized identity (DID) systems to comply with the Financial Action Task Force (FATF) Travel Rule (Recommendation 16).
The Travel Rule is a FATF regulation requiring Virtual Asset Service Providers (VASPs) like exchanges to share sender and beneficiary information for transactions above a threshold (often $/€1000). Traditional compliance relies on centralized databases, creating privacy and interoperability issues.
Decentralized Identity (DID) addresses this by allowing users to control their verified credentials (VCs) via a self-sovereign identity (SSI) wallet. A VASP can request only the specific, attested data needed (e.g., "This user is over 18 and a resident of Country X") without exposing raw personal data. This meets compliance needs while enhancing user privacy and enabling cross-VASP interoperability using standards like W3C DIDs and Verifiable Credentials.