You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
which is useful for long-term archiving and multi-signatures.
108
108
However, SD-JWT itself does not define
@@ -113,7 +113,7 @@ extensibility model as basis for representing Verifiable Digital Credentials wit
113
113
payloads. These Verifiable Digital Credentials are called SD-JWT VCs. The use of
114
114
selective disclosure in SD-JWT VCs is optional.
115
115
116
-
SD-JWTs VC can contain claims that are registered in "JSON Web Token Claims"
116
+
SD-JWT VCs can contain claims that are registered in "JSON Web Token Claims"
117
117
registry as defined in [@!RFC7519], as well as public and
118
118
private claims.
119
119
@@ -159,7 +159,7 @@ This section defines encoding, validation and processing rules for SD-JWT VCs.
159
159
## Media Type
160
160
161
161
SD-JWT VCs compliant with this specification MUST use the media type
162
-
`application/dc+sd-jwt`, where the base base subtype name `dc` stands for "digital credential".
162
+
`application/dc+sd-jwt`, where the base subtype name `dc` stands for "digital credential".
163
163
164
164
## Data Format
165
165
@@ -372,6 +372,9 @@ If Key Binding is required (refer to the security considerations in Section 9.5
372
372
according to Section 7.3 of [@!RFC9901]. To verify
373
373
the KB-JWT, the `cnf` claim of the SD-JWT MUST be used.
374
374
375
+
After the processed SD-JWT payload is available to the recipient, a Holder or Verifier MAY process Type Metadata as described in (#processing-type-metadata).
376
+
If Type Metadata is processed, the rules defined in (#processing-type-metadata) apply and can require the SD-JWT VC to be rejected.
377
+
375
378
If there are no selectively disclosable claims, there is no need to process the
376
379
`_sd` claim nor any Disclosures.
377
380
@@ -401,7 +404,7 @@ To enable different trust anchoring systems or key resolution methods, separate
401
404
may define additional key discovery and validation mechanisms that complement or override those defined above; however, the specifics of such mechanisms are out of scope for this specification.
402
405
See (#ecosystem-verification-rules) for related security considerations.
403
406
404
-
If a recipient cannot validate that the public verification key corresponds the Issuer of the Issuer-signed JWT using a permitted key discovery and validation mechanism, the SD-JWT VC MUST be rejected.
407
+
If a recipient cannot validate that the public verification key corresponds to the Issuer of the Issuer-signed JWT using a permitted key discovery and validation mechanism, the SD-JWT VC MUST be rejected.
@@ -535,6 +538,7 @@ This section defines Type Metadata that can be associated with a type of an SD-J
535
538
consistent with the intent of the provider of the Type Metadata.
536
539
537
540
Type Metadata can be retrieved as described in (#retrieving-type-metadata).
541
+
Ecosystems can define rules for a `vct` value that specify whether Type Metadata is to be processed and which Type Metadata retrieval methods Consumers are expected to support.
538
542
539
543
## Type Metadata Example {#type-metadata-example}
540
544
@@ -606,6 +610,9 @@ SD-JWT VC payload is identical to the `vct` value in the reference to the Type
606
610
Metadata (either in the SD-JWT VC itself or in an `extends` property in a Type
607
611
Metadata document).
608
612
613
+
If the claim `vct#integrity` is present in the SD-JWT VC, its value
614
+
MUST be an "integrity metadata" string as defined in (#document-integrity).
615
+
609
616
The following sections define methods to retrieve Type Metadata.
610
617
611
618
### From a URL in the `vct` Claim {#retrieval-from-vct-claim}
@@ -618,9 +625,6 @@ A successful response MUST use an HTTP `200` status code and return a JSON
618
625
object as defined in (#type-metadata-format) using the `application/json` content type.
619
626
An error response MUST use the applicable HTTP status code value.
620
627
621
-
If the claim `vct#integrity` is present in the SD-JWT VC, its value
622
-
`vct#integrity` MUST be an "integrity metadata" string as defined in (#document-integrity).
623
-
624
628
### From a Registry {#retrieval-from-registry}
625
629
626
630
A Consumer MAY use a registry to retrieve Type Metadata for a SD-JWT VC type,
@@ -639,7 +643,7 @@ retrieve Type Metadata based on a URN in the `vct` claim.
639
643
### From a Local Cache {#retrieval-from-local-cache}
640
644
641
645
A Consumer MAY cache Type Metadata for a SD-JWT VC type. If a hash for integrity
642
-
protection is present in the Type Metadata as defined in (#document-integrity), the Consumer MAY assume that the Type Metadata is static and can be cached
646
+
protection is present for the Type Metadata as defined in (#document-integrity), the Consumer MAY assume that the Type Metadata is static and can be cached
643
647
indefinitely. Otherwise, the Consumer MUST use the `Cache-Control`
644
648
header of the HTTP response to determine how long the metadata can be cached.
645
649
@@ -825,6 +829,28 @@ Each object contains the following properties:
825
829
type metadata. It MUST consist of only alphanumeric characters and underscores
826
830
and MUST NOT start with a digit. This property is OPTIONAL.
827
831
832
+
When a Consumer processes Type Metadata for an SD-JWT VC, the `claims` property and each claim metadata object MUST conform to the structure defined in this section and its subsections; otherwise, claim metadata processing fails.
833
+
Properties that are not understood are ignored as defined in (#type-metadata-format).
834
+
835
+
When a Holder or Verifier processes claim metadata for an SD-JWT VC, it MUST validate the processed SD-JWT payload against the claim metadata in the Type Metadata after applying any extensions as described in (#claim-metadata-extends).
836
+
Claim metadata validation fails if any of the following applies:
837
+
838
+
* Processing a `path` results in an error as defined in (#claim-path).
839
+
* The Holder or Verifier can determine that a claim addressed by a claim metadata object with `mandatory` set to `true` was not included in the issued credential (see (#claim-mandatory-metadata)).
840
+
* A claim selected by a claim metadata object's `path` is not selectively disclosable as required by its `sd` value (see (#claim-selective-disclosure-metadata)).
841
+
842
+
Whether a mandatory claim was included can be determined by a Holder that has all Disclosures by evaluating the `path` against the complete Unsecured Payload.
843
+
A Verifier MUST NOT treat absence of a selectively disclosable claim from a presentation as evidence that the Issuer failed to include a mandatory claim.
844
+
845
+
When evaluating a `path` for this validation, the following applies:
846
+
847
+
* A claim is selectively disclosable at a path if it is directly represented as a Disclosure for an object property or array element in the SD-JWT; it is not selectively disclosable solely because one of its ancestors is.
848
+
* Non-negative integer and `null` components of a `path` are evaluated against the array as issued, counting array elements that are not disclosed and are therefore absent from the processed SD-JWT payload (see (#claim-path)).
849
+
* If a `path` selects an array element that is not disclosed, that element was included in the issued credential and is selectively disclosable; its contents are unknown, so any deeper `path` components select no claims.
850
+
851
+
Performing this validation requires the Holder or Verifier to retain sufficient information during SD-JWT processing, including the positions of array elements that are not disclosed.
852
+
See (#processing-type-metadata) for the consequences of claim metadata processing and validation failures.
853
+
828
854
### Claim Path {#claim-path}
829
855
830
856
The `path` property MUST be a non-empty array of strings, `null` values, or
@@ -884,7 +910,7 @@ In detail, the array components of `path` are processed from left to right as fo
884
910
1. If the `path` component is a string, select the element in the respective
885
911
key in the currently selected element(s). If any of the currently
886
912
selected element(s) is not an object, abort processing and return an
887
-
error. If the key does not exist in any element currently selected,
913
+
error. If the key does not exist in an element currently selected,
888
914
remove that element from the selection.
889
915
2. If the `path` component is `null`, select all elements of the currently
890
916
selected array(s). If any of the currently selected element(s) is not an
@@ -894,8 +920,8 @@ In detail, the array components of `path` are processed from left to right as fo
894
920
currently selected element(s) is not an array, abort processing and
895
921
return an error. If the index does not exist in a selected array, remove
896
922
that array from the selection.
897
-
3. If the set of elements currently selected is empty, abort processing and
898
-
return an error.
923
+
3. If the set of elements currently selected is empty, the result of processing
924
+
is the empty set.
899
925
900
926
The result of the processing is the set of elements to which the respective
901
927
claim metadata applies.
@@ -1047,6 +1073,17 @@ In this example, the child type inherits the `name` claim metadata from the base
1047
1073
```
1048
1074
Figure: Effective Claim Metadata for Child Type {#effective-claim-metadata-child-type}
1049
1075
1076
+
## Processing Type Metadata {#processing-type-metadata}
1077
+
1078
+
This specification does not require every Holder or Verifier to process Type Metadata; whether Type Metadata is processed is determined by the Holder's or Verifier's policy and, where applicable, ecosystem rules.
1079
+
A Holder or Verifier typically processes Type Metadata after the processed SD-JWT payload is available, as described in (#vc-sd-jwt-verification-and-processing).
1080
+
1081
+
If Type Metadata is processed, it MUST be fully processed, including any extended types (see (#extending-type-metadata)), before its contents are used for validation, display, rendering, or acceptance decisions.
1082
+
If the Type Metadata after applying any extensions contains claim metadata, the Holder or Verifier MUST process and validate the claim metadata as defined in (#claim-metadata).
1083
+
If claim metadata processing or validation fails, the SD-JWT VC MUST be rejected.
1084
+
1085
+
If Type Metadata processing is required by policy or ecosystem rules and the Holder or Verifier cannot retrieve or process the applicable Type Metadata, the SD-JWT VC MUST be rejected.
1086
+
1050
1087
1051
1088
# Integrity of Referenced Documents {#document-integrity}
1052
1089
@@ -1065,8 +1102,8 @@ Type Metadata MAY be accompanied by a respective item suffixed with
1065
1102
*`uri` as used in three places in (#rendering-metadata).
1066
1103
1067
1104
The value MUST be an "integrity metadata" string as defined in Section 3 of
1068
-
[@!W3C.SRI]. If an integrity property is present for a particular claim, the
1069
-
Consumer of the respective document MUST verify the integrity of the retrieved
1105
+
[@!W3C.SRI]. If an integrity property is present for a claim or metadata property, the
1106
+
Consumer of the referenced document MUST verify the integrity of the retrieved
1070
1107
document as defined in Section 3.3.5 of [@!W3C.SRI].
1071
1108
1072
1109
@@ -1136,7 +1173,7 @@ described in (#privacy-preserving-retrieval-of-type-metadata).
1136
1173
1137
1174
## Risks Associated with Textual Information {#risks-textual-information}
1138
1175
1139
-
Some claims in the SD-JWT VC and properties in the Type Metadata, e.g., `display`, allows issuers and providers of metadata to
1176
+
Some claims in the SD-JWT VC and properties in the Type Metadata, e.g., `display`, allow issuers and providers of metadata to
1140
1177
specify human-readable information. These can contain arbitrary textual information that
1141
1178
may be displayed to end users and developers. As such, any consuming application MUST ensure that maliciously
1142
1179
crafted information cannot be used to compromise the security of the application
@@ -1675,6 +1712,13 @@ for their contributions (some of which substantial) to this draft and to the ini
1675
1712
1676
1713
-17
1677
1714
1715
+
* Clarified when optional Type Metadata processing occurs and how ecosystem rules can require it, in a new Processing Type Metadata section.
1716
+
* Require rejection when processed claim metadata is malformed or when `mandatory` or `sd` claim metadata does not match the credential.
1717
+
* Clarified claim metadata validation for presentations: a Verifier must not treat absence of a selectively disclosable claim as a missing mandatory claim, and array positions in `path` account for array elements that are not disclosed.
1718
+
* Moved the `vct#integrity` requirement to the general Type Metadata retrieval section.
1719
+
*`path` processing yields an empty set instead of an error when no claims are selected.
1720
+
* Updated the referenced document integrity wording.
0 commit comments