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-status-list.md
+26-18Lines changed: 26 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,5 @@
1
1
---
2
-
title: "Token Status List"
2
+
title: "Token Status List (TSL)"
3
3
category: std
4
4
lang: en
5
5
@@ -124,7 +124,7 @@ informative:
124
124
125
125
--- abstract
126
126
127
-
This specification defines a mechanism, data structures and processing rules for representing the status of tokens secured by JSON Object Signing and Encryption (JOSE) or CBOR Object Signing and Encryption (COSE), such as JWT, SD-JWT VC, CBOR Web Token and ISO mdoc. It also defines an extension point and a registry for future status mechanisms.
127
+
This specification defines a mechanism called Token Status List (abbreviated TSL), data structures and processing rules for representing the status of tokens secured by JSON Object Signing and Encryption (JOSE) or CBOR Object Signing and Encryption (COSE), such as JWT, SD-JWT VC, CBOR Web Token and ISO mdoc. It also defines an extension point and a registry for future status mechanisms.
128
128
129
129
--- middle
130
130
@@ -363,10 +363,10 @@ See section [](#test-vectors) for more test vectors.
363
363
364
364
This section defines the data structure for a CBOR-encoded Status List:
365
365
366
-
* The `StatusList` structure is a map (Major Type 5) MUST contain at least the following entries:
367
-
* `bits`: REQUIRED. Unsigned integer (Major Type 0) that contains the number of bits per Referenced Token in the compressed byte array (`lst`). The allowed values for `bits` are 1, 2, 4 and 8.
368
-
* `lst`: REQUIRED. Byte string (Major Type 2) that contains the status values for all the Referenced Tokens it conveys statuses for. The value MUST be the compressed byte array as specified in [](#status-list-byte-array).
369
-
* `aggregation_uri`: OPTIONAL. Text string (Major Type 3) that contains a URI to retrieve the Status List Aggregation for this type of Referenced Token. See section [](#aggregation) for further detail.
366
+
* The `StatusList` structure is a CBOR map (Major Type 5) and defines the following entries:
367
+
* `bits`: REQUIRED. CBOR Unsigned integer (Major Type 0) that contains the number of bits per Referenced Token in the compressed byte array (`lst`). The allowed values for `bits` are 1, 2, 4 and 8.
368
+
* `lst`: REQUIRED. CBOR Byte string (Major Type 2) that contains the status values for all the Referenced Tokens it conveys statuses for. The value MUST be the compressed byte array as specified in [](#status-list-byte-array).
369
+
* `aggregation_uri`: OPTIONAL. CBOR Text string (Major Type 3) that contains a URI to retrieve the Status List Aggregation for this type of Referenced Token. See section [](#aggregation) for further detail.
370
370
371
371
The following is the CDDL definition of the StatusList structure:
372
372
@@ -472,7 +472,7 @@ The following is the CBOR Annotated Hex output of the example above:
472
472
473
473
## Status Claim {#status-claim}
474
474
475
-
By including a "status" claim in a Referenced Token, the Issuer is referencing a mechanism to retrieve status information about this Referenced Token. The claim contains members used to reference a Status List Token as defined in this specification. Other members of the "status" object may be defined by other specifications. This is analogous to "cnf" claim in Section 3.1 of {{RFC7800}} in which different authenticity confirmation methods can be included.
475
+
By including a "status" claim in a Referenced Token, the Issuer is referencing a mechanism to retrieve status information about this Referenced Token. This specification defines one possible member of the "status" object, called "status_list". Other members of the "status" object may be defined by other specifications. This is analogous to "cnf" claim in Section 3.1 of {{RFC7800}} in which different authenticity confirmation methods can be included.
476
476
477
477
## Referenced Token in JOSE {#referenced-token-jose}
478
478
@@ -481,7 +481,7 @@ The Referenced Token MAY be encoded as a "JSON Web Token (JWT)" according to {{R
481
481
The following content applies to the JWT Claims Set:
482
482
483
483
* `status`: REQUIRED. The `status` (status) claim MUST specify a JSON Object that contains at least one reference to a status mechanism.
484
-
* `status_list`: REQUIRED when the status mechanism defined in this specification is used. It contains a reference to a Status List Token. It MUST at least contain the following claims:
484
+
* `status_list`: REQUIRED when the status mechanism defined in this specification is used. It MUST specify a JSON Object that contains a reference to a Status List Token. It MUST at least contain the following claims:
485
485
* `idx`: REQUIRED. The `idx` (index) claim MUST specify a non-negative Integer that represents the index to check for status information in the Status List for the current Referenced Token.
486
486
* `uri`: REQUIRED. The `uri` (URI) claim MUST specify a String value that identifies the Status List Token containing the status information for the Referenced Token. The value of `uri` MUST be a URI conforming to {{RFC3986}}.
Status List Aggregation is an optional mechanism to retrieve a list of URIs to all Status List Tokens, allowing a Relying Party to fetch all relevant Status List Tokens for a specific type of Referenced Token or Issuer. This mechanism is intended to support fetching and caching mechanisms and allow offline validation of the status of a reference token for a period of time.
842
842
843
-
If a Relying Party encounters an invalid Status List referenced in the response from the Status List Aggregation endpoint, it SHOULD continue processing the other valid Status Lists referenced in the response instead of fully aborting processing and retrying later.
843
+
If a Relying Party encounters an invalid Status List Token referenced in the response from the Status List Aggregation endpoint, it SHOULD continue processing the other valid Status Lists referenced in the response instead of fully aborting processing and retrying later.
844
844
845
845
There are two options for a Relying Party to retrieve the Status List Aggregation.
846
846
An Issuer MAY support any of these mechanisms:
@@ -883,7 +883,7 @@ This section defines the structure for a JSON-encoded Status List Aggregation:
883
883
884
884
* `status_lists`: REQUIRED. JSON array of strings that contains URIs linking to Status List Tokens.
885
885
886
-
The Status List Aggregation URI provides a list of Status List URIs. This aggregation in JSON and the media type return MUST be `application/json`. A Relying Party can iterate through this list and fetch all Status List Tokens before encountering the specific URI in a Referenced Token.
886
+
The Status List Aggregation URI provides a list of Status List Token URIs. This aggregation in JSON and the media type return MUST be `application/json`. A Relying Party can iterate through this list and fetch all Status List Tokens before encountering the specific URI in a Referenced Token.
887
887
888
888
The following is a non-normative example for media type `application/json`:
889
889
@@ -1002,7 +1002,7 @@ Once the Relying Party receives the Referenced Token, this enables them to reque
1002
1002
1003
1003
This behaviour could be mitigated by:
1004
1004
1005
-
- regular re-issuance of the Referenced Token, see [](#implementation-lifecycle).
1005
+
- regular re-issuance of the Referenced Token, see [](#implementation-linkability).
1006
1006
1007
1007
## Observability of Outsiders {#privacy-outsider}
1008
1008
@@ -1024,7 +1024,7 @@ The tuple of uri and index inside the Referenced Token are unique and therefore
1024
1024
1025
1025
Two or more colluding Relying Parties may link two transactions involving the same Referenced Token by comparing the status claims of received Referenced Tokens and therefore determine that they have interacted with the same Holder.
1026
1026
1027
-
To avoid privacy risks for colluding Relying Parties, it is RECOMMENDED that Issuers provide the ability to issue batches of one-time-use Referenced Tokens, enabling Holders to use in a single interaction with a Relying Party before discarding. See [](#implementation-lifecycle) to avoid further correlatable information by the values of `uri` and `index`, Status Issuers are RECOMMENDED to:
1027
+
To avoid privacy risks for colluding Relying Parties, it is RECOMMENDED that Issuers provide the ability to issue batches of one-time-use Referenced Tokens, enabling Holders to use in a single interaction with a Relying Party before discarding. See [](#implementation-linkability) to avoid further correlatable information by the values of `uri` and `index`, Status Issuers are RECOMMENDED to:
1028
1028
1029
1029
- choose non-sequential, pseudo-random or random indices
1030
1030
- use decoy entries to obfuscate the real number of Referenced Tokens within a Status List
@@ -1060,10 +1060,14 @@ Ecosystems that want to use other Status Types than "VALID" and "INVALID" should
1060
1060
1061
1061
The lifetime of a Status List Token depends on the lifetime of its Referenced Tokens. Once all Referenced Tokens are expired, the Issuer may stop serving the Status List Token.
Referenced Tokens may be regularly re-issued to mitigate the linkability of presentations to Relying Parties. In this case, every re-issued Referenced Token MUST have a fresh Status List entry in order to prevent this from becoming a possible source of correlation.
1064
1066
1065
1067
Referenced Tokens may also be issued in batches and be presented by Holders in a one-time-use policy to avoid linkability. In this case, every Referenced Token MUST have a dedicated Status List entry and MAY be spread across multiple Status List Tokens. Revoking batch-issued Referenced Tokens might reveal this correlation later on.
1066
1068
1069
+
Beware, that this mechanism solves linkability issues between Relying Parties, but does not prevent traceability by Issuers.
1070
+
1067
1071
## Default Values and Double Allocation
1068
1072
1069
1073
The Status Issuer is RECOMMENDED to initialize the Status List byte array with a default value provided as
@@ -1164,14 +1168,14 @@ IANA "JSON Web Token Claims" registry {{IANA.JWT}} established by {{RFC7519}}.
1164
1168
### Registry Contents
1165
1169
1166
1170
* Claim Name: `status`
1167
-
* Claim Description: Reference to a status or validity mechanism containing up-to-date status information on the JWT.
1171
+
* Claim Description: A JSON object containing a reference to a status mechanism from the JWT Status Mechanisms Registry.
1168
1172
* Change Controller: IETF
1169
1173
* Specification Document(s): [](#status-claim) of this specification
1170
1174
1171
1175
<br/>
1172
1176
1173
1177
* Claim Name: `status_list`
1174
-
* Claim Description: A status list containing up-to-date status information on multiple tokens.
1178
+
* Claim Description: A JSON object containing up-to-date status information on multiple tokens using the Token Status List mechanism.
1175
1179
* Change Controller: IETF
1176
1180
* Specification Document(s): [](#status-list-token-jwt) of this specification
1177
1181
@@ -1220,7 +1224,7 @@ Specification Document(s):
1220
1224
### Initial Registry Contents
1221
1225
1222
1226
* Status Mechanism Value: `status_list`
1223
-
* Status Mechanism Description: A status list containing up-to-date status information on multiple tokens.
1227
+
* Status Mechanism Description: A Token Status List containing up-to-date status information on multiple tokens.
1224
1228
* Change Controller: IETF
1225
1229
* Specification Document(s): [](#referenced-token-jose) of this specification
1226
1230
@@ -1234,7 +1238,7 @@ IANA "CBOR Web Token (CWT) Claims" registry {{IANA.CWT}} established by {{RFC839
1234
1238
<br/>
1235
1239
1236
1240
* Claim Name: `status`
1237
-
* Claim Description: Reference to a status or validity mechanism containing up-to-date status information on the CWT.
1241
+
* Claim Description: A CBOR structure containing a reference to a status mechanism from the CWT Status Mechanisms Registry.
1238
1242
* JWT Claim Name: `status`
1239
1243
* Claim Key: TBD (requested assignment 65535)
1240
1244
* Claim Value Type: map
@@ -1244,7 +1248,7 @@ IANA "CBOR Web Token (CWT) Claims" registry {{IANA.CWT}} established by {{RFC839
1244
1248
<br/>
1245
1249
1246
1250
* Claim Name: `status_list`
1247
-
* Claim Description: A status list containing up-to-date status information on multiple tokens.
1251
+
* Claim Description: A CBOR structure containing up-to-date status information on multiple tokens using the Token Status List mechanism.
1248
1252
* JWT Claim Name: `status_list`
1249
1253
* Claim Key: TBD (requested assignment 65533)
1250
1254
* Claim Value Type: map
@@ -1298,7 +1302,7 @@ Specification Document(s):
1298
1302
### Initial Registry Contents
1299
1303
1300
1304
* Status Mechanism Value: `status_list`
1301
-
* Status Mechanism Description: A status list containing up-to-date status information on multiple tokens.
1305
+
* Status Mechanism Description: A Token Status List containing up-to-date status information on multiple tokens.
1302
1306
* Change Controller: IETF
1303
1307
* Specification Document(s): [](#referenced-token-cose) of this specification
1304
1308
@@ -1898,6 +1902,10 @@ CBOR encoding:
1898
1902
* add Paul's affiliation
1899
1903
* add feedback from Dan Moore
1900
1904
* change JSON Status List structure to only contain JSON object
1905
+
* further nitpicks
1906
+
* clarifying status and status_list IANA descriptions for JWT/CWT
1907
+
* clarifying description texts for status and status_list in CBOR
1908
+
* splitting Linkability Mitigation from Token Lifecycle section in Implementation Consideration
0 commit comments