Securing Verifiable Credentials using JOSE and COSE

W3C Working Draft

More details about this document
This version:
https://www.w3.org/TR/2023/WD-vc-jose-cose-20231006/
Latest published version:
https://www.w3.org/TR/vc-jose-cose/
Latest editor's draft:
https://w3c.github.io/vc-jose-cose/
History:
https://www.w3.org/standards/history/vc-jose-cose/
Commit history
Editors:
Orie Steele (Transmute)
Michael Jones (independent)
Michael Prorock (Mesur.io)
Feedback:
GitHub w3c/vc-jose-cose (pull requests, new issue, open issues)
Related Documents
VC Data Model
DID Core

Abstract

This specification defines how to secure credentials and presentations conforming to the [VC-DATA-MODEL], with JSON Object Signing and Encryption (JOSE), and CBOR Object Signing and Encryption (COSE) [RFC9052]. This enables the Verifiable Credential data model [VC-DATA-MODEL]to be implemented with standards for signing and encryption that are widely adopted.

Status of This Document

This section describes the status of this document at the time of its publication. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at https://www.w3.org/TR/.

This document was published by the Verifiable Credentials Working Group as a Working Draft using the Recommendation track.

Publication as a Working Draft does not imply endorsement by W3C and its Members.

This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

This document was produced by a group operating under the W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

This document is governed by the 12 June 2023 W3C Process Document.

1. Introduction

This specification describes how to secure media types expressing Verifiable Credentials and Verifiable Presentations as described in the [VC-DATA-MODEL], using approaches described by the OAuth, JOSE, and COSE working groups at IETF. This includes SD-JWT [SD-JWT] and COSE [RFC9052], and provides an approach using well-defined content types [RFC6838] and structured suffixes [MULTIPLE-SUFFIXES] to distinguish the data types of unsecured documents conforming to [VC-DATA-MODEL] from the data types of secured documents conforming to [VC-DATA-MODEL], defined in this specification.

Selective Disclosure for JWTs (SD-JWT) [SD-JWT] provides a standardized mechanism for digitally signing JSON documents. It provides a means to ensure the integrity, authenticity, selective disclosure and non-repudiation of the information contained in a JSON document. These properties make SD-JWT especially well suited to securing documents conforming to the JSON-LD [VC-DATA-MODEL].

Issue

The working group is discussing how we might comment on recent work, that does make use of encryption in OpenID for Verifiable Presentations.

CBOR Object Signing and Encryption (COSE) [RFC9052] is a specification that defines a framework for representing signed and encrypted data using (Concise Binary Object Representation) [RFC8949] data structures. COSE provides a standardized way to secure the integrity, authenticity, and confidentiality of CBOR-encoded information. It offers a flexible and extensible set of cryptographic options, allowing for a wide range of algorithms to be used for signing and encryption. COSE supports two main operations: signing and encryption. For signing, COSE allows the creation of digital signatures over CBOR data using various algorithms such as HMAC, RSA, ECDSA, or EdDSA. These signatures provide assurance of data integrity and authenticity. COSE also supports encryption, enabling the confidentiality of CBOR data by encrypting it with symmetric or asymmetric encryption algorithms.

2. Terminology

This section is non-normative.

This section defines the terms used in this specification. A link to these terms is included whenever they appear in this specification.

public key
Cryptographic material that can be used to verify digital proofs created with a corresponding private key.
private key
Cryptographic material that can be used to generate digital proofs.
authentication
A process by which an entity can prove to a verifier that it has a specific attribute or controls a specific secret.
decentralized identifier (DID)
A globally unique persistent identifier that does not require a centralized registration authority and is often generated and/or registered cryptographically. The generic format of a is defined in [DID-CORE]. Many—but not all—methods make use of distributed ledger technology (DLT) or some other form of decentralized network.
controller
An entity that has the capability to make changes to a controller document.
controller document
A set of data that specifies one or more relationships between a controller and a set of data, such as a set of public cryptographic keys.
subject
The entity identified by the id property in a controller document. Anything can be a subject: person, group, organization, physical thing, digital thing, logical thing, etc.
distributed ledger (DLT)
A non-centralized system for recording events. These systems establish sufficient confidence for participants to rely upon the data recorded by others to make operational decisions. They typically use distributed databases where different nodes use a consensus protocol to confirm the ordering of cryptographically signed transactions. The linking of digitally signed transactions over time often makes the history of the ledger effectively immutable.
resource
As defined by [RFC3986]: "...the term 'resource' is used in a general sense for whatever might be identified by a URI." Similarly, any resource might serve as a subject identified by a DID.
verifiable credential
A standard data model and representation format for expressing cryptographically-verifiable digital credentials, as defined by the W3C Verifiable Credentials specification [VC-DATA-MODEL-2.0].
verification method

A set of parameters that can be used together with a process to independently verify a proof. For example, a cryptographic public key can be used as a verification method with respect to a digital signature; in such usage, it verifies that the signer possessed the associated cryptographic private key.

"Verification" and "proof" in this definition are intended to apply broadly. For example, a cryptographic public key might be used during Diffie-Hellman key exchange to negotiate a shared symmetric key for encryption. This guarantees the integrity of the key agreement process. It is thus another type of verification method, even though descriptions of the process might not use the words "verification" or "proof."

verification relationship

An expression of the relationship between the subject and a verification method. An example of a verification relationship is authentication.

3. Securing the VC Data Model

This section outlines how to secure documents conforming to the [VC-DATA-MODEL] using JOSE and COSE.

Documents conforming to the [VC-DATA-MODEL], and their associated media types, rely on JSON-LD, which is a flexible and extensible format for describing linked data, see JSON-LD Relationship to RDF.

A benefit to this approach is that payloads can be made to conform directly to the [VC-DATA-MODEL] without any mappings or transformation, while at the same time supporting registered claims that are understood in the context of JOSE and COSE.

It is RECOMMENDED that media types be used to distinguish verifiable credentials and verifiable presentations from other kinds of secured JSON or CBOR.

The most specific media type (or subtype) available SHOULD be used, instead of more generic media types (or supertypes). For example, rather than the general application/sd-jwt, application/vc+ld+json+sd-jwt ought to be used, unless there is a more specific media type that would even better identify the secured envelope format.

If implementations do not know which media type to use, media types defined in this specification MUST be used.

3.1 With JOSE

3.1.1 Securing JSON-LD Verifiable Credentials with JOSE

This section details how to use JOSE to secure verifiable credentials conforming to the [VC-DATA-MODEL].

[rfc7515] MAY be used to secure this media type.

The typ parameter SHOULD be vc+ld+json+sd-jwt

When present, the cty SHOULD be vc+ld+json

See Common JOSE Header Parameters for additional details regarding usage of typ and cty.

Example 1: Example Credential
{
  "@context": ["https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "http://example.edu/credentials/3732",
  "type": ["VerifiableCredential",
    "UniversityDegreeCredential"
  ],
  "issuer": "https://example.edu/issuers/14",
  "issuanceDate": "2010-01-01T19:23:24Z",
  "credentialSubject": {
    "id": "did:example:123",
    "degree": {
      "type": "BachelorDegree",
      "name": "Bachelor of Science and Arts"
    },
   "credentialSchema": {
     "id": "https://example.org/examples/degree.json",
     "type": "JsonSchema"
    }
  }
}
graph LR 0("VerifiableCredential") 1{{"id"}} 2("http://example.edu/credentials/3732") 3(("type")) 4("UniversityDegreeCredential") 5("issuer") 6("https://example.edu/issuers/14") 7("issuanceDate") 8("2010-01-01T19:23:24Z") 9("credentialSubject") 10{{"id"}} 11("did:example:123") 12("degree") 13(("type")) 14("BachelorDegree") 15("name") 16("Bachelor of Science and Arts") 17("credentialSchema") 18{{"id"}} 19("https://example.org/examples/degree.json") 20(("type")) 21("JsonSchema") 0 --- 1 1 --- 2 0 --- 3 3 --- 4 0 --- 5 5 --- 6 0 --- 7 7 --- 8 0 --- 9 9 --- 10 10 --- 11 9 --- 12 12 --- 13 13 --- 14 12 --- 15 15 --- 16 9 --- 17 17 --- 18 18 --- 19 17 --- 20 20 --- 21
---------------- Issuer Claims ----------------
"@context":
  - https://www.w3.org/ns/credentials/v2
  - https://www.w3.org/ns/credentials/examples/v2
!sd id: http://example.edu/credentials/3732
!sd type:
  - VerifiableCredential
  - UniversityDegreeCredential
issuer: https://example.edu/issuers/14
issuanceDate: 2010-01-01T19:23:24Z
credentialSubject:
  !sd id: did:example:123
  degree:
    !sd type: BachelorDegree
    name: Bachelor of Science and Arts
  credentialSchema:
    !sd id: https://example.org/examples/degree.json
    !sd type: JsonSchema
---------------- Holder Disclosure ----------------
issuer:
  id: True
credentialStatus:
  id: True
credentialSubject:
  id: True
  type: False
---------------- Decoded Protected Header ----------------
{
  "alg": "ES384"
}
---------------- Decoded Protected Claimset ----------------
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "issuer": "https://example.edu/issuers/14",
  "issuanceDate": "2010-01-01T19:23:24Z",
  "credentialSubject": {
    "degree": {
      "name": "Bachelor of Science and Arts"
    },
    "credentialSchema": {},
    "id": "did:example:123"
  },
  "iss": "did:web:issuer.example",
  "iat": 1696618914,
  "exp": 1728241314,
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-384",
      "alg": "ES384",
      "x": "8RYPqIaJd9ZDtXTfMk0J7tYVR1e-PyEJ5GAz1h26Lp6SGHvLB3jRBYh_MQvOqrTN",
      "y": "n1VuAD_qForBS8fUnHatE0p9cBveJqPeVlh9guJkMnvN0PivqTlTzrbK2C06QtZT"
    }
  }
}
---------------- Compact Encoded Selective Disclosure JSON Web Token ----------------
eyJhbGciOiJFUzM4NCJ9.eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvZXhhbXBsZXMvdjIiXSwiaXNzdWVyIjoiaHR0cHM6Ly9leGFtcGxlLmVkdS9pc3N1ZXJzLzE0IiwiaXNzdWFuY2VEYXRlIjoiMjAxMC0wMS0wMVQxOToyMzoyNFoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJkZWdyZWUiOnsibmFtZSI6IkJhY2hlbG9yIG9mIFNjaWVuY2UgYW5kIEFydHMiLCJfc2QiOlsid3haRHJFVkViVTB5Q080VU1sZFNabXJIZkd3UEhjYkxWNWIyS1BvUFlSOCJdfSwiY3JlZGVudGlhbFNjaGVtYSI6eyJfc2QiOlsiQnY1djc3WWhaZ1ZydlZvcmZwa296WkpxdTh4bXk1eGRsaEZYMUF6NmJGcyIsIllwNzMxVnNxZWJuZWhVNTFZbk5hc2NXVDB2RDFYcE5UdklacmxxNzFCdTAiXX0sIl9zZCI6WyJ3WGdNTm1Bc2JQMW54MFQ4MXFmRnExQzAtb3BDNXRtNDlZc0xTR2tiMXJZIl19LCJfc2QiOlsiTXRiYXJsWko2QVJPNlFVTk51aXZMUEhhMFctQzlEQXowS29sZERCcnpDWSIsIlFHaDltZGtfNTBWWGlndEk0UU1iYjNJd19lYkhsejNZQWM5QnNBejBkN0UiXSwiX3NkX2FsZyI6InNoYS0yNTYiLCJpc3MiOiJkaWQ6d2ViOmlzc3Vlci5leGFtcGxlIiwiaWF0IjoxNjk2NjE4OTE0LCJleHAiOjE3MjgyNDEzMTQsImNuZiI6eyJqd2siOnsia3R5IjoiRUMiLCJjcnYiOiJQLTM4NCIsImFsZyI6IkVTMzg0IiwieCI6IjhSWVBxSWFKZDlaRHRYVGZNazBKN3RZVlIxZS1QeUVKNUdBejFoMjZMcDZTR0h2TEIzalJCWWhfTVF2T3FyVE4iLCJ5IjoibjFWdUFEX3FGb3JCUzhmVW5IYXRFMHA5Y0J2ZUpxUGVWbGg5Z3VKa01udk4wUGl2cVRsVHpyYksyQzA2UXRaVCJ9fX0.XlOjB32FCOwEe-fUeenqsqBM7nAY7aqBzIwx8dSOWYD425VRhKaCNYhksluk3tP2LV9IoIQWBw4BUcq0-OlWISh3TzWAHc_snT76N92gvi73FzqHwg8D8RfQu5vuXGmF~WyIxeWdmRmsxUDhOaUY4LUxRYy1fR0pRIiwgImlkIiwgImRpZDpleGFtcGxlOjEyMyJd~eyJhbGciOiJFUzM4NCIsInR5cCI6ImtiK2p3dCJ9.eyJub25jZSI6IlZCNHhidTltSnpsQWhsUnhRWDdlM2ciLCJhdWQiOiJkaWQ6d2ViOnZlcmlmaWVyLmV4YW1wbGUiLCJpYXQiOjE2OTY2MTg5MTR9.pp4ztbzPreyiD9vSQPZG6_cTt-O6XtZxfU6c2I0bN6g9uhAx8vsReCdMLFH3-h9vB4LT255vkH20bFlGucZZv8mmAIhnw5bA_llieAYZLeANiAd8Cl01-2qUEn-DnLIb

3.1.2 Securing JSON-LD Verifiable Presentations with JOSE

This section details how to use JOSE to secure verifiable presentations conforming to the [VC-DATA-MODEL].

[rfc7515] MAY be used to secure this media type.

The typ parameter SHOULD be vp+ld+json+sd-jwt

When present, the cty parameter SHOULD be vp+ld+json

See Common JOSE Header Parameters for additional details regarding usage of typ and cty.

Example 2: The minimal unsecured verifiable presentation
{
  "@context": ["https://www.w3.org/ns/credentials/v2"],
  "type": ["VerifiablePresentation"]
}
graph LR 74("VerifiablePresentation")
+sd-jwt does not support algorithm none.
Example 3: The minimal secured verifiable presentation
{
  "@context": ["https://www.w3.org/ns/credentials/v2"],
  "type": ["VerifiablePresentation"]
}
graph LR 75("VerifiablePresentation")
---------------- Issuer Claims ----------------
"@context":
  - https://www.w3.org/ns/credentials/v2
!sd type:
  - VerifiablePresentation
---------------- Holder Disclosure ----------------
id: True
type: True
holder:
  id: True
---------------- Decoded Protected Header ----------------
{
  "alg": "ES384"
}
---------------- Decoded Protected Claimset ----------------
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2"
  ],
  "iss": "did:web:issuer.example",
  "iat": 1696618914,
  "exp": 1728241314,
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-384",
      "alg": "ES384",
      "x": "E576iTV1msVsSzMOjjRp4lOfnYwKHVxC5H0c930Hmwg_55yhMc6BfH6boW_UnA8b",
      "y": "4G6hxbZ5Hv9gjreAlrnKXO0QFTLLCOs9M7pnT-Zjux4GU269LoQkV5cCNkBmpoDU"
    }
  },
  "type": [
    "VerifiablePresentation"
  ]
}
---------------- Compact Encoded Selective Disclosure JSON Web Token ----------------
eyJhbGciOiJFUzM4NCJ9.eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiXSwiX3NkIjpbIkhuVEVaUEwzaVo0WXcyWjk2VlpZUGxkNzVISDFNSlRqWUxhTlNGeWpwbXciXSwiX3NkX2FsZyI6InNoYS0yNTYiLCJpc3MiOiJkaWQ6d2ViOmlzc3Vlci5leGFtcGxlIiwiaWF0IjoxNjk2NjE4OTE0LCJleHAiOjE3MjgyNDEzMTQsImNuZiI6eyJqd2siOnsia3R5IjoiRUMiLCJjcnYiOiJQLTM4NCIsImFsZyI6IkVTMzg0IiwieCI6IkU1NzZpVFYxbXNWc1N6TU9qalJwNGxPZm5Zd0tIVnhDNUgwYzkzMEhtd2dfNTV5aE1jNkJmSDZib1dfVW5BOGIiLCJ5IjoiNEc2aHhiWjVIdjlnanJlQWxybktYTzBRRlRMTENPczlNN3BuVC1aanV4NEdVMjY5TG9Ra1Y1Y0NOa0JtcG9EVSJ9fX0.ADsxBN3Jb9rzJblxo2VtPDifxNYxtDUT5h-x_cpbPQKGMMih0oef5XxfURoJCoqcxeirhtCNQkJIgNPAjiTftcHaAW6tfH5R9AJm3Gh46Yu2C30OlOCRlRXhcvmruIrM~WyJwNTB1VHlRQlBpQVBZcUpvOU1GaHRRIiwgInR5cGUiLCBbIlZlcmlmaWFibGVQcmVzZW50YXRpb24iXV0~eyJhbGciOiJFUzM4NCIsInR5cCI6ImtiK2p3dCJ9.eyJub25jZSI6Ik10NHRlQTRCNzB1Mmd3d3AxcEI1RGciLCJhdWQiOiJkaWQ6d2ViOnZlcmlmaWVyLmV4YW1wbGUiLCJpYXQiOjE2OTY2MTg5MTR9.fwzxlrBwESkSeffRt4SjREwqGnmTE9Pf9_0-Uj7Xrf5wDXIhLurp_PFg3rO6qj2pJMPUAXaXgZtWubsaoiZRnL975YXbg7nkS1F1FwdYXzTJfIWIIx3T8JrKE6Ivy81V
Example 4: A secured verifiable presentation with a holder identifier
{
  "@context": ["https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "type": ["VerifiablePresentation"],
  "holder": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs"
}
graph LR 76("VerifiablePresentation") 77("holder") 78("urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs") 76 --- 77 77 --- 78
---------------- Issuer Claims ----------------
"@context":
  - https://www.w3.org/ns/credentials/v2
  - https://www.w3.org/ns/credentials/examples/v2
!sd type:
  - VerifiablePresentation
holder: urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs
---------------- Holder Disclosure ----------------
id: True
type: True
holder:
  id: True
---------------- Decoded Protected Header ----------------
{
  "alg": "ES384"
}
---------------- Decoded Protected Claimset ----------------
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "holder": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs",
  "iss": "did:web:issuer.example",
  "iat": 1696618914,
  "exp": 1728241314,
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-384",
      "alg": "ES384",
      "x": "azF5o6iW_uWDqBC2Fx6WE4TcXuJ8QzO75pKldlH-RoB_6Hmxmuhcni9CUONW9oJf",
      "y": "7yoXBMG3wik5X54BEFqPcm0YCKhYtHfTFkiETLUPmsaxBHm4zJrdjZZ1mBa7PWzf"
    }
  },
  "type": [
    "VerifiablePresentation"
  ]
}
---------------- Compact Encoded Selective Disclosure JSON Web Token ----------------
eyJhbGciOiJFUzM4NCJ9.eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvZXhhbXBsZXMvdjIiXSwiaG9sZGVyIjoidXJuOmlldGY6cGFyYW1zOm9hdXRoOmp3ay10aHVtYnByaW50OnNoYS0yNTY6TnpiTHNYaDh1RENjZC02TU53WEY0V183bm9XWEZaQWZIa3hac1JHQzlYcyIsIl9zZCI6WyJ3R1VvblZZd1NINXRTRnJHZkk5b1p2VUo2R0x3UnpxVHpoTXVMQVZOQ3BFIl0sIl9zZF9hbGciOiJzaGEtMjU2IiwiaXNzIjoiZGlkOndlYjppc3N1ZXIuZXhhbXBsZSIsImlhdCI6MTY5NjYxODkxNCwiZXhwIjoxNzI4MjQxMzE0LCJjbmYiOnsiandrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0zODQiLCJhbGciOiJFUzM4NCIsIngiOiJhekY1bzZpV191V0RxQkMyRng2V0U0VGNYdUo4UXpPNzVwS2xkbEgtUm9CXzZIbXhtdWhjbmk5Q1VPTlc5b0pmIiwieSI6Ijd5b1hCTUczd2lrNVg1NEJFRnFQY20wWUNLaFl0SGZURmtpRVRMVVBtc2F4QkhtNHpKcmRqWloxbUJhN1BXemYifX19.yTSF5kwUjC-Bwl5S7HbPuzlcqpBzmpWvvDhzkvOI1OQV--W2tdQw5UJzSDejbADWeagPp6UuFlEJHzACYGE9G1aonHF6uTjic8H2Ol31bAfptJrs0gqHgfCWwEPjGPYx~WyJobnc4bWRJeU5yb1UyVzdTR3NNdzlBIiwgInR5cGUiLCBbIlZlcmlmaWFibGVQcmVzZW50YXRpb24iXV0~eyJhbGciOiJFUzM4NCIsInR5cCI6ImtiK2p3dCJ9.eyJub25jZSI6Ik96a0VGOGw5MlhqZUtNMlN4V0pnV3ciLCJhdWQiOiJkaWQ6d2ViOnZlcmlmaWVyLmV4YW1wbGUiLCJpYXQiOjE2OTY2MTg5MTR9.NnEx1-owwQVdTPHaa4dBn3bHA_lRCjiqRlxC2ilfHg-dYdM_x-njKbTestQiMa6ks-tHIO9uhvdx4c2bW3Evo0JgwWRS_mVaQz4Qqv5LF85HH5np-rKVs83G7HGwri2u
Example 5: A secured verifiable presentation with a holder graph node
{
  "@context": ["https://www.w3.org/ns/credentials/v2"],
  "type": ["VerifiablePresentation"],
  "holder": {
    "id": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs",
    "type": "Organization",
    "name": "Contoso"
  }
}
graph LR 79("VerifiablePresentation") 80("holder") 81{{"id"}} 82("urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs") 83(("type")) 84("Organization") 85("name") 86("Contoso") 79 --- 80 80 --- 81 81 --- 82 80 --- 83 83 --- 84 80 --- 85 85 --- 86
---------------- Issuer Claims ----------------
"@context":
  - https://www.w3.org/ns/credentials/v2
!sd type:
  - VerifiablePresentation
holder:
  !sd id: urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs
  !sd type: Organization
  name: Contoso
---------------- Holder Disclosure ----------------
id: True
type: True
holder:
  id: True
---------------- Decoded Protected Header ----------------
{
  "alg": "ES384"
}
---------------- Decoded Protected Claimset ----------------
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2"
  ],
  "holder": {
    "name": "Contoso",
    "id": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs"
  },
  "iss": "did:web:issuer.example",
  "iat": 1696618914,
  "exp": 1728241314,
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-384",
      "alg": "ES384",
      "x": "SvwZ-VZs-nh3_0M1CylLX0-IriKXPtY7L4Im6T1MqzHOzR7T6hd0ludxRH1BEYV4",
      "y": "prIGfaWC87tjY8g1NdXATScD2-F_rVIiSn5Vo8rPpJBUVFsvVqMHsBImYl9NlK-U"
    }
  },
  "type": [
    "VerifiablePresentation"
  ]
}
---------------- Compact Encoded Selective Disclosure JSON Web Token ----------------
eyJhbGciOiJFUzM4NCJ9.eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiXSwiaG9sZGVyIjp7Im5hbWUiOiJDb250b3NvIiwiX3NkIjpbImRzMmlaS0tqOE54eXdTRW5kNDNFUlUzc0NkZktqVm5PWUhVbzVvN3Zoam8iLCJnaVc1VFd5a1UtUERMR0JMbmxkYzhnaWRqQkxxejdFcnZQZ09kVnk4NGRrIl19LCJfc2QiOlsiT1pRdVdlMkhkTGo4VGJMTWxkN084V0RwSnY5MWtNM2hLS3dnUktuLU55RSJdLCJfc2RfYWxnIjoic2hhLTI1NiIsImlzcyI6ImRpZDp3ZWI6aXNzdWVyLmV4YW1wbGUiLCJpYXQiOjE2OTY2MTg5MTQsImV4cCI6MTcyODI0MTMxNCwiY25mIjp7Imp3ayI6eyJrdHkiOiJFQyIsImNydiI6IlAtMzg0IiwiYWxnIjoiRVMzODQiLCJ4IjoiU3Z3Wi1WWnMtbmgzXzBNMUN5bExYMC1JcmlLWFB0WTdMNEltNlQxTXF6SE96UjdUNmhkMGx1ZHhSSDFCRVlWNCIsInkiOiJwcklHZmFXQzg3dGpZOGcxTmRYQVRTY0QyLUZfclZJaVNuNVZvOHJQcEpCVVZGc3ZWcU1Ic0JJbVlsOU5sSy1VIn19fQ.hx_taCljRse9AV4spH5nrUvqnus95RyWb1Xi6gEUisqMT4ex5zEt5UnsM2C06BzSSho2K-jLR5VY972eYX0tadaBMpglWpRS_6tD7uYQcO6DncxW-mi3zENtnMu5LGKi~WyJSRjJramcwTVJiY3pPbG5rSy1rVmVBIiwgImlkIiwgInVybjppZXRmOnBhcmFtczpvYXV0aDpqd2stdGh1bWJwcmludDpzaGEtMjU2Ok56YkxzWGg4dURDY2QtNk1Od1hGNFdfN25vV1hGWkFmSGt4WnNSR0M5WHMiXQ~WyJ5aFRKVV91NWltTjUyY0ZHS0xqTHlBIiwgInR5cGUiLCBbIlZlcmlmaWFibGVQcmVzZW50YXRpb24iXV0~eyJhbGciOiJFUzM4NCIsInR5cCI6ImtiK2p3dCJ9.eyJub25jZSI6IkY0dFZxYnF6ODQwSEdBNmFMTkR2M2ciLCJhdWQiOiJkaWQ6d2ViOnZlcmlmaWVyLmV4YW1wbGUiLCJpYXQiOjE2OTY2MTg5MTR9.X6Kx_8-oHf5l0A0Ny6SY2eU_NMskhKu-r65ezWpx0xduSn4qavB_X2myLevdB9CgMYEJM2FN2eBwnKlB7EkCjegxr46tENILG88MhUhAmuz5Yt79l8ButETfEoeHrwYX

3.2 With COSE

COSE [rfc9052] is a common approach to encoding and securing information using CBOR [rfc8949]. Verifiable credentials MAY be secured using COSE [rfc9052] and SHOULD be identified through use of content types as outlined in this section.

3.2.1 Securing JSON-LD VCs with COSE

This section details how to secure data with the type application/vc+ld+json with COSE.

[rfc9052] MAY be used to secure this media type.

When using this approach, the typ SHOULD be vc+ld+json+cose. See I-D.ietf-cose-typ-header-parameter for the COSE "typ" (type) header parameter.

When using this approach, the content type (3) SHOULD be application/vc+ld+json.

See Common COSE Header Parameters for additional details.

See the IANA Concise Binary Object Representation (CBOR) Tags registry for additional details.

4. Wallets

This section is non-normative.

Issuers, holders and verifiers might rely on clients, as defined in RFC4949. Such clients are often referred to as wallets or digital credential wallets, when they support storing and presenting digital credentials.

In order to meet verifier requirements, some issuers might need to assess the quality of a wallet used by a holder, prior to issuing and delivering credentials to a holder.

For example, some verifiers might require that cryptographic material associated with a holder, be protected at specific assurance levels. (See NIST 800-63-3: Authenticator Assurance Levels.)

Note

Also see OAuth 2.0 Attestation-Based Client Authentication .

5. Key Discovery

Issue

The working group is still discussing how to close many related issues.

Issue 117: how is `kid` to be `useful to distinguish the specific key used`? has-prbefore-CR

Originally posted by @TallTed in #111 (comment)

line 377 says (and another line says the same) --

If <code>kid</code> is also present, it is expected to be useful to distinguish the specific key used.

-- in response to which I ask --

how is kid to be useful to distinguish the specific key used? This cries out for an example, or a fair amount of additional prose.

Issue 106: Explain relationship between controller documents and JOSE headers has-prbefore-CR
          Just read that section, and I have to say that it's not intuitive at all. I think it would be worth either: adding an example that refers to this controller document, pointing to the spec you mentioned, or explicitly stating the relationship between controller docs and  `iss` & `kid`.

Originally posted by @andresuribe87 in #104 (comment)

Issue 31: About the optionality of the "kid" field in JWT-formatted VCs/VPs has-prbefore-CR

https://www.w3.org/TR/vc-data-model/#jwt-encoding shows:

kid MAY be used if there are multiple keys associated with the issuer of the JWT. The key discovery is out of the scope of this specification. For example, the kid can refer to a key in a DID document, or can be the identifier of a key inside a JWKS.

I'd like some clarification on the optionality of the "kid" field. My guess is that VCs/VPs are trying to be generic regarding issuers/holders, allowing for URIs, which precludes the possibility of giving any more details about how the "kid" field should be used. Is that right?

I'm coming from a DID-centric ecosystem, and in that scenario it seems that there's no reason not to set the "kid" field on a JWT-formatted VC/VP to the DID fragment URL of the specific key used to sign. From w3c/vc-data-model#914 I understand that it would still be necessary to tie the "kid" to the "iss" field, but that seems fine.

As far as I can tell, if the "kid" field is missing, and assuming we're working with DIDs here, the process to resolve the signing key has to be:

To me, this seems sloppy, involving unnecessary complexity and computation, and making detecting errors in implementations harder. It also wouldn't scale if for whatever reason a DID had very many keys (inefficient at best, possible DoS at worst). Maybe I'm missing something here. Can anyone comment on this? Thanks.

Issue 30: Accept or Dismiss the guidance provided by DIF on `kid` / `iss` discusshas-prbefore-CR

See https://github.com/decentralized-identity/did-jose-extensions/blob/master/options.md

^ this guidance is ancient, I believe we can do better.

cc @tplooker @selfissued @Sakurann @dwaite

Issue 15: Describe why core data model members are translated to JWT claims pending-close

Can we add an explanation why do these members need to be translated to the equivalents of the JWT claims?
iss, nbf, all of them are optional in RFC 7519 itself. They only become required when the JWT is used for a specific purpose, and the only place I can think of right now is an ID Token.

See: #11 (comment)

In order to complete the verification process, a verifier needs to obtain the cryptographic keys used to secure the credential.

There are several different ways to discover the verification keys of the issuers and holders.

5.1 Registered Header Parameter and Claim Names

When present in the JOSE Header or the JWT Claims Set members registered in the IANA JSON Web Token Claims registry or the IANA JSON Web Signature and Encryption Header Parameters registry are to be interpreted as defined by the specifications referenced in the registries.

These parameters and claims can be used to help verifiers discover verification keys.

5.1.1 kid

If kid is present in the JOSE Header, a verifier can use this parameter as a hint indicating which key was used to secure the verifiable credential, when performing a verification process as defined in RFC7515.

kid MUST be present when the key of the issuer or subject is expressed as a DID URL.

5.1.2 iss

If iss is present in the JOSE Header or the JWT Claims , a verifier can use this parameter to obtain a JSON Web Key to use in the verification process.

The value of the issuer property can be either a string or an object. When issuer value is a string, iss value, if present, MUST match issuer value. When issuer value is an object with an id value, iss value, if present, MUST match issuer.id value.

If kid is also present in the JOSE Header, it is expected to be useful to distinguish the specific key used.

Issue 31: About the optionality of the "kid" field in JWT-formatted VCs/VPs has-prbefore-CR

There are a few issues related to clarification of optionality and behavior of registered claims.

5.1.3 cnf

If cnf is present in the JOSE Header or the JWT Claims , a verifier MAY use this parameter to identify a proof-of-possesion key in the manner described in [rfc7800] for use in the verification process.

5.2 Well Known URIs

Issue

The working group is currently exploring how Defining Well-Known Uniform Resource Identifiers (URIs) could be leveraged to assist a verifier in discovering verification keys for issuers and holders.

5.2.1 JWT Issuer

When the issuer value is a URL using the HTTPS scheme, issuer metadata including the issuer's public keys can be retrieved using the mechanism defined in SD-JWT-based Verifiable Credentials (SD-JWT VC).

5.3 Controller Documents

This section is non-normative.

Issue 160: Controller Documents vs DID Documents

The Working Group is currently attempting to determine the best path forward to ensure alignment between data integrity controller documents, vc-jose-cose controller documents, and did documents. The working group is still discussing how to align these definitions.

A few of the options that are currently being explored include:

  1. Define controller documents in the Verifiable Credentials Data Model v2.0 specification and refer to that definition from vc-data-integrity and vc-jose-cose.
  2. Define controller documents in a new TR track work item published by the VCWG and then narrow/profile that definition in vc-data-integrity and vc-jose-cose.
  3. Duplicate controller document text in vc-data-integrity and vc-jose-cose.
  4. Refer to DID Core for the definition of controller documents (not an option because URLs are not DIDs)

A controller document is a set of data that specifies one or more relationships between a controller and a set of data, such as a set of public cryptographic keys. The controller document SHOULD contain verification relationships that explicitly permit the use of certain verification methods for specific purposes.

5.3.1 Verification Methods

A controller document can express verification methods, such as cryptographic public keys, which can be used to authenticate or authorize interactions with the controller or associated parties. For example, a cryptographic public key can be used as a verification method with respect to a digital signature; in such usage, it verifies that the signer could use the associated cryptographic private key. Verification methods might take many parameters. An example of this is a set of five cryptographic keys from which any three are required to contribute to a cryptographic threshold signature.

verificationMethod

The verificationMethod property is OPTIONAL. If present, its value MUST be a set of verification methods, where each verification method is expressed using a map. The verification method map MUST include the id, type, controller, and specific verification material properties that are determined by the value of type and are defined in Verification Material. A verification method MAY include additional properties.

id

The value of the id property for a verification method MUST be a string that conforms to the [URL] syntax.

type
The value of the type property MUST be a string that references exactly one verification method type. To maximize interoperability, the verification method type SHOULD be JsonWebKey.
controller
The value of the controller property MUST be a string that conforms to the [URL] syntax.
revoked
The revoked property is OPTIONAL. If present, its value MUST be an [XMLSCHEMA11-2] combined date and time string specifying when the verification method SHOULD cease to be used. Once the value is set, it is not expected to be updated, and systems depending on the value are expected to not verify any proofs associated with the verification method at or after the time of revocation.
Example 6: Example verification method structure
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://www.w3.org/ns/credentials/v2"
  ]
  "id": "did:example:123456789abcdefghi",
  ...
  "verificationMethod": [{
    "id": ...,
    "type": ...,
    "controller": ...,
    "publicKeyJwk": ...
  }]
}
Note: Verification method controller(s) and controller(s)

The semantics of the controller property are the same when the subject of the relationship is the controller document as when the subject of the relationship is a verification method, such as a cryptographic public key. Since a key can't control itself, and the key controller cannot be inferred from the controller document, it is necessary to explicitly express the identity of the controller of the key. The difference is that the value of controller for a verification method is not necessarily a controller. Controllers are expressed using the `controller` property at the highest level of the controller document.

Verification Material

Verification material SHOULD be expressed in the publicKeyJwk property of a JsonWebKey. This key material is retrieved based on hints in the JOSE or COSE message envelopes, such as kid or iss. At the time of writing, there is no standard way to retrieve a public key in JWK or COSE key from a DID URL or controller document.

A verification method MUST NOT contain multiple verification material properties for the same material. For example, expressing key material in a verification method using both publicKeyJwk and publicKeyMultibase at the same time is prohibited.

An example of a controller document containing verification methods using both properties above is shown below.

Example 7: Verification methods using publicKeyJwk
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://www.w3.org/ns/credentials/v2"
  ]
  "id": "did:example:123456789abcdefghi",
  ...
  "verificationMethod": [{
    "id": "did:example:123#_Qq0UL2Fq651Q0Fjd6TvnYE-faHiOpRlPVQcY_-tA4A",
    "type": "JsonWebKey", // external (property value)
    "controller": "did:example:123",
    "publicKeyJwk": {
      "crv": "Ed25519", // external (property name)
      "x": "VCpo2LMLhn6iWku8MKvSLg2ZAoC-nlOyPVQaO3FxVeQ", // external (property name)
      "kty": "OKP", // external (property name)
      "kid": "_Qq0UL2Fq651Q0Fjd6TvnYE-faHiOpRlPVQcY_-tA4A" // external (property name)
    }
  }],
  ...
}
JsonWebKey

The JSON Web Key (JWK) data model is a specific type of verification method that uses the JWK specification [RFC7517] to encode key types into a set of parameters.

When specifing a JsonWebKey, the object takes the following form:

type
The value of the type property MUST contain the string JsonWebKey.
publicKeyJwk
The publicKeyJwk property is REQUIRED, and its value MUST be a JSON Web Key that conforms to [RFC7517]. It is RECOMMENDED that verification methods that use JWKs [RFC7517] to represent their public keys use the value of kid as their fragment identifier. It is RECOMMENDED that JWK kid values be set to the public key fingerprint [RFC7638]. See the first key in Example 7 for an example of a public key with a compound key identifier.
secretKeyJwk
The secretKeyJwk property is OPTIONAL. If present, its value MUST be a map representing a JSON Web Key that conforms to [RFC7517].

An example of an object that conforms to this data model is provided below:

Example 8: JSON Web Key encoding of an secp384r1 (P-384) public key
{
  "id": "did:example:123456789abcdefghi#key-1",
  "type": "JsonWebKey",
  "controller": "did:example:123456789abcdefghi",
  "publicKeyJwk": {
      "kid": "key-1",
      "kty": "EC",
      "crv": "P-384",
      "alg": "ES384",
      "x": "1F14JSzKbwxO-Heqew5HzEt-0NZXAjCu8w-RiuV8_9tMiXrSZdjsWqi4y86OFb5d",
      "y": "dnd8yoq-NOJcBuEYgdVVMmSxonXg-DU90d7C4uPWb_Lkd4WIQQEH0DyeC2KUDMIU"
    }
}

In the example above, the publicKeyJwk value contains the JSON Web Key. The kty property encodes the key type of "OKP", which means "Octet string key pairs". The alg property identifies the algorithm intended for use with the public key. Although alg is optional, it is RECOMMENDED to be included to avoid security issues arising from using the same key with multiple algorithms. The crv property identifies the particular curve type of the public key. The kid property is a hint used to help discover the key; if present, the kid value SHOULD match, or be included in the id property of the encapsulating JsonWebKey object, as part of the path, query or fragment of the URL. Finally, the x property specifies the point on the Ed25519 curve that is associated with the public key.

The publicKeyJwk property MUST NOT contain any property marked as "Private" in any registry contained in the JOSE Registries [JOSE-REGISTRIES], including "d".

The JSON Web Key data model is also capable of encoding secret keys, sometimes referred to as private keys.

Example 9: JSON Web Key encoding of a secp384r1 (P-384) secret key
{
  "id": "did:example:123456789abcdefghi#key-1",
  "type": "JsonWebKey",
  "controller": "did:example:123456789abcdefghi",
  "secretKeyJwk": {
      "kty": "EC",
      "crv": "P-384",
      "alg": "ES384",
      "d": "fGwges0SX1mj4eZamUCL4qtZijy9uT15fI4gKTuRvre4Kkoju2SHM4rlFOeKVraH",
      "x": "1F14JSzKbwxO-Heqew5HzEt-0NZXAjCu8w-RiuV8_9tMiXrSZdjsWqi4y86OFb5d",
      "y": "dnd8yoq-NOJcBuEYgdVVMmSxonXg-DU90d7C4uPWb_Lkd4WIQQEH0DyeC2KUDMIU"
    }
}

The private key example above is almost identical to the previous example of the public key, except that the information is stored in the secretKeyJwk property (rather than the publicKeyJwk), and the private key value is encoded in the d property thereof (alongside the x property, which still specifies the point on the secp384r1 curve that is associated with the public key).

Referring to Verification Methods

Verification methods can be referenced from properties associated with various verification relationships as described in 5.3.2 Verification Relationships. Referencing verification methods allows them to be used by more than one verification relationship.

If the value of a verification method property is a URL string, the verification method has been included by reference and its properties will need to be retrieved from elsewhere in the controller document or from another controller document. This is done by dereferencing the URL and searching the resulting resource for a verification method map with an id property whose value matches the URL.

Example 10: Referencing verification methods
    {
...

      "authentication": [
        // this key is referenced and might be used by
        // more than one verification relationship
        "did:example:123456789abcdefghi#keys-1",
      ],

...
    }

5.3.2 Verification Relationships

A verification relationship expresses the relationship between the controller and a verification method.

Different verification relationships enable the associated verification methods to be used for different purposes. It is up to a verifier to ascertain the validity of a verification attempt by checking that the verification method used is contained in the appropriate verification relationship property of the controller document.

The verification relationship between the controller and the verification method is explicit in the controller document. Verification methods that are not associated with a particular verification relationship cannot be used for that verification relationship.

The controller document does not express revoked keys using a verification relationship. If a referenced verification method is not in the latest controller document used to dereference it, then that verification method is considered invalid or revoked.

The following sections define several useful verification relationships. A controller document MAY include any of these, or other properties, to express a specific verification relationship. In order to maximize global interoperability, any such properties used SHOULD be registered in the Data Integrity Specification Registries [TBD: DIS-REGISTRIES].

Authentication

The authentication verification relationship is used to specify how the controller is expected to be authenticated, for purposes such as logging into a website or engaging in any sort of challenge-response protocol.

authentication
The authentication property is OPTIONAL. If present, its value MUST be a set of one or more verification methods. Each verification method MAY be embedded or referenced.
Example 11: Authentication property containing three verification methods
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://www.w3.org/ns/credentials/v2"
  ],
  "id": "did:example:123456789abcdefghi",
  ...
  "authentication": [
    // this method can be used to authenticate as did:...fghi
    "did:example:123456789abcdefghi#keys-1",
  ...
}

If authentication is established, it is up to the application to decide what to do with that information.

This is useful to any authentication verifier that needs to check to see whether an entity that is attempting to authenticate is, in fact, presenting a valid proof of authentication. When a verifier receives some data (in some protocol-specific format) that contains a proof that was made for the purpose of "authentication", and that says that an entity is identified by the id, then that verifier checks to ensure that the proof can be verified using a verification method (e.g., public key) listed under `authentication` in the controller document.

Note that the verification method indicated by the `authentication` property of a controller document can only be used to authenticate the controller. To authenticate a different controller, the entity associated with the value of controller needs to authenticate with its own controller document and associated `authentication` verification relationship.

Assertion

The assertionMethod verification relationship is used to specify how the controller is expected to express claims, such as for the purposes of issuing a Verifiable Credential [VC-DATA-MODEL-2.0].

assertionMethod
The assertionMethod property is OPTIONAL. If present, its value MUST be a set of one or more verification methods. Each verification method MAY be embedded or referenced.

This property is useful, for example, during the processing of a verifiable credential by a verifier.

Example 12: Assertion method property
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://www.w3.org/ns/credentials/v2"
  ],
  "id": "did:example:123456789abcdefghi",
  ...
  "assertionMethod": [
    // this method can be used to assert statements as did:...fghi
    "did:example:123456789abcdefghi#keys-1",
  ...
}

6. JOSE Header Parameters

The normative statements in Registered Header Parameter Names apply to securing credentials and presentations.

The normative statements in JOSE Header apply to securing credentials and presentations.

The data model for the JOSE Header is JSON (application/json), not JSON-LD (application/ld+json).

The normative statements in Replicating Claims as Header Parameters apply to securing claims about a credential subject.

When replicating claims from the JWT Claims Set to Header Parameters, it is RECOMMENDED to use [RFC7519], the IANA JSON Web Token Claims registry, and the IANA JSON Web Signature and Encryption Header Parameters registry to identify any claims that might be confused with members defined by the [[VC-DATA-MODEL]. These include but are not limited to: iss, kid, alg, iat, exp, and cnf.

When the iat and/or exp JWT claims are present, they represent the issuance and expiration time of the signature, respectively. Note that these are different from the validFrom and validUntil properties defined in Validity Period that represent the validity of the data that is being secured.

The JWT Claim Names vc and vp MUST NOT be present as header parameters.

When present, members of the header are to be interpreted and processed according to the corresponding definitions found in the IANA JSON Web Signature and Encryption Header Parameters registry and the IANA JSON Web Token Claims registry.

Additional members may be present. If they are not understood, they MUST be ignored.

7. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

The key words MAY, MUST, MUST NOT, OPTIONAL, RECOMMENDED, REQUIRED, and SHOULD in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

7.1 Securing Verifiable Credentials

The Verifiable Credentials Data Model v1.1 describes the approach taken by JSON Web Tokens to secure JWT Claims Sets as applying an external proof.

The normative statements in Securing Verifiable Credentials apply to securing application/vc+ld+json and application/vp+ld+json as application/vc+ld+json+sd-jwt and application/vp+ld+json+sd-jwt.

For clarity, these requirements are repeated here:

The type VerifiableCredential and VerifiablePresentation are RDF Classes.

The presence of the word "Verifiable" does not convey a cryptographic verification capability exists.

The presence of the JSON proof member does not convey a cryptographic verification capability exists.

The presence of the JSON proof member is optional in both VerifiableCredential and VerifiablePresentation.

The presence of the JSON proof member is optional in both application/vc+ld+json and application/vp+ld+json.

JSON Web Token implementers are advised to review Implementation Requirements.

Accordingly, Issuers, Holders, and Verifiers MUST understand the JSON Web Token header parameter "alg": "none" when securing the [VC-DATA-MODEL] with JSON Web Tokens.

When content types from the [VC-DATA-MODEL] are secured using JSON Web Tokens, the header parameter "alg": "none", MUST be used to communicate that a JWT Claims Set (a Verifiable Credential or a Verifiable Presentation) has no integrity protection.

When a JWT Claims Set (a Verifiable Credential or a Verifiable Presentation) contains proof, and the JSON Web Token header contains "alg": "none", the JWT Claims Set MUST be considered to have no integrity protection.

Verifiable Credentials and Verifiable Presenatations are not required to be secured or integrity protected or to contain a proof member.

Issuers, Holders, and Verifiers MUST ignore all JWT Claims Sets that have no integrity protection.

8. IANA Considerations

8.1 Media Types

8.1.1 application/vc+ld+json+sd-jwt

This specification registers the application/vc+ld+json+sd-jwt Media Type specifically for identifying a Selective Disclosure for JWTs (SD-JWT) conforming to the Verifiable Credential Data Model.

Type name: application
Subtype name: vc+ld+json+sd-jwt
Required parameters: None
Encoding considerations: binary; application/sd-jwt values are a series of base64url-encoded values (some of which may be the empty string) separated by period ('.') or tilde ('~') characters.
Security considerations:

As defined in this specification. See also the security considerations in Selective Disclosure for JWTs (SD-JWT).

Contact: W3C Verifiable Credentials Working Group public-vc-wg@w3.org

8.1.2 application/vp+ld+json+sd-jwt

This specification registers the application/vp+ld+json+sd-jwt Media Type specifically for identifying a Selective Disclosure for JWTs (SD-JWT) conforming to the Verifiable Presentations.

Type name: application
Subtype name: vp+ld+json+sd-jwt
Required parameters: None
Encoding considerations: binary; application/sd-jwt values are a series of base64url-encoded values (some of which may be the empty string) separated by period ('.') or tilde ('~') characters.
Security considerations:

As defined in this specification. See also the security considerations in Selective Disclosure for JWTs (SD-JWT).

Contact: W3C Verifiable Credentials Working Group public-vc-wg@w3.org

8.2 Registered Claims

This section retains deprecated registered claim names that were previously submitted to the Internet Engineering Steering Group (IESG) for review, approval, and registration with IANA in the "JSON Web Token Claims Registry".

Issue 119: Deprecate `vc` & `vp` ?

These are registered claims at:

As it says, the change controller is IESG, but it references v1.0 of the data model, specifically:

In v2, we removed these from the core data model, and we removed them from this specification.

Should we tell the IESG to update the registry in any way?

8.2.1 vc

Claim Name: "vc"
Claim Description: Verifiable Credential
Change Controller: W3C
Specification Document(s): Section 6.3.1.2: JSON Web Token Extensions of Verifiable Credentials Data Model 1.0

8.2.2 vp

Claim Name: "vp"
Claim Description: Verifiable Presentation
Change Controller: W3C
Specification Document(s): Section 6.3.1.2: JSON Web Token Extensions of Verifiable Credentials Data Model 1.0

9. Other Considerations

9.1 Privacy Considerations

Verifiable Credentials often contain sensitive information that needs to be protected to ensure the privacy and security of organizations and individuals. This section outlines some privacy considerations relevant to implementers and users.

Implementers are advised to note and abide by all privacy considerations called out in the [VC-DATA-MODEL].

Implementers are additionally advised to reference the Privacy Consideration section of the JWT specification for privacy guidance.

In addition to the privacy recommendations in the [VC-DATA-MODEL], the following considerations are given:

These considerations are not exhaustive, and implementers and users are advised to consult additional privacy resources and best practices to ensure the privacy and security of Verifiable Credentials implemented using VC-JWT.

9.2 Security Considerations

This section outlines security considerations for implementers and users of this specification. It is important to carefully consider these factors to ensure the security and integrity of Verifiable Credentials when implemented using JWTs.

When implementing VC-JWTs, it is essential to address all security issues relevant to broad cryptographic applications. This especially includes protecting the user's asymmetric private and symmetric secret keys, as well as employing countermeasures against various attacks. Failure to adequately address these issues could compromise the security and integrity of Verifiable Credentials, potentially leading to unauthorized access, modification, or disclosure of sensitive information.

Implementers are advised to follow best practices and established cryptographic standards to ensure the secure handling of keys and other sensitive data. Additionally, conduct regular security assessments and audits to identify and address any vulnerabilities or threats.

Follow all security considerations outlined in [rfc7515] and [rfc7519].

When utilizing JSON-LD, take special care around remote retrieval of contexts and follow the additional security considerations noted in [json-ld11].

As noted in [rfc7515] when utilizing JSON [rfc7159], strict validation is a security requirement. If malformed JSON is received, it may be impossible to reliably interpret the producer's intent, potentially leading to ambiguous or exploitable situations. To prevent these risks, it is essential to use a JSON parser that strictly validates the syntax of all input data. It is essential that any JSON inputs that do not conform to the JSON-text syntax defined in [rfc7159] be rejected in their entirety by JSON parsers. Failure to reject invalid input could compromise the security and integrity of Verifiable Credentials.

9.3 Accessibility

This section is non-normative.

When implementing this specification, it is crucial for technical implementers to consider various accessibility factors. Ignoring accessibility concerns renders the information unusable for a significant portion of the population. To ensure equal access for all individuals, regardless of their abilities, it is vital to adhere to accessibility guidelines and standards, such as the Web Content Accessibility Guidelines (WCAG 2.1) [WCAG21]. This becomes even more critical when establishing systems that involve cryptography, as they have historically posed challenges for assistive technologies.

Implementers are advised to note and abide by all accessibility considerations called out in the [VC-DATA-MODEL].

9.4 Internationalization

This section is non-normative.

Implementers should take into account several internationalization considerations when publishing data described in this specification. Disregarding internationalization hampers the production and consumption of data across diverse languages and societies, thereby restricting the applicability and significantly reducing the value of the specification as a standard.

Implementers are advised to note and abide by all internationalization considerations called out in the [VC-DATA-MODEL], see also i18n, URL Standard

10. Appendix

This section is non-normative.

10.1 Controllers

Example 13: A verifiable credential controller document
{
  "@context": ["https://www.w3.org/ns/did/v1", {
    "@vocab": "https://vendor.example#"
  }],
  "id": "did:web:vendor.example",
  "alsoKnownAs": ["https://vendor.example",
    "did:jwk:eyJraWQiOiJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6andrLXRodW1icHJpbnQ6c2hhLTI1NjpGZk1iek9qTW1RNGVmVDZrdndUSUpqZWxUcWpsMHhqRUlXUTJxb2JzUk1NIiwia3R5IjoiT0tQIiwiY3J2IjoiRWQyNTUxOSIsImFsZyI6IkVkRFNBIiwieCI6IkFOUmpIX3p4Y0tCeHNqUlBVdHpSYnA3RlNWTEtKWFE5QVBYOU1QMWo3azQifQ"
  ],
  "verificationMethod": [{
    "id": "#urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs",
    "type": "JsonWebKey",
    "controller": "did:web:vendor.example",
    "publicKeyJwk": {
      "kty": "EC",
      "crv": "P-521",
      "alg": "ES512",
      "x": "AFTyMw-fIYJNg6fBVJvOPOsLxmnNj8HgqMChyRL0swLaefVAc7wrWZ8okQJqMmvv03JRUp277meQZM3JcvXFkH1v",
      "y": "ALn96CrD88b4TClmkl1sk0xk2FgAIda97ZF8TUOjbeWSzbKnN2KB6pqlpbuJ2xIRXvsn5BWQVlAT2JGpGwDNMyV1"
    }
  }, {
    "id": "#z6MkhEdpG12jyQegrr62ACRmNY8gc531W2j9Xo39cHphuCEH",
    "type": "JsonWebKey2020",
    "controller": "https://vendor.example",
    "publicKeyJwk": {
      "kid": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:FfMbzOjMmQ4efT6kvwTIJjelTqjl0xjEIWQ2qobsRMM",
      "kty": "OKP",
      "crv": "Ed25519",
      "alg": "EdDSA",
      "x": "ANRjH_zxcKBxsjRPUtzRbp7FSVLKJXQ9APX9MP1j7k4"
    }
  }, {
    "id": "#subject-authenticaton",
    "type": "JsonWebKey",
    "controller": "did:web:vendor.example",
    "publicKeyJwk": {
      "kty": "EC",
      "crv": "P-384",
      "alg": "ES384",
      "x": "PxgAmVYOQvSNcMYL2tOzoLwSWn4Ta3tIMPEUKR8pxeb-gmR11-DyKHBoIiY-2LhM",
      "y": "BZEBTkImVdpwvxR9THIRw16eblnj5-tZa7m-ww5uVd4kyPJNRoWUn2aT9ZuarAe-"
    }
  }, {
    "id": "#credential-issuance",
    "type": "JsonWebKey",
    "controller": "did:web:vendor.example",
    "publicKeyJwk": {
      "kty": "EC",
      "crv": "P-256",
      "alg": "ES256",
      "x": "MYvnaI87pfrn3FpTqW-yNiFcF1K7fedJiqapm20_q7c",
      "y": "9YEbT6Tyuc7xp9yRvhOUVKK_NIHkn5HpK9ZMgvK5pVw"
    }
  }, {
    "id": "#key-agreement",
    "type": "JsonWebKey",
    "controller": "did:web:vendor.example",
    "publicKeyJwk": {
      "kty": "OKP",
      "crv": "X25519",
      "alg": "ECDH-ES+A128KW",
      "x": "qLZkSTbstvMWPTivmiQglEFWG2Ff7gNDVoVisdZTr1I"
    }
  }],
  "authentication": ["#subject-authenticaton"],
  "assertionMethod": ["#credential-issuance"]
}

10.2 Credentials

Example 14: A revocable credential with multiple subjects
{
  "@context": ["https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://contoso.example/credentials/23894672394",
  "type": ["VerifiableCredential", "K9UnitCredential"],
  "issuer": {
    "id": "https://contoso.example"
  },
  "validFrom": "2015-04-16T05:11:32.432Z",
  "credentialStatus": {
    "id": "https://contoso.example/credentials/status/4#273762",
    "type": "StatusList2021Entry",
    "statusPurpose": "revocation",
    "statusListIndex": "273762",
    "statusListCredential": "https://contoso.example/credentials/status/4"
  },
  "credentialSubject": [{
    "id": "did:example:1312387641",
    "type": "Person"
  }, {
    "id": "did:example:63888231",
    "type": "Dog"
  }]
}
graph LR 22("VerifiableCredential") 23{{"id"}} 24("https://contoso.example/credentials/23894672394") 25(("type")) 26("K9UnitCredential") 27("issuer") 28{{"id"}} 29("https://contoso.example") 30("validFrom") 31("2015-04-16T05:11:32.432Z") 32("credentialStatus") 33{{"id"}} 34("https://contoso.example/credentials/status/4#273762") 35(("type")) 36("StatusList2021Entry") 37("statusPurpose") 38("revocation") 39("statusListIndex") 40("273762") 41("statusListCredential") 42("https://contoso.example/credentials/status/4") 43("credentialSubject") 44{{"id"}} 45("did:example:1312387641") 46(("type")) 47("Person") 48("credentialSubject") 49{{"id"}} 50("did:example:63888231") 51(("type")) 52("Dog") 22 --- 23 23 --- 24 22 --- 25 25 --- 26 22 --- 27 27 --- 28 28 --- 29 22 --- 30 30 --- 31 22 --- 32 32 --- 33 33 --- 34 32 --- 35 35 --- 36 32 --- 37 37 --- 38 32 --- 39 39 --- 40 32 --- 41 41 --- 42 22 --- 43 43 --- 44 44 --- 45 43 --- 46 46 --- 47 22 --- 48 48 --- 49 49 --- 50 48 --- 51 51 --- 52
---------------- Issuer Claims ----------------
"@context":
  - https://www.w3.org/ns/credentials/v2
  - https://www.w3.org/ns/credentials/examples/v2
!sd id: https://contoso.example/credentials/23894672394
!sd type:
  - VerifiableCredential
  - K9UnitCredential
issuer:
  !sd id: https://contoso.example
validFrom: 2015-04-16T05:11:32.432Z
credentialStatus:
  !sd id: https://contoso.example/credentials/status/4#273762
  !sd type: StatusList2021Entry
  statusPurpose: revocation
  statusListIndex: "273762"
  statusListCredential: https://contoso.example/credentials/status/4
credentialSubject:
  - !sd id: did:example:1312387641
    !sd type: Person
  - !sd id: did:example:63888231
    !sd type: Dog
---------------- Holder Disclosure ----------------
id: False
type: True
issuer:
  id: True
credentialStatus:
  id: True
---------------- Decoded Protected Header ----------------
{
  "alg": "ES256",
  "typ": "vc+ld+json+sd-jwt",
  "cty": "vc+ld+json"
}
---------------- Decoded Protected Claimset ----------------
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "issuer": {
    "id": "https://contoso.example"
  },
  "validFrom": "2015-04-16T05:11:32.432Z",
  "credentialStatus": {
    "statusPurpose": "revocation",
    "statusListIndex": "273762",
    "statusListCredential": "https://contoso.example/credentials/status/4",
    "id": "https://contoso.example/credentials/status/4#273762"
  },
  "credentialSubject": [
    {},
    {}
  ],
  "iss": "did:web:issuer.example",
  "iat": 1696618914,
  "exp": 1728241314,
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "alg": "ES256",
      "x": "ieZd9R1lOcMn08RYiZNFmYEy87RHPjxYZqBkOH4UVBY",
      "y": "lpnnzT-TIv3vdBEOyCLcTfejPELRJYUFp34dgx_9nw0"
    }
  },
  "type": [
    "VerifiableCredential",
    "K9UnitCredential"
  ]
}
---------------- Compact Encoded Selective Disclosure JSON Web Token ----------------
eyJhbGciOiJFUzI1NiIsInR5cCI6InZjK2xkK2pzb24rc2Qtand0IiwiY3R5IjoidmMrbGQranNvbiJ9.eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvZXhhbXBsZXMvdjIiXSwiaXNzdWVyIjp7Il9zZCI6WyJBSUR4RjhCbFpmczB2XzlfWkk1S2w4SWpzM3pRaFVfT0Z3T0RUdWZacXprIl19LCJ2YWxpZEZyb20iOiIyMDE1LTA0LTE2VDA1OjExOjMyLjQzMloiLCJjcmVkZW50aWFsU3RhdHVzIjp7InN0YXR1c1B1cnBvc2UiOiJyZXZvY2F0aW9uIiwic3RhdHVzTGlzdEluZGV4IjoiMjczNzYyIiwic3RhdHVzTGlzdENyZWRlbnRpYWwiOiJodHRwczovL2NvbnRvc28uZXhhbXBsZS9jcmVkZW50aWFscy9zdGF0dXMvNCIsIl9zZCI6WyIxRjNuMFJPRThObFBzNXQwZUxNQUhadWszQWU4eEhfRFJPS3hjdHZTWVNzIiwiQmlad2phTlAtdG9yMEpJSUVZOTFWanVMYURuYWVBSjFHVzlRMkxxelhmOCJdfSwiY3JlZGVudGlhbFN1YmplY3QiOlt7Il9zZCI6WyJET3lqSi1yWThONnNGLW4xeC1KRVc4UlFXMXFUSXR4Wkk5dlREVjBBUzJFIiwiV1htSndGN1BuWk5mSzVlWmZ1STRkWVJVLWNndHBLRmNJMEVaNmdYM2FacyJdfSx7Il9zZCI6WyI3aXI2aU44S2k2YXB2MFZPcHlmWVRNbnBBUVQ5NWc5VnRsaWhfRkdlWG9NIiwiT19PSGVHanpiQ1p6QjBnUWJCZEJRT2hIclM3ZXlMYjdJWnhmM3dTX1VaVSJdfV0sIl9zZCI6WyJORlJiRjNZcXo1bHNPM2ZMeUFJZ1VIaEN0SGg2YVJuem5xZlJLT19MeDU0IiwiYUhTaGpETEh6TUhJRjNHejdmSzluUkpodzZ1SmFmazlmTi16aXBoZGtXVSJdLCJfc2RfYWxnIjoic2hhLTI1NiIsImlzcyI6ImRpZDp3ZWI6aXNzdWVyLmV4YW1wbGUiLCJpYXQiOjE2OTY2MTg5MTQsImV4cCI6MTcyODI0MTMxNCwiY25mIjp7Imp3ayI6eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwiYWxnIjoiRVMyNTYiLCJ4IjoiaWVaZDlSMWxPY01uMDhSWWlaTkZtWUV5ODdSSFBqeFlacUJrT0g0VVZCWSIsInkiOiJscG5uelQtVEl2M3ZkQkVPeUNMY1RmZWpQRUxSSllVRnAzNGRneF85bncwIn19fQ.dlPuUH16-yWs9CUAODYJR6EcJdXCx6vmli0elx3YXMLXC5pyo9zTjkKXUp_VVllUyfLtZKb-Z9SoMXu6lv1agA~WyIyeHlyR3F5WTA1bUlZMWdpVlpNV0R3IiwgImlkIiwgImh0dHBzOi8vY29udG9zby5leGFtcGxlIl0~WyJ3cWpjQVpfZGYtclRsTW5qRnA5VzZBIiwgImlkIiwgImh0dHBzOi8vY29udG9zby5leGFtcGxlL2NyZWRlbnRpYWxzL3N0YXR1cy80IzI3Mzc2MiJd~WyJMMnQtSWx6dHhYRGJxalBIMDloRXB3IiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIks5VW5pdENyZWRlbnRpYWwiXV0~eyJhbGciOiJFUzI1NiIsInR5cCI6ImtiK2p3dCJ9.eyJub25jZSI6Ilcxb3BuaUhhQXpqYkJHVFdvQmU4R3ciLCJhdWQiOiJkaWQ6d2ViOnZlcmlmaWVyLmV4YW1wbGUiLCJpYXQiOjE2OTY2MTg5MTR9.HbZKA9g4dYDbsti2i8zoAvi7g8I3xnBF9_gx1k8NHA94R2G6yYARYE3XXXPGlJzomg1rCq0l7IwuqtPW4DxQ_A
Example 15: A credential with a schema
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://contoso.example/credentials/35327255",
  "type": ["VerifiableCredential", "KYCExample"],
  "issuer": "did:web:contoso.example",
  "validFrom": "2019-05-25T03:10:16.992Z",
  "validUntil": "2027-05-25T03:10:16.992Z",
  "credentialSchema": {
    "id": "https://contoso.example/bafybeigdyr...lqabf3oclgtqy55fbzdi",
    "type": "JsonSchema"
  },
  "credentialSubject": {
    "id": "did:example:1231588",
    "type": "Person"
  }
}
graph LR 53("VerifiableCredential") 54{{"id"}} 55("https://contoso.example/credentials/35327255") 56(("type")) 57("KYCExample") 58("issuer") 59("did:web:contoso.example") 60("validFrom") 61("2019-05-25T03:10:16.992Z") 62("validUntil") 63("2027-05-25T03:10:16.992Z") 64("credentialSchema") 65{{"id"}} 66("https://contoso.example/bafybeigdyr...lqabf3oclgtqy55fbzdi") 67(("type")) 68("JsonSchema") 69("credentialSubject") 70{{"id"}} 71("did:example:1231588") 72(("type")) 73("Person") 53 --- 54 54 --- 55 53 --- 56 56 --- 57 53 --- 58 58 --- 59 53 --- 60 60 --- 61 53 --- 62 62 --- 63 53 --- 64 64 --- 65 65 --- 66 64 --- 67 67 --- 68 53 --- 69 69 --- 70 70 --- 71 69 --- 72 72 --- 73
---------------- Issuer Claims ----------------
"@context":
  - https://www.w3.org/ns/credentials/v2
  - https://www.w3.org/ns/credentials/examples/v2
!sd id: https://contoso.example/credentials/35327255
!sd type:
  - VerifiableCredential
  - KYCExample
issuer: did:web:contoso.example
validFrom: 2019-05-25T03:10:16.992Z
validUntil: 2027-05-25T03:10:16.992Z
credentialSchema:
  !sd id: https://contoso.example/bafybeigdyr...lqabf3oclgtqy55fbzdi
  !sd type: JsonSchema
credentialSubject:
  !sd id: did:example:1231588
  !sd type: Person
---------------- Holder Disclosure ----------------
issuer:
  id: True
credentialStatus:
  id: True
credentialSubject:
  id: True
  type: False
---------------- Decoded Protected Header ----------------
{
  "alg": "ES384"
}
---------------- Decoded Protected Claimset ----------------
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "issuer": "did:web:contoso.example",
  "validFrom": "2019-05-25T03:10:16.992Z",
  "validUntil": "2027-05-25T03:10:16.992Z",
  "credentialSchema": {},
  "credentialSubject": {
    "id": "did:example:1231588"
  },
  "iss": "did:web:issuer.example",
  "iat": 1696618914,
  "exp": 1728241314,
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-384",
      "alg": "ES384",
      "x": "kPzP7dtj6WGJyl-LSB_p6G7IXQuzy7Yt2MgOODqo-uOzYmwKjtqabNsJCH_T9NUd",
      "y": "yCJ0scFHITLdcrzFFiHOWjNiPEd0y8EiWhNjvfJhAbtfvR9Hmdserpkkm6796_cd"
    }
  }
}
---------------- Compact Encoded Selective Disclosure JSON Web Token ----------------
eyJhbGciOiJFUzM4NCJ9.eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvZXhhbXBsZXMvdjIiXSwiaXNzdWVyIjoiZGlkOndlYjpjb250b3NvLmV4YW1wbGUiLCJ2YWxpZEZyb20iOiIyMDE5LTA1LTI1VDAzOjEwOjE2Ljk5MloiLCJ2YWxpZFVudGlsIjoiMjAyNy0wNS0yNVQwMzoxMDoxNi45OTJaIiwiY3JlZGVudGlhbFNjaGVtYSI6eyJfc2QiOlsiNWw3Ql9ZV0Uzd0trTlVNVHNTamtsalcxZ180aFJyMXVsUVNxeVZ4VUxSWSIsIlUyXzVkTW9uZWxoc0VKRnhfS25teFp0b2FHUllFZ1hER25SSVF6b3BFX2MiXX0sImNyZWRlbnRpYWxTdWJqZWN0Ijp7Il9zZCI6WyJPV2VoaTJNODZlVGhxYmZHX2Rma2tneFVTMnNVQzk5N0JwRnVGTzVMcC1RIiwidGZoYjFEbmJ0Y0FRLVdfenNOc0R2ZnFlcEtYcVdtWm85bkdJZXlNeGMtTSJdfSwiX3NkIjpbInI2MUhrUTZWaTlLVmd5azE1b21LV0xVQVhOVktuWnJRaS1ranZualhSTDgiLCJ3YVd0TUJPUy1zQVVaYXJEaFdSRGdQTVJCUnNoMzIxS3JlYUdwNEhsZEM4Il0sIl9zZF9hbGciOiJzaGEtMjU2IiwiaXNzIjoiZGlkOndlYjppc3N1ZXIuZXhhbXBsZSIsImlhdCI6MTY5NjYxODkxNCwiZXhwIjoxNzI4MjQxMzE0LCJjbmYiOnsiandrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0zODQiLCJhbGciOiJFUzM4NCIsIngiOiJrUHpQN2R0ajZXR0p5bC1MU0JfcDZHN0lYUXV6eTdZdDJNZ09PRHFvLXVPelltd0tqdHFhYk5zSkNIX1Q5TlVkIiwieSI6InlDSjBzY0ZISVRMZGNyekZGaUhPV2pOaVBFZDB5OEVpV2hOanZmSmhBYnRmdlI5SG1kc2VycGtrbTY3OTZfY2QifX19.LKZ2ku6js00o569HO3k8sOK-M0Ajmu2s8J3Y22GNMh9mJuPXUkfjN1GfPI2erz3fiugNYU_Px36ToSkh4V10rTVVSv2MHe3vAgN4v5WbrOY99YJ-bZMkVa9ERrBIIhRb~WyJ2RlFkdTdFRVVnYjNjeFQxYWc4ZUZBIiwgImlkIiwgImRpZDpleGFtcGxlOjEyMzE1ODgiXQ~eyJhbGciOiJFUzM4NCIsInR5cCI6ImtiK2p3dCJ9.eyJub25jZSI6IldVQjZBZDVJNnM2TXlPYVhsd1lyamciLCJhdWQiOiJkaWQ6d2ViOnZlcmlmaWVyLmV4YW1wbGUiLCJpYXQiOjE2OTY2MTg5MTR9.6YlVD28hG7xlNr81AD-feI3PYB_8Ao8EE3_rBqSkBQv5rmthCwRpik0x21a6UtbYhVWGXbz651fFbac9Ra0NR-ZzrKaZt3GLwIxyjyzT9TkGTZ6sYEUzA48sW-0y0jon

10.3 Presentations

Example 16: Presentation
{
  "@context": ["https://www.w3.org/ns/credentials/v2"],
  "type": ["VerifiablePresentation"],
  "holder": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:_Fpfe27AuGmEljZE9s2lw2UH-qrZLRFNrWbJrWIe4SI",
  "verifiableCredential": [{
      "@context": [
        "https://www.w3.org/ns/credentials/v2"
      ],
      "type": [
        "VerifiableCredential"
      ],
      "issuer": "https://issuer.example/issuers/68",
      "validFrom": "2023-06-07T21:14:14.148Z",
      "credentialSubject": {
        "id": "https://subject.vendor.example"
      }
    },
    "https://vendor.example/credentials/42", 
    "did:example:123",
    "urn:uuid:01ec9426-c175-4e39-a006-d30050e28214",
    "urn:ietf:params:oauth:jwk-thumbprint:sha-256:_Fpfe27AuGmEljZE9s2lw2UH-qrZLRFNrWbJrWIe4SI",
    "data:application/vc+ld+json;base64,eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOiJkaWQ6andrOmV5SnJhV1FpT2lKMWNtNDZhV1YwWmpwd1lYSmhiWE02YjJGMWRHZzZhbmRyTFhSb2RXMWljSEpwYm5RNmMyaGhMVEkxTmpwdlFtUm1kbVpET1hoNk1GOUJVWFpSTjNZMU1YbERXbDl6ZUdwNU56VkNUSEpJZWsxT1Jqa3lPV1U0SWl3aWEzUjVJam9pVDB0UUlpd2lZM0oySWpvaVJXUXlOVFV4T1NJc0ltRnNaeUk2SWtWa1JGTkJJaXdpZUNJNklqTmljbU5zYjBJNGFEUk5XbFZJYms5UVVHbGtTbXd0U2pkdVVsRkpXSFJUYUZwM1oyNW1jbHAxVDI4aWZRIiwidmFsaWRGcm9tIjoiMjAyMy0wNi0wN1QyMToxNDoxNC4xNDhaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJodHRwczovL3N1YmplY3QudmVuZG9yLmV4YW1wbGUifX0="
  ]
}
graph LR 87("VerifiablePresentation") 88("holder") 89("urn:ietf:params:oauth:jwk-thumbprint:sha-256:_Fpfe27AuGmEljZE9s2lw2UH-qrZLRFNrWbJrWIe4SI") 90("verifiableCredential") 91("issuer") 92("https://issuer.example/issuers/68") 93("validFrom") 94("2023-06-07T21:14:14.148Z") 95("credentialSubject") 96{{"id"}} 97("https://subject.vendor.example") 98("verifiableCredential") 99("https://vendor.example/credentials/42") 100("verifiableCredential") 101("did:example:123") 102("verifiableCredential") 103("urn:uuid:01ec9426-c175-4e39-a006-d30050e28214") 104("verifiableCredential") 105("urn:ietf:params:oauth:jwk-thumbprint:sha-256:_Fpfe27AuGmEljZE9s2lw2UH-qrZLRFNrWbJrWIe4SI") 106("verifiableCredential") 107("data:application/vc+ld+json;base64,eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOiJkaWQ6andrOmV5SnJhV1FpT2lKMWNtNDZhV1YwWmpwd1lYSmhiWE02YjJGMWRHZzZhbmRyTFhSb2RXMWljSEpwYm5RNmMyaGhMVEkxTmpwdlFtUm1kbVpET1hoNk1GOUJVWFpSTjNZMU1YbERXbDl6ZUdwNU56VkNUSEpJZWsxT1Jqa3lPV1U0SWl3aWEzUjVJam9pVDB0UUlpd2lZM0oySWpvaVJXUXlOVFV4T1NJc0ltRnNaeUk2SWtWa1JGTkJJaXdpZUNJNklqTmljbU5zYjBJNGFEUk5XbFZJYms5UVVHbGtTbXd0U2pkdVVsRkpXSFJUYUZwM1oyNW1jbHAxVDI4aWZRIiwidmFsaWRGcm9tIjoiMjAyMy0wNi0wN1QyMToxNDoxNC4xNDhaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJodHRwczovL3N1YmplY3QudmVuZG9yLmV4YW1wbGUifX0=") 87 --- 88 88 --- 89 87 --- 90 90 --- 91 91 --- 92 90 --- 93 93 --- 94 90 --- 95 95 --- 96 96 --- 97 87 --- 98 98 --- 99 87 --- 100 100 --- 101 87 --- 102 102 --- 103 87 --- 104 104 --- 105 87 --- 106 106 --- 107
---------------- Issuer Claims ----------------
"@context":
  - https://www.w3.org/ns/credentials/v2
!sd type:
  - VerifiablePresentation
holder: urn:ietf:params:oauth:jwk-thumbprint:sha-256:_Fpfe27AuGmEljZE9s2lw2UH-qrZLRFNrWbJrWIe4SI
verifiableCredential:
  - "@context":
      - https://www.w3.org/ns/credentials/v2
    !sd type:
      - VerifiableCredential
    issuer: https://issuer.example/issuers/68
    validFrom: 2023-06-07T21:14:14.148Z
    credentialSubject:
      !sd id: https://subject.vendor.example
  - https://vendor.example/credentials/42
  - did:example:123
  - urn:uuid:01ec9426-c175-4e39-a006-d30050e28214
  - urn:ietf:params:oauth:jwk-thumbprint:sha-256:_Fpfe27AuGmEljZE9s2lw2UH-qrZLRFNrWbJrWIe4SI
  - data:application/vc+ld+json;base64,eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOiJkaWQ6andrOmV5SnJhV1FpT2lKMWNtNDZhV1YwWmpwd1lYSmhiWE02YjJGMWRHZzZhbmRyTFhSb2RXMWljSEpwYm5RNmMyaGhMVEkxTmpwdlFtUm1kbVpET1hoNk1GOUJVWFpSTjNZMU1YbERXbDl6ZUdwNU56VkNUSEpJZWsxT1Jqa3lPV1U0SWl3aWEzUjVJam9pVDB0UUlpd2lZM0oySWpvaVJXUXlOVFV4T1NJc0ltRnNaeUk2SWtWa1JGTkJJaXdpZUNJNklqTmljbU5zYjBJNGFEUk5XbFZJYms5UVVHbGtTbXd0U2pkdVVsRkpXSFJUYUZwM1oyNW1jbHAxVDI4aWZRIiwidmFsaWRGcm9tIjoiMjAyMy0wNi0wN1QyMToxNDoxNC4xNDhaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJodHRwczovL3N1YmplY3QudmVuZG9yLmV4YW1wbGUifX0=
---------------- Holder Disclosure ----------------
id: True
type: True
holder:
  id: True
---------------- Decoded Protected Header ----------------
{
  "alg": "ES256",
  "typ": "vp+ld+json+sd-jwt",
  "cty": "vp+ld+json"
}
---------------- Decoded Protected Claimset ----------------
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2"
  ],
  "holder": "urn:ietf:params:oauth:jwk-thumbprint:sha-256:_Fpfe27AuGmEljZE9s2lw2UH-qrZLRFNrWbJrWIe4SI",
  "verifiableCredential": [
    {
      "@context": [
        "https://www.w3.org/ns/credentials/v2"
      ],
      "issuer": "https://issuer.example/issuers/68",
      "validFrom": "2023-06-07T21:14:14.148Z",
      "credentialSubject": {}
    },
    "https://vendor.example/credentials/42",
    "did:example:123",
    "urn:uuid:01ec9426-c175-4e39-a006-d30050e28214",
    "urn:ietf:params:oauth:jwk-thumbprint:sha-256:_Fpfe27AuGmEljZE9s2lw2UH-qrZLRFNrWbJrWIe4SI",
    "data:application/vc+ld+json;base64,eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOiJkaWQ6andrOmV5SnJhV1FpT2lKMWNtNDZhV1YwWmpwd1lYSmhiWE02YjJGMWRHZzZhbmRyTFhSb2RXMWljSEpwYm5RNmMyaGhMVEkxTmpwdlFtUm1kbVpET1hoNk1GOUJVWFpSTjNZMU1YbERXbDl6ZUdwNU56VkNUSEpJZWsxT1Jqa3lPV1U0SWl3aWEzUjVJam9pVDB0UUlpd2lZM0oySWpvaVJXUXlOVFV4T1NJc0ltRnNaeUk2SWtWa1JGTkJJaXdpZUNJNklqTmljbU5zYjBJNGFEUk5XbFZJYms5UVVHbGtTbXd0U2pkdVVsRkpXSFJUYUZwM1oyNW1jbHAxVDI4aWZRIiwidmFsaWRGcm9tIjoiMjAyMy0wNi0wN1QyMToxNDoxNC4xNDhaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJodHRwczovL3N1YmplY3QudmVuZG9yLmV4YW1wbGUifX0="
  ],
  "iss": "did:web:issuer.example",
  "iat": 1696618914,
  "exp": 1728241314,
  "cnf": {
    "jwk": {
      "kty": "EC",
      "crv": "P-256",
      "alg": "ES256",
      "x": "Yp8eCn2Oad0nlYpVejzKtnEZWlIGAH6KLcTXRiWip54",
      "y": "yCUaOcbgOiAl2RyccaxMTLA9DXwuYelgAx7xU0q-KfI"
    }
  },
  "type": [
    "VerifiablePresentation"
  ]
}
---------------- Compact Encoded Selective Disclosure JSON Web Token ----------------
eyJhbGciOiJFUzI1NiIsInR5cCI6InZwK2xkK2pzb24rc2Qtand0IiwiY3R5IjoidnArbGQranNvbiJ9.eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiXSwiaG9sZGVyIjoidXJuOmlldGY6cGFyYW1zOm9hdXRoOmp3ay10aHVtYnByaW50OnNoYS0yNTY6X0ZwZmUyN0F1R21FbGpaRTlzMmx3MlVILXFyWkxSRk5yV2JKcldJZTRTSSIsInZlcmlmaWFibGVDcmVkZW50aWFsIjpbeyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiXSwiaXNzdWVyIjoiaHR0cHM6Ly9pc3N1ZXIuZXhhbXBsZS9pc3N1ZXJzLzY4IiwidmFsaWRGcm9tIjoiMjAyMy0wNi0wN1QyMToxNDoxNC4xNDhaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiX3NkIjpbIjRXT0h5eXg0ZzdDalFhejBSMHl1NnA0NURQNlIwRDhuczZyTExxanhBdTgiXX0sIl9zZCI6WyJpZW16RFBPbE9VYjhqblI4ZUNKX09QVkc2Q01XSWFFb1lDSmN6REljdXB3Il19LCJodHRwczovL3ZlbmRvci5leGFtcGxlL2NyZWRlbnRpYWxzLzQyIiwiZGlkOmV4YW1wbGU6MTIzIiwidXJuOnV1aWQ6MDFlYzk0MjYtYzE3NS00ZTM5LWEwMDYtZDMwMDUwZTI4MjE0IiwidXJuOmlldGY6cGFyYW1zOm9hdXRoOmp3ay10aHVtYnByaW50OnNoYS0yNTY6X0ZwZmUyN0F1R21FbGpaRTlzMmx3MlVILXFyWkxSRk5yV2JKcldJZTRTSSIsImRhdGE6YXBwbGljYXRpb24vdmMrbGQranNvbjtiYXNlNjQsZXlKQVkyOXVkR1Y0ZENJNld5Sm9kSFJ3Y3pvdkwzZDNkeTUzTXk1dmNtY3Zibk12WTNKbFpHVnVkR2xoYkhNdmRqSWlYU3dpZEhsd1pTSTZXeUpXWlhKcFptbGhZbXhsUTNKbFpHVnVkR2xoYkNKZExDSnBjM04xWlhJaU9pSmthV1E2YW5kck9tVjVTbkpoVjFGcFQybEtNV050TkRaaFYxWXdXbXB3ZDFsWVNtaGlXRTAyWWpKR01XUkhaelpoYm1SeVRGaFNiMlJYTVdsalNFcHdZbTVSTm1NeWFHaE1WRWt4VG1wd2RsRnRVbTFrYlZwRVQxaG9OazFHT1VKVldGcFNUak5aTVUxWWJFUlhiRGw2WlVkd05VNTZWa05VU0VwSlpXc3hUMUpxYTNsUFYxVTBTV2wzYVdFelVqVkphbTlwVkRCMFVVbHBkMmxaTTBveVNXcHZhVkpYVVhsT1ZGVjRUMU5KYzBsdFJuTmFlVWsyU1d0V2ExSkdUa0pKYVhkcFpVTkpOa2xxVG1samJVNXpZakJKTkdGRVVrNVhiRlpKWW1zNVVWVkhiR3RUYlhkMFUycGtkVlZzUmtwWFNGSlVZVVp3TTFveU5XMWpiSEF4VkRJNGFXWlJJaXdpZG1Gc2FXUkdjbTl0SWpvaU1qQXlNeTB3Tmkwd04xUXlNVG94TkRveE5DNHhORGhhSWl3aVkzSmxaR1Z1ZEdsaGJGTjFZbXBsWTNRaU9uc2lhV1FpT2lKb2RIUndjem92TDNOMVltcGxZM1F1ZG1WdVpHOXlMbVY0WVcxd2JHVWlmWDA9Il0sIl9zZCI6WyJKQ19nWmpEVEs0dWJ1bmxmajBoQ0VTRWYtSF9CYWJoc2FuU0NGZUtjd2o4Il0sIl9zZF9hbGciOiJzaGEtMjU2IiwiaXNzIjoiZGlkOndlYjppc3N1ZXIuZXhhbXBsZSIsImlhdCI6MTY5NjYxODkxNCwiZXhwIjoxNzI4MjQxMzE0LCJjbmYiOnsiandrIjp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJhbGciOiJFUzI1NiIsIngiOiJZcDhlQ24yT2FkMG5sWXBWZWp6S3RuRVpXbElHQUg2S0xjVFhSaVdpcDU0IiwieSI6InlDVWFPY2JnT2lBbDJSeWNjYXhNVExBOURYd3VZZWxnQXg3eFUwcS1LZkkifX19.Wmd5xy4MjdvQILB7wk2eW37cV-VjOkuKqU-OwaTT4Ym_DxuCjjADLAeD1Pfu7SO8qzpYNRFnJXZr_NoLQGTHYg~WyJzOHI5bmdSYWc4dGprNEFfREkycTdnIiwgInR5cGUiLCBbIlZlcmlmaWFibGVQcmVzZW50YXRpb24iXV0~eyJhbGciOiJFUzI1NiIsInR5cCI6ImtiK2p3dCJ9.eyJub25jZSI6IllhaDJyM1p6NENTTHFRSWVweVZlcmciLCJhdWQiOiJkaWQ6d2ViOnZlcmlmaWVyLmV4YW1wbGUiLCJpYXQiOjE2OTY2MTg5MTR9.XiqOPH8wPdQsoUmUPB8rrEegQJbxTV1bxjJ3RqZQWJc-roqFU0gt3sR0vvc1t4YiaMpmqZSet4219Uh1QuEFqg

10.4 Data URIs

Example 17: JSON-LD Verifiable Credential
data:application/vc+ld+json;base64,eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOiJkaWQ6andrOmV5SnJhV1FpT2lKMWNtNDZhV1YwWmpwd1lYSmhiWE02YjJGMWRHZzZhbmRyTFhSb2RXMWljSEpwYm5RNmMyaGhMVEkxTmpwdlFtUm1kbVpET1hoNk1GOUJVWFpSTjNZMU1YbERXbDl6ZUdwNU56VkNUSEpJZWsxT1Jqa3lPV1U0SWl3aWEzUjVJam9pVDB0UUlpd2lZM0oySWpvaVJXUXlOVFV4T1NJc0ltRnNaeUk2SWtWa1JGTkJJaXdpZUNJNklqTmljbU5zYjBJNGFEUk5XbFZJYms5UVVHbGtTbXd0U2pkdVVsRkpXSFJUYUZwM1oyNW1jbHAxVDI4aWZRIiwidmFsaWRGcm9tIjoiMjAyMy0wNi0wN1QyMToxNDoxNC4xNDhaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJodHRwczovL3N1YmplY3QudmVuZG9yLmV4YW1wbGUifX0=
Example 18: JSON-LD Verifiable Presentation
data:application/vp+ld+json+json;base64,eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOiJkaWQ6andrOmV5SnJhV1FpT2lKMWNtNDZhV1YwWmpwd1lYSmhiWE02YjJGMWRHZzZhbmRyTFhSb2RXMWljSEpwYm5RNmMyaGhMVEkxTmpwdlFtUm1kbVpET1hoNk1GOUJVWFpSTjNZMU1YbERXbDl6ZUdwNU56VkNUSEpJZWsxT1Jqa3lPV1U0SWl3aWEzUjVJam9pVDB0UUlpd2lZM0oySWpvaVJXUXlOVFV4T1NJc0ltRnNaeUk2SWtWa1JGTkJJaXdpZUNJNklqTmljbU5zYjBJNGFEUk5XbFZJYms5UVVHbGtTbXd0U2pkdVVsRkpXSFJUYUZwM1oyNW1jbHAxVDI4aWZRIiwidmFsaWRGcm9tIjoiMjAyMy0wNi0wN1QyMToxNDoxNC4xNDhaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJodHRwczovL3N1YmplY3QudmVuZG9yLmV4YW1wbGUifX0=

10.5 Detached Payload

Issue

TODO add COSE Sign1 detached payload examples

A. References

A.1 Normative references

[json-ld11]
JSON-LD 1.1. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 16 July 2020. W3C Recommendation. URL: https://www.w3.org/TR/json-ld11/
[MULTIPLE-SUFFIXES]
Media Types with Multiple Suffixes. Manu Sporny; Amy Guy. IETF. Internet-Draft. URL: https://datatracker.ietf.org/doc/draft-ietf-mediaman-suffixes/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC6838]
Media Type Specifications and Registration Procedures. N. Freed; J. Klensin; T. Hansen. IETF. January 2013. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc6838
[rfc7159]
The JavaScript Object Notation (JSON) Data Interchange Format. T. Bray, Ed.. IETF. March 2014. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7159
[rfc7515]
JSON Web Signature (JWS). M. Jones; J. Bradley; N. Sakimura. IETF. May 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7515
[RFC7517]
JSON Web Key (JWK). M. Jones. IETF. May 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7517
[RFC7519]
JSON Web Token (JWT). M. Jones; J. Bradley; N. Sakimura. IETF. May 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7519
[rfc7800]
Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs). M. Jones; J. Bradley; H. Tschofenig. IETF. April 2016. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7800
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[rfc8949]
Concise Binary Object Representation (CBOR). C. Bormann; P. Hoffman. IETF. December 2020. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc8949
[RFC9052]
CBOR Object Signing and Encryption (COSE): Structures and Process. J. Schaad. IETF. August 2022. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc9052
[SD-JWT]
Selective Disclosure for JWTs (SD-JWT). Daniel Fett; Kristina Yasuda; Brian Campbell. IETF. Internet-Draft. URL: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-selective-disclosure-jwt-05
[SD-JWT-VC]
SD-JWT-based Verifiable Credentials (SD-JWT VC). Oliver Terbu; Daniel Fett. IETF. Internet-Draft. URL: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-sd-jwt-vc-00
[VC-DATA-MODEL]
Verifiable Credentials Data Model v1.1. Manu Sporny; Grant Noble; Dave Longley; Daniel Burnett; Brent Zundel; Kyle Den Hartog. W3C. 3 March 2022. W3C Recommendation. URL: https://www.w3.org/TR/vc-data-model/

A.2 Informative references

[DID-CORE]
Decentralized Identifiers (DIDs) v1.0. Manu Sporny; Amy Guy; Markus Sabadello; Drummond Reed. W3C. 19 July 2022. W3C Recommendation. URL: https://www.w3.org/TR/did-core/
[INFRA]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[JOSE-REGISTRIES]
The JSON Object Signing and Encryption (JOSE) Registries. The Internet Assigned Numbers Authority. The Internet Assigned Numbers Authority. W3C Recommendation. URL: https://www.iana.org/assignments/jose
[RFC3986]
Uniform Resource Identifier (URI): Generic Syntax. T. Berners-Lee; R. Fielding; L. Masinter. IETF. January 2005. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc3986
[RFC5785]
Defining Well-Known Uniform Resource Identifiers (URIs). M. Nottingham; E. Hammer-Lahav. IETF. April 2010. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc5785
[RFC7638]
JSON Web Key (JWK) Thumbprint. M. Jones; N. Sakimura. IETF. September 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7638
[URL]
URL Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://url.spec.whatwg.org/
[VC-DATA-MODEL-2.0]
Verifiable Credentials Data Model v2.0. Manu Sporny; Orie Steele; Michael Jones; Gabe Cohen; Oliver Terbu. W3C. 29 September 2023. W3C Working Draft. URL: https://www.w3.org/TR/vc-data-model-2.0/
[WCAG21]
Web Content Accessibility Guidelines (WCAG) 2.1. Michael Cooper; Andrew Kirkpatrick; Joshue O'Connor; Alastair Campbell. W3C. 21 September 2023. W3C Recommendation. URL: https://www.w3.org/TR/WCAG21/
[XMLSCHEMA11-2]
W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes. David Peterson; Sandy Gao; Ashok Malhotra; Michael Sperberg-McQueen; Henry Thompson; Paul V. Biron et al. W3C. 5 April 2012. W3C Recommendation. URL: https://www.w3.org/TR/xmlschema11-2/