diff --git a/index.html b/index.html index 2234202..cc8dbe5 100644 --- a/index.html +++ b/index.html @@ -71,12 +71,7 @@ // if you have authors as well as editors. only "name" is // required. Same format as editors. authors: [], - formerEditors: [{ - name: "Orie Steele", - company: "Transmute", - companyURL: "https://transmute.industries", - w3cid: 109171, - }], + formerEditors: [], maxTocLevel: 3, inlineCSS: true, @@ -198,6 +193,105 @@

Introduction

asymmetric encryption algorithms.

+
+
+

Conformance Classes

+

+ A conforming JWS document is one that conforms to all of the + "MUST" statements in Section . +

+

+ A conforming JWS issuer implementation produces + [=conforming JWS documents=] and MUST secure them as described in Section + . +

+ A conforming JWS verifier implementation verifies + [=conforming JWS documents=] as described in Section + . +

+

+ A conforming SD-JWT document is one that conforms to all of the + "MUST" statements in Section . +

+

+ A conforming SD-JWT issuer implementation produces + [=conforming SD-JWT documents=] and MUST secure them as described in Section + . +

+ A conforming SD-JWT verifier implementation verifies + [=conforming SD-JWT documents=] as described in Section + . +

+

+ A conforming COSE document is one that conforms to all of the + "MUST" statements in Section . +

+

+ A conforming COSE issuer implementation produces + [=conforming COSE documents=] and MUST secure them as described in Section + . +

+

+ A conforming COSE verifier implementation verifies + [=conforming COSE documents=] as described in Section + . +

+
+
+

Securing Verifiable Credentials

+

The describes + the approach taken by JSON Web Tokens to secure JWT Claims Sets as applying an + external proof. +

+

The normative statements in Securing + Mechanisms apply to securing + application/vc-ld+jwt and + application/vp-ld+jwt, + application/vc-ld+sd-jwt and + application/vp-ld+sd-jwt, + as well as + application/vc-ld+cose and + application/vp-ld+cose. +

+

+ JSON Web Token implementers are advised to review Implementation + Requirements. +

+

+ Issuers, Holders, and Verifiers MUST understand the + JSON Web Token header parameter setting + "alg": "none" when securing [[VC-DATA-MODEL-2.0]] + with JSON Web Tokens. + When content types from [[VC-DATA-MODEL-2.0]] are secured using + JSON Web Tokens, the header parameter setting "alg": "none", + MUST be used to communicate that a JWT Claims Set that comprises a + Verifiable Credential or a Verifiable Presentation has no + integrity protection. + When a JWT Claims Set that comprises 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 Presentations are not + required to be secured nor integrity protected, nor to contain a + proof member. +

+

+ Issuers, Holders, and Verifiers of Verifiable Credentials and/or + Verifiable Presentations MUST ignore all, and MUST NOT produce any, + JWT Claims Sets that have no integrity protection. +

+

+ The JWT Claim Names vc and vp + MUST NOT be present in any JWT Claims Set that comprises a + Verifiable Credential or a Verifiable Presentation. +

+
+ +
+
@@ -846,98 +940,6 @@

COSE Header Parameters and CWT Claims

Key Discovery

- -

- When iss is absent and the issuer - is identified as a DID Subject, - the kid MUST be an absolute DID URL. -

-
-{
-  "issuer": "did:example:123"
-  // ...
-}
-
-
-{
-  "alg": "ES384",
-  "kid": "did:example:123#key-456
-}
-
-

- When iss is absent, and the holder - is identified as a DID Subject, - the kid MUST be an absolute DID URL. -

-
-{
-  "holder": "did:example:abc"
-  // ...
-}
-
-
-{
-  "alg": "ES384",
-  "kid": "did:example:abc#key-456
-}
-
- - -

- When iss is absent, and the issuer is - identified as a [[URL]], - the kid MUST be an absolute [[URL]] to a verification method listed in a controller document. -

- -
-{
-  "issuer": {
-    "id": "https://university.example/issuers/565049"
-  }
-  // ...
-}
-
-
-{
-  "alg": "ES384",
-  "kid": "https://university.example/issuers/565049#key-123
-}
-
- -

- When the holder is identified as a [[URL]], - and iss is absent, - the kid MUST be an absolute [[URL]] to a verification method listed in a controller document. -

-
-{
-  "holder": {
-    "id": "https://university.example/issuers/565049"
-  }
-  // ...
-}
-
-
-{
-  "alg": "ES384",
-  "kid": "https://university.example/issuers/565049#key-123
-}
-
- - - -

- When iss is present and is a [[URL]], - the kid MUST match a key discovered via a JWT Issuer Metadata Request, - as described in [[SD-JWT-VC]]. -

- -

- This normative statement depends on the IETF OAuth working group draft [[SD-JWT-VC]]. - This feature is at risk and will be removed from the specification if at least - two independent, interoperable implementations are not demonstrated. -

-

To complete the verification process, a verifier needs to obtain the cryptographic keys used to @@ -963,7 +965,7 @@

kid

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

@@ -1010,94 +1012,103 @@

cnf

verification process.

- Use of a proof-of-possession key provided by the Holder to the Issuer - to establish a cryptographic binding to the Holder in the Verifiable Credential - that is verifiable by the Verifier in the Verifiable Presentation is RECOMMENDED. + Use of a proof-of-possession key provided by the [=Holder=] to the [=Issuer=] + to establish a cryptographic binding to the [=Holder=] in the [=Verifiable Credential=] + that is verifiable by the [=Verifier=] in the [=Verifiable Presentation=] is RECOMMENDED.

Well-Known URIs

+

+ 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-VC]]. +

-
-

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-VC]]. -

+

+ This normative statement depends on the IETF OAuth working group draft [[SD-JWT-VC]]. + This feature is at risk and will be removed from the specification if at least + two independent, interoperable implementations are not demonstrated. +

-

- This normative statement depends on the IETF OAuth working group draft [[SD-JWT-VC]]. - This feature is at risk and will be removed from the specification if at least - two independent, interoperable implementations are not demonstrated. -

-
+
+        {
+          "alg": "EdDSA",
+          "kid": "https://vendor.example/issuers/42/keys/urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs"
+        }
+        
-

Using Controller Documents

+

Using Controller Documents

When using [=controller documents=] with this specification, the following requirements apply.

The value of the `type` property of the verification method MUST be JsonWebKey. -

-

- Verification material MUST 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 format - from a DID URL or controller document. -

-
- +

+

+ Verification material MUST 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 format + from a DID URL or [=controller document=]. +

+ +

+ When iss is absent, and the issuer is + identified as a [[URL]], + the kid MUST be an absolute [[URL]] to a + verification method listed in a [=controller document=] or + a DID Document. +

-
-
-

Conformance Classes

-

- A conforming JWS document is one that conforms to all of the - "MUST" statements in Section . -

-

- A conforming JWS issuer implementation produces - [=conforming JWS documents=] and MUST secure them as described in Section - . -

- A conforming JWS verifier implementation verifies - [=conforming JWS documents=] as described in Section - . -

-

- A conforming SD-JWT document is one that conforms to all of the - "MUST" statements in Section . -

-

- A conforming SD-JWT issuer implementation produces - [=conforming SD-JWT documents=] and MUST secure them as described in Section - . -

- A conforming SD-JWT verifier implementation verifies - [=conforming SD-JWT documents=] as described in Section - . -

-

- A conforming COSE document is one that conforms to all of the - "MUST" statements in Section . -

-

- A conforming COSE issuer implementation produces - [=conforming COSE documents=] and MUST secure them as described in Section - . -

-

- A conforming COSE verifier implementation verifies - [=conforming COSE documents=] as described in Section - . -

+

+ When using [[URL]] identifiers, the kid is RECOMMENDED to be + an absolute [[URL]] that includes a JWK Thumbprint URI + as defined in [[RFC7638]]. For example: + https://vendor.example/issuers/42/keys/urn:ietf:params:oauth:jwk-thumbprint:sha-256:NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs +

+ +
+{
+  "issuer": {
+    "id": "https://university.example/issuers/565049"
+  }
+  // ...
+}
+
+
+{
+  "alg": "ES384",
+  "kid": "https://university.example/issuers/565049#key-123
+}
+
+ +

+ When the holder is + identified as a [[URL]], + and iss is absent, + the kid MUST be an absolute [[URL]] to a + verification method listed in a [=controller document=]. +

+
+{
+  "holder": {
+    "id": "https://university.example/issuers/565049"
+  }
+  // ...
+}
+
+
+{
+  "alg": "ES384",
+  "kid": "https://university.example/issuers/565049#key-123
+}
+

Securing Verifiable Credentials

@@ -1107,17 +1118,17 @@

Securing Verifiable Credentials

claims by applying an enveloping proof.

- This specification defines how to secure different data structures + This specification defines how to secure different data structures using various enveloping proof mechanisms:

JSON Web Tokens (JWTs):
-
JWTs secure JSON Web Token Claim Sets. These are JSON objects +
JWTs secure JSON Web Token Claim Sets. These are JSON objects containing claims about an entity (typically the subject of the JWT).
Selective Disclosure JWTs (SD-JWTs):
SD-JWTs secure JSON Claim Sets, similar to JWTs, but with added - selective disclosure capabilities. This allows for parts of the + selective disclosure capabilities. This allows for parts of the claim set to be selectively revealed or withheld.
- +
CBOR Object Signing and Encryption (COSE):
COSE secures CBOR (Concise Binary Object Representation) data structures. CBOR is a binary data format that is more compact than @@ -1128,9 +1139,9 @@

Securing Verifiable Credentials

  • When using JWTs, the Verifiable Credential or Presentation is encoded as a JSON Web Token Claim Set.
  • -
  • When using SD-JWTs, the Verifiable Credential or Presentation +
  • When using SD-JWTs, the Verifiable Credential or Presentation is encoded as a JSON Claim Set with selective disclosure features.
  • -
  • When using COSE, the Verifiable Credential or Presentation is +
  • When using COSE, the Verifiable Credential or Presentation is encoded as a CBOR data structure.

@@ -1187,7 +1198,7 @@

JWT Format and Requirements

SD-JWT Format and Requirements

- This specification uses Selective Disclosure for JWTs (SD-JWT) as + This specification uses Selective Disclosure for JWTs (SD-JWT) as defined in the IETF draft [[SD-JWT]]. Implementers should refer to this draft for the full details of the SD-JWT format and processing requirements. @@ -1206,12 +1217,11 @@

SD-JWT Format and Requirements

containing the digest of the disclosed claim, the claim name, and the claim value. -
  • Each disclosable claim is combined with a salt value +
  • Each disclosable claim is combined with a salt value before hashing to prevent dictionary attacks.
  • -
    @@ -1942,12 +1952,12 @@

    Algorithm for Verifying a Credential or Presentation Secured w vp-ld+jwt
  • - inputDocument: the verifiable credential secured as a JWT [[RFC7519]] + inputDocument: the [=verifiable credential=] secured as a JWT [[RFC7519]]
  • - Upon receipt of the verifiable credential or presentation secured as a JWT - [[RFC7519]], the holder or verifier follows this algorithm: + Upon receipt of the [=verifiable credential=] or [=verifiable presentation=] secured as a JWT + [[RFC7519]], the [=holder=] or [=verifier=] follows this algorithm:

    1. @@ -2003,7 +2013,7 @@

      Algorithm for Verifying a Credential or Presentation Secured

    2. - Upon receipt of the verifiable credential or presentation secured with + Upon receipt of the [=verifiable credential=] or [=verifiable presentation=] secured with [[SD-JWT]], the holder or verifier follows this algorithm:

        @@ -2061,13 +2071,13 @@

        Algorithm for Verifying a Credential or Presentation Secured w vp-ld+cose
      1. - inputDocument: the verifiable credential or verifiable presentation + inputDocument: the [=verifiable credential=] or [=verifiable presentation=] secured with [[[RFC9052]]]
      2. - Upon receipt of the verifiable credential or presentation secured with - [[RFC9052]], the holder or verifier follows this algorithm: + Upon receipt of the [=verifiable credential=] or [=verifiable presentation=] secured with + [[RFC9052]], the [=holder=] or [=verifier=] follows this algorithm:

        1. @@ -2119,7 +2129,7 @@

          Validation Algorithm

          All claims expected for the typ MUST be present. - All claims that are understood MUST be evaluated according the verifier's validation policies. + All claims that are understood MUST be evaluated according the [=verifier=]'s validation policies. All claims that are not understood MUST be ignored.

          @@ -2142,14 +2152,24 @@

          Validation Algorithm

          - Based on the validation policy of the verifier, the type of credentials, and + Based on the validation policy of the verifier, the type of [=credentials=], and the type of securing mechanism, additional validation checks MAY be applied. - For example, dependencies between multiple credentials, ordering or timing - information associated with multiple credentials, and/or multiple presentations - could cause an otherwise valid credential or presentation to be considered + For example, dependencies between multiple [=credentials=], ordering or timing + information associated with multiple credentials, and/or multiple [=presentations=] + could cause an otherwise valid [=credential=] or [=presentation=] to be considered invalid.

    + +
    +

    Acknowledgements

    + +

    +The Working Group thanks Orie Steele for his substantive intellectual and content +contributions to this specification. It wouldn't be the same without them. +

    +
    +