Verifiable Health Link
0.0.2-current - ci-build
Verifiable Health Link, published by IHE IT Infrastructure Technical Committee. This guide is not an authorized publication; it is the continuous build for version 0.0.2-current built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/IHE/ITI.VHL/ and changes regularly. See the Directory of published versions
Note on Transaction Optionality: This transaction is REQUIRED (R) for Trust Anchor actors and OPTIONAL (O) for VHL Sharer and VHL Receiver actors. Implementations that do not support this transaction must use alternative mechanisms (out of scope for this profile) to retrieve PKI material from the Trust Anchor. Only implementations that claim support for this transaction can participate in IHE Connectathon testing for trust material retrieval. See Volume 1 Section XX.2.1 for details on trust establishment approaches.
The Retrieve Trust List with DID transaction allows both VHL Sharers and VHL Receivers to retrieve trusted public key material from the Trust Anchor using Decentralized Identifiers (DIDs).
Retrieved material SHALL be used to determine the trustworthiness of VHL artifacts in accordance with the governing trust framework.
Figure 2:3.YY2-1: Retrieve Trust List with DID Interaction Diagram
| Actor | Role |
|---|---|
| VHL Receiver, VHL Sharer | Initiate Retrieve Trust List Request |
| Trust Anchor | Retrieve Trust List Response |
A VHL Sharer or VHL Receiver, as a participant in the trust network, SHALL be capable of retrieving public key infrastructure (PKI) material from a designated Trust Anchor.
The retrieved material MAY include:
Participants SHOULD cache the received trust list to reduce network and server load.
Preconditions:
The Trust Anchor SHALL have made available at least one endpoint (such as an mCSD-compliant endpoint) that is accessible to all participants in the trust network. The requesting participant (VHL Receiver or VHL Sharer) knows in advance the endpoint from which to retrieve DID Documents and PKI material.
The Trust Anchor MAY additionally provide individual endpoints per participant, in addition to the common endpoint.
The Retrieve Trust List Request retrieves DID Documents from the Trust Anchor.
Request Methods:
The mechanism used to retrieve a DID Document is determined by the DID method of the DID being resolved. Implementations SHALL resolve DID Documents according to the resolution rules defined by the applicable DID method specification.
VHL Sharer / VHL Receiver (Requester):
The requesting actor SHALL:
Upon receipt of Retrieve Trust List Request from a VHL Sharer or VHL Receiver, the Trust Anchor SHALL organize, sign, and expose the PKI material as part of a trusted, canonical trust list.
This MAY include:
The Trust Anchor SHALL only respond with validated and trustworthy material in accordance with the governance policies of the VHL trust framework. This signed trust list enables all participants in the VHL trust network to verify digital signatures and establish secure connections in accordance with the governance policies of the Trust Anchor.
Upon receipt of this response, participants SHALL process the trust list as described in Receive Trust List.
Success Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"@context": [
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/suites/jws-2020/v1"
],
"id": "did:web:trust-anchor.example.org:v1:trustlist",
"controller": "did:web:trust-anchor.example.org:v1:trustlist",
"verificationMethod": [
{
"id": "did:web:trust-anchor.example.org:v1:trustlist#signing-key-1",
"type": "JsonWebKey2020",
"controller": "did:web:trust-anchor.example.org:v1:trustlist",
"publicKeyJwk": {
"kty": "EC",
"kid": "signing-key-1",
"crv": "P-256",
"x": "38M1FDts7Oea7urmseiugGW7tWc3mLpJh6rKe7xINZ8",
"y": "nDQW6XZ7b_u2Sy9slofYLlG03sOEoug3I0aAPQ0exs4"
}
},
{
"id": "did:example:vhl-sharer-123456#signing-key-2",
"type": "JsonWebKey2020",
"controller": "did:web:trust-anchor.example.org:v1:trustlist",
"publicKeyJwk": {
"kty": "EC",
"kid": "signing-key-2",
"crv": "P-256",
"x": "38M1FDts7Oea7urmseiugGW7tWc3mLpJh6rKe7xINZ8-Q",
"y": "nDQW6XZ7b_u2Sy9slofYLlG03sOEoug3I0aAPQ0exs4-"
}
}
],
"proof": {
"type": "JsonWebSignature2020",
"created": "2025-01-15T12:00:00Z",
"verificationMethod": "did:web:trust-anchor.example.org:v1:trustlist#signing-DID",
"proofPurpose": "assertionMethod",
"nonce": "a3f8c2d1-9b4e-4f7a-b6e2-1c5d8f3a9e2b",
"jws": "eyJhbGciOiJFUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..example_signature_value"
}
}
Error Responses:
| HTTP Status | Condition |
|---|---|
| 404 Not Found | Requested DID not found in Trust Anchor registry |
| 401 Unauthorized | Request not authenticated |
| 403 Forbidden | Requester not authorized to retrieve trust material |
Response Elements:
The response SHALL include one or more DID Documents, each containing:
| Element | Cardinality | Description |
|---|---|---|
| @context | [1..*] | JSON-LD context |
| id | [1..1] | The DID identifier |
| verificationMethod | [1..*] | Public key material for verification |
| authentication | [0..*] | Methods used for authentication |
| assertionMethod | [0..*] | Methods used for signing/assertions |
| service | [0..*] | Service endpoints |
| proof | [1..1] | Cryptographic proof over the trust list document as defined in W3C VC Data Model 2.0. The proof SHALL include a nonce to prevent replay attacks. |
The proof element SHALL contain:
| Sub-element | Cardinality | Description |
|---|---|---|
| type | [1..1] | Proof type (e.g., JsonWebSignature2020) |
| created | [1..1] | ISO 8601 datetime the proof was created |
| verificationMethod | [1..1] | Reference to the key used to create the proof |
| proofPurpose | [1..1] | Purpose of the proof (e.g., assertionMethod) |
| nonce | [1..1] | Unique value to prevent replay attacks; SHALL be included by the Trust Anchor |
| jws | [1..1] | The detached JSON Web Signature value |
Upon receiving a Retrieve Trust List Request, the Trust Anchor SHALL:
VHL Receiver / VHL Sharer:
A VHL Sharer or VHL Receiver, after receiving PKI material from a Trust Anchor, SHALL validate and process the trust information for subsequent cryptographic operations.
Participants SHOULD:
Upon receiving the Trust List response, the VHL Receiver or VHL Sharer SHALL:
All Retrieve Trust List interactions MUST occur over a secure connection. The Trust Anchor SHOULD authenticate requesting entities before serving trust material.
Clients (VHL Receivers and VHL Sharers) SHALL:
Implementations SHOULD:
The Trust Anchor SHALL:
Clients SHOULD:
The Trust Anchor's DID retrieval endpoint SHOULD:
Content profiles MAY define additional constraints, such as: