Skip to content

Commit c95bc07

Browse files
danielfettbc-piSakurann
authored
Address Denis' comments (#481)
* Address Denis' comments * Apply suggestions from Brian's review Co-authored-by: Brian Campbell <[email protected]> * Add changelog entry * Sakurann's suggestion Co-authored-by: Kristina <[email protected]> * fine with keeping it or a suitable replacement --------- Co-authored-by: Brian Campbell <[email protected]> Co-authored-by: Kristina <[email protected]>
1 parent af66b9a commit c95bc07

File tree

1 file changed

+25
-25
lines changed

1 file changed

+25
-25
lines changed

draft-ietf-oauth-selective-disclosure-jwt.md

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ Issuer:
137137
: An entity that creates SD-JWTs.
138138

139139
Holder:
140-
: An entity that received SD-JWTs from the Issuer and has control over them. In the context of this document, the term may refer to the actual user, the supporting hardware and software in their possession, or both.
140+
: An entity that received SD-JWTs from the Issuer and has control over them. In the context of this document, the term may refer to the actual user, the supporting hardware and software in their possession, or both.
141141

142142
Verifier:
143143
: An entity that requests, checks, and extracts the claims from an SD-JWT with its respective Disclosures.
@@ -204,7 +204,7 @@ The Key Binding JWT encodes a signature by the Holder's private key over
204204

205205
* a hash of the SD-JWT,
206206
* a nonce to ensure the freshness of the signature, and
207-
* an audience value to indicate the intended audience for the document.
207+
* an audience value to indicate the intended Verifier for the document.
208208

209209
Details of the format of Key Binding JWTs are described in (#kb-jwt).
210210

@@ -326,7 +326,7 @@ The same digest value MUST NOT appear more than once in the SD-JWT.
326326

327327
Application and profiles of SD-JWT SHOULD be explicitly typed. See (#explicit_typing) for more details.
328328

329-
It is the Issuer who decides which claims are selectively disclosable and which are not. End-User claims MAY be included as plaintext as well, e.g., if hiding the particular claims from the Verifier is not required in the intended use case. See (#sd-validity-claims) for considerations on making validity-controlling claims such as `exp` selectively disclosable.
329+
It is the Issuer who decides which claims are selectively disclosable by the Holder and which are not. Claims MAY be included as plaintext as well, e.g., if hiding the particular claims from the Verifier is not required in the intended use case. See (#sd-validity-claims) for considerations on making validity-controlling claims such as `exp` selectively disclosable.
330330

331331
Claims that are not selectively disclosable are included in the SD-JWT in plaintext just as they would be in any other JSON structure.
332332

@@ -658,14 +658,16 @@ in (#hash_function_claim)).
658658

659659
### Validating the Key Binding JWT
660660

661-
The Verifier MUST ensure that the key with which it validates the signature on
661+
Whether to require Key Binding is up to the Verifier's policy, based on the set
662+
of trust requirements such as trust frameworks it belongs to. See
663+
(#key_binding_security) for security considerations.
664+
665+
If the Verifier requires Key Binding, the Verifier MUST ensure that the key with which it validates the signature on
662666
the Key Binding JWT is the key specified in the SD-JWT as the Holder's public
663667
key. For example, if the SD-JWT contains a `cnf` value with a `jwk` member, the
664668
Verifier would parse the provided JWK and use it to verify the Key Binding JWT.
665669

666-
Whether to require Key Binding is up to the Verifier's policy, based on the set
667-
of trust requirements such as trust frameworks it belongs to. See
668-
(#key_binding_security) for security considerations.
670+
Details of the Validation process are defined in (#verifier_verification).
669671

670672

671673
# Example SD-JWT {#main-example}
@@ -686,7 +688,7 @@ In this example, the following decisions were made by the Issuer in constructing
686688

687689
* The `nationalities` array is always visible, but its contents are selectively disclosable.
688690
* The `sub` element as well as essential verification data (`iss`, `exp`, `cnf`, etc.) are always visible.
689-
* All other End-User claims are selectively disclosable.
691+
* All other claims are selectively disclosable.
690692
* For `address`, the Issuer is using a flat structure, i.e., all the claims
691693
in the `address` claim can only be disclosed in full. Other options are
692694
discussed in (#nested_data).
@@ -833,17 +835,15 @@ an SD-JWT:
833835
If any step fails, the SD-JWT is not valid, and processing MUST be aborted. Otherwise, the JSON document resulting from the preceding processing and verification steps, herein referred to as the processed SD-JWT payload, can be made available to the application to be used for its intended purpose.
834836

835837
Note that these processing steps do not yield any guarantees to the Holder about having received a complete set of Disclosures. That is, for some digest values in the Issuer-signed JWT (which are not decoy digests) there may be no corresponding Disclosures, for example, if the message from the Issuer was truncated.
836-
837-
It is up to the Holder how to maintain the mapping between the Disclosures and the plaintext claim values to be able to display them to the End-User when needed.
838-
838+
It is up to the Holder how to maintain the mapping between the Disclosures and the plaintext claim values to be able to display them to the user when needed.
839839
## Processing by the Holder {#holder_verification}
840840

841841
The Issuer MUST provide the Holder an SD-JWT, not an SD-JWT+KB. If the Holder
842842
receives an SD-JWT+KB, it MUST be rejected.
843843

844844
For presentation to a Verifier, the Holder MUST perform the following (or equivalent) steps:
845845

846-
1. Decide which Disclosures to release to the Verifier, obtaining proper End-User consent if necessary.
846+
1. Decide which Disclosures to release to the Verifier, obtaining proper consent if necessary.
847847
2. Verify that each selected Disclosure satisfies one of the two following conditions:
848848
1. The hash of the Disclosure is contained in the Issuer-signed JWT claims
849849
2. The hash of the Disclosure is contained in the claim value of another selected Disclosure
@@ -1235,7 +1235,7 @@ about the credentials presented to it. Legal requirements could further enforce
12351235
Issuer/Verifier unlinkability. Similarly, a large service provider issuing credentials might implicitly pressure
12361236
Verifiers into collusion by incentivizing participation in their larger ecosystem.
12371237
Deployers of SD-JWT must be aware of these potential power dynamics,
1238-
mitigate them as much as possible, and/or make the risks transparent to the End-User.
1238+
mitigate them as much as possible, and/or make the risks transparent to the user.
12391239

12401240
Contrary to that, Issuer/Verifier unlinkability with an honest Verifier can generally be achieved.
12411241
However, a callback from the Verifier to the Issuer, such as a revocation check, could potentially
@@ -1255,24 +1255,23 @@ time period considered appropriate (e.g., randomize `iat` within the last 24
12551255
hours and calculate `exp` accordingly) or rounded (e.g., rounded down to the
12561256
beginning of the day).
12571257

1258-
## Storage of Signed User Data
1258+
## Storage of User Data
12591259

1260-
Wherever End-User data is stored, it represents a potential
1260+
Wherever user data is stored, it represents a potential
12611261
target for an attacker. This target can be of particularly
12621262
high value when the data is signed by a trusted authority like an
12631263
official national identity service. For example, in OpenID Connect [@?OpenID.Core],
12641264
signed ID Tokens can be stored by Relying Parties. In the case of
12651265
SD-JWT, Holders have to store SD-JWTs,
12661266
and Issuers and Verifiers may decide to do so as well.
12671267

1268-
Not surprisingly, a leak of such data risks revealing private data of End-Users
1269-
to third parties. Signed End-User data, the authenticity of which
1268+
Not surprisingly, a leak of such data risks revealing private data of users
1269+
to third parties. Signed user data, the authenticity of which
12701270
can be easily verified by third parties, further exacerbates the risk.
12711271
As discussed in (#key_binding_security), leaked
12721272
SD-JWTs may also allow attackers to impersonate Holders unless Key
12731273
Binding is enforced and the attacker does not have access to the
1274-
Holder's cryptographic keys. Altogether, leaked SD-JWT credentials may have
1275-
a high monetary value on black markets.
1274+
Holder's cryptographic keys.
12761275

12771276
Due to these risks, systems implementing SD-JWT SHOULD be designed to minimize
12781277
the amount of data that is stored. All involved parties SHOULD store SD-JWTs
@@ -1285,13 +1284,13 @@ Disclosures if they contain privacy-sensitive data.
12851284
Holders SHOULD store SD-JWTs only in
12861285
encrypted form, and, wherever possible, use hardware-backed encryption
12871286
in particular for the private Key Binding key. Decentralized storage
1288-
of data, e.g., on End-User devices, SHOULD be preferred for End-User
1287+
of data, e.g., on user devices, SHOULD be preferred for user
12891288
credentials over centralized storage. Expired SD-JWTs SHOULD be deleted
12901289
as soon as possible.
12911290

12921291
After Verification, Verifiers SHOULD NOT store the Issuer-signed JWT or the
12931292
respective Disclosures if they contain privacy-sensitive data. It may be
1294-
sufficient to store the result of the verification and any End-User data that is
1293+
sufficient to store the result of the verification and any user data that is
12951294
needed for the application.
12961295

12971296

@@ -1300,7 +1299,7 @@ needed for the application.
13001299

13011300
If the SD-JWT is transmitted over an insecure
13021301
channel during issuance or presentation, an adversary may be able to
1303-
intercept and read the End-User's personal data or correlate the information with previous uses of the same SD-JWT.
1302+
intercept and read the user's personal data or correlate the information with previous uses of the same SD-JWT.
13041303

13051304
Usually, transport protocols for issuance and presentation of credentials
13061305
are designed to protect the confidentiality of the transmitted data, for
@@ -1311,16 +1310,16 @@ provided by the transport protocol and does not specify any encryption
13111310
mechanism.
13121311

13131312
Implementers MUST ensure that the transport protocol provides confidentiality
1314-
if the privacy of End-User data or correlation attacks by passive observers are a concern.
1313+
if the privacy of user data or correlation attacks by passive observers are a concern.
13151314

13161315
To encrypt the SD-JWT when transmitted over an insecure channel, implementers MAY use JSON Web Encryption (JWE) [@!RFC7516] by nesting the SD-JWT as the plaintext payload of a JWE.
13171316
Especially, when an SD-JWT is transmitted via a URL and information may be stored/cached in the browser or end up in web server logs, the SD-JWT SHOULD be encrypted using JWE.
13181317

13191318
## Decoy Digests {#decoy_digests_privacy}
13201319

1321-
The use of decoy digests is RECOMMENDED when the number of claims (or the existence of particular claims) can be a side-channel disclosing information about otherwise undisclosed claims. In particular, if a claim in an SD-JWT is present only if a certain condition is met (e.g., a membership number is only contained if the End-User is a member of a group), the Issuer SHOULD add decoy digests when the condition is not met.
1320+
The use of decoy digests is RECOMMENDED when the number of claims (or the existence of particular claims) can be a side-channel disclosing information about otherwise undisclosed claims. In particular, if a claim in an SD-JWT is present only if a certain condition is met (e.g., a membership number is only contained if the user is a member of a group), the Issuer SHOULD add decoy digests when the condition is not met.
13221321

1323-
Decoy digests increase the size of the SD-JWT. The number of decoy digests (or whether to use them at all) is a trade-off between the size of the SD-JWT and the privacy of the End-User's data.
1322+
Decoy digests increase the size of the SD-JWT. The number of decoy digests (or whether to use them at all) is a trade-off between the size of the SD-JWT and the privacy of the user's data.
13241323

13251324
## Issuer Identifier
13261325

@@ -1897,6 +1896,7 @@ data. The original JSON data is then used by the application. See
18971896

18981897
-14
18991898

1899+
* Address WGLC (part 2) comments
19001900
* Note that the Hash Function Claim value is case-sensitive
19011901
* Update the `typ` value in the SD-JWT VC example to `dc+sd-jwt` to align with anticipated changes in the SD-JWT VC draft.
19021902

0 commit comments

Comments
 (0)