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
Copy file name to clipboardExpand all lines: draft-ietf-oauth-selective-disclosure-jwt.md
+25-25Lines changed: 25 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -137,7 +137,7 @@ Issuer:
137
137
: An entity that creates SD-JWTs.
138
138
139
139
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.
141
141
142
142
Verifier:
143
143
: 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
204
204
205
205
* a hash of the SD-JWT,
206
206
* 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.
208
208
209
209
Details of the format of Key Binding JWTs are described in (#kb-jwt).
210
210
@@ -326,7 +326,7 @@ The same digest value MUST NOT appear more than once in the SD-JWT.
326
326
327
327
Application and profiles of SD-JWT SHOULD be explicitly typed. See (#explicit_typing) for more details.
328
328
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.
330
330
331
331
Claims that are not selectively disclosable are included in the SD-JWT in plaintext just as they would be in any other JSON structure.
332
332
@@ -658,14 +658,16 @@ in (#hash_function_claim)).
658
658
659
659
### Validating the Key Binding JWT
660
660
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
662
666
the Key Binding JWT is the key specified in the SD-JWT as the Holder's public
663
667
key. For example, if the SD-JWT contains a `cnf` value with a `jwk` member, the
664
668
Verifier would parse the provided JWK and use it to verify the Key Binding JWT.
665
669
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).
669
671
670
672
671
673
# Example SD-JWT {#main-example}
@@ -686,7 +688,7 @@ In this example, the following decisions were made by the Issuer in constructing
686
688
687
689
* The `nationalities` array is always visible, but its contents are selectively disclosable.
688
690
* 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.
690
692
* For `address`, the Issuer is using a flat structure, i.e., all the claims
691
693
in the `address` claim can only be disclosed in full. Other options are
692
694
discussed in (#nested_data).
@@ -833,17 +835,15 @@ an SD-JWT:
833
835
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.
834
836
835
837
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.
839
839
## Processing by the Holder {#holder_verification}
840
840
841
841
The Issuer MUST provide the Holder an SD-JWT, not an SD-JWT+KB. If the Holder
842
842
receives an SD-JWT+KB, it MUST be rejected.
843
843
844
844
For presentation to a Verifier, the Holder MUST perform the following (or equivalent) steps:
845
845
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.
847
847
2. Verify that each selected Disclosure satisfies one of the two following conditions:
848
848
1. The hash of the Disclosure is contained in the Issuer-signed JWT claims
849
849
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
1235
1235
Issuer/Verifier unlinkability. Similarly, a large service provider issuing credentials might implicitly pressure
1236
1236
Verifiers into collusion by incentivizing participation in their larger ecosystem.
1237
1237
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.
1239
1239
1240
1240
Contrary to that, Issuer/Verifier unlinkability with an honest Verifier can generally be achieved.
1241
1241
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
1255
1255
hours and calculate `exp` accordingly) or rounded (e.g., rounded down to the
1256
1256
beginning of the day).
1257
1257
1258
-
## Storage of Signed User Data
1258
+
## Storage of User Data
1259
1259
1260
-
Wherever End-User data is stored, it represents a potential
1260
+
Wherever user data is stored, it represents a potential
1261
1261
target for an attacker. This target can be of particularly
1262
1262
high value when the data is signed by a trusted authority like an
1263
1263
official national identity service. For example, in OpenID Connect [@?OpenID.Core],
1264
1264
signed ID Tokens can be stored by Relying Parties. In the case of
1265
1265
SD-JWT, Holders have to store SD-JWTs,
1266
1266
and Issuers and Verifiers may decide to do so as well.
1267
1267
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
1270
1270
can be easily verified by third parties, further exacerbates the risk.
1271
1271
As discussed in (#key_binding_security), leaked
1272
1272
SD-JWTs may also allow attackers to impersonate Holders unless Key
1273
1273
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.
1276
1275
1277
1276
Due to these risks, systems implementing SD-JWT SHOULD be designed to minimize
1278
1277
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.
1285
1284
Holders SHOULD store SD-JWTs only in
1286
1285
encrypted form, and, wherever possible, use hardware-backed encryption
1287
1286
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
1289
1288
credentials over centralized storage. Expired SD-JWTs SHOULD be deleted
1290
1289
as soon as possible.
1291
1290
1292
1291
After Verification, Verifiers SHOULD NOT store the Issuer-signed JWT or the
1293
1292
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
1295
1294
needed for the application.
1296
1295
1297
1296
@@ -1300,7 +1299,7 @@ needed for the application.
1300
1299
1301
1300
If the SD-JWT is transmitted over an insecure
1302
1301
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.
1304
1303
1305
1304
Usually, transport protocols for issuance and presentation of credentials
1306
1305
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
1311
1310
mechanism.
1312
1311
1313
1312
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.
1315
1314
1316
1315
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.
1317
1316
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.
1318
1317
1319
1318
## Decoy Digests {#decoy_digests_privacy}
1320
1319
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.
1322
1321
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.
1324
1323
1325
1324
## Issuer Identifier
1326
1325
@@ -1897,6 +1896,7 @@ data. The original JSON data is then used by the application. See
1897
1896
1898
1897
-14
1899
1898
1899
+
* Address WGLC (part 2) comments
1900
1900
* Note that the Hash Function Claim value is case-sensitive
1901
1901
* 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.
0 commit comments