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
+29-21Lines changed: 29 additions & 21 deletions
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.
841
+
Status List Aggregation is an optional mechanism offered by the Issuer to publish a list of one or more Status List Tokens URIs, allowing a Relying Party to fetch Status List Tokens provided by this 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 error while validating one of the Status List Tokens returned from the Status List Aggregation endpoint, it SHOULD continue processing the other Status List Tokens.
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:
@@ -869,7 +869,7 @@ An Issuer MAY support any of these mechanisms:
869
869
870
870
## Issuer Metadata
871
871
872
-
The Issuer MAY link to the Status List Aggregation URI in metadata that can be provided by different means like .well-known metadata as is used commonly in OAuth and OpenID or within Issuer certificates or trust lists (such as VICAL as defined in Annex C of {{ISO.mdoc}}). If the Issuer is an OAuth Authorization Server according to {{RFC6749}}, it is RECOMMENDED to use `status_list_aggregation_endpoint` for its metadata defined by {{RFC8414}}.
872
+
The Issuer MAY link to the Status List Aggregation URI in metadata that can be provided by different means like .well-known metadata as is used commonly in OAuth and OpenID or within Issuer certificates or trust lists (such as VICAL as defined in Annex C of {{ISO.mdoc}}). If the Issuer is an OAuth Authorization Server according to {{RFC6749}}, it is RECOMMENDED to use `status_list_aggregation_endpoint` for its metadata defined by {{RFC8414}}. The Issuer MAY limit the Status List Tokens listed by a Status List Aggregation to a particular type of Referenced Token.
873
873
874
874
The concrete specification on how this is implemented depends on the specific ecosystem and is out of scope of this specification.
875
875
@@ -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
@@ -1003,7 +1003,7 @@ Once the Relying Party receives the Referenced Token, this enables them to reque
1003
1003
1004
1004
This behaviour could be mitigated by:
1005
1005
1006
-
- regular re-issuance of the Referenced Token, see [](#implementation-lifecycle).
1006
+
- regular re-issuance of the Referenced Token, see [](#implementation-linkability).
1007
1007
1008
1008
## Observability of Outsiders {#privacy-outsider}
1009
1009
@@ -1025,7 +1025,7 @@ The tuple of uri and index inside the Referenced Token are unique and therefore
1025
1025
1026
1026
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.
1027
1027
1028
-
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:
1028
+
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:
1029
1029
1030
1030
- choose non-sequential, pseudo-random or random indices
1031
1031
- use decoy entries to obfuscate the real number of Referenced Tokens within a Status List
@@ -1061,10 +1061,14 @@ Ecosystems that want to use other Status Types than "VALID" and "INVALID" should
1061
1061
1062
1062
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.
1065
1067
1066
1068
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.
1067
1069
1070
+
Beware, that this mechanism solves linkability issues between Relying Parties, but does not prevent traceability by Issuers.
1071
+
1068
1072
## Default Values and Double Allocation
1069
1073
1070
1074
The Status Issuer is RECOMMENDED to initialize the Status List byte array with a default value provided as
@@ -1165,14 +1169,14 @@ IANA "JSON Web Token Claims" registry {{IANA.JWT}} established by {{RFC7519}}.
1165
1169
### Registry Contents
1166
1170
1167
1171
* Claim Name: `status`
1168
-
* Claim Description: Reference to a status or validity mechanism containing up-to-date status information on the JWT.
1172
+
* Claim Description: A JSON object containing a reference to a status mechanism from the JWT Status Mechanisms Registry.
1169
1173
* Change Controller: IETF
1170
1174
* Specification Document(s): [](#status-claim) of this specification
1171
1175
1172
1176
<br/>
1173
1177
1174
1178
* Claim Name: `status_list`
1175
-
* Claim Description: A status list containing up-to-date status information on multiple tokens.
1179
+
* Claim Description: A JSON object containing up-to-date status information on multiple tokens using the Token Status List mechanism.
1176
1180
* Change Controller: IETF
1177
1181
* Specification Document(s): [](#status-list-token-jwt) of this specification
1178
1182
@@ -1221,7 +1225,7 @@ Specification Document(s):
1221
1225
### Initial Registry Contents
1222
1226
1223
1227
* Status Mechanism Value: `status_list`
1224
-
* Status Mechanism Description: A status list containing up-to-date status information on multiple tokens.
1228
+
* Status Mechanism Description: A Token Status List containing up-to-date status information on multiple tokens.
1225
1229
* Change Controller: IETF
1226
1230
* Specification Document(s): [](#referenced-token-jose) of this specification
1227
1231
@@ -1235,7 +1239,7 @@ IANA "CBOR Web Token (CWT) Claims" registry {{IANA.CWT}} established by {{RFC839
1235
1239
<br/>
1236
1240
1237
1241
* Claim Name: `status`
1238
-
* Claim Description: Reference to a status or validity mechanism containing up-to-date status information on the CWT.
1242
+
* Claim Description: A CBOR structure containing a reference to a status mechanism from the CWT Status Mechanisms Registry.
1239
1243
* JWT Claim Name: `status`
1240
1244
* Claim Key: TBD (requested assignment 65535)
1241
1245
* Claim Value Type: map
@@ -1245,7 +1249,7 @@ IANA "CBOR Web Token (CWT) Claims" registry {{IANA.CWT}} established by {{RFC839
1245
1249
<br/>
1246
1250
1247
1251
* Claim Name: `status_list`
1248
-
* Claim Description: A status list containing up-to-date status information on multiple tokens.
1252
+
* Claim Description: A CBOR structure containing up-to-date status information on multiple tokens using the Token Status List mechanism.
1249
1253
* JWT Claim Name: `status_list`
1250
1254
* Claim Key: TBD (requested assignment 65533)
1251
1255
* Claim Value Type: map
@@ -1299,7 +1303,7 @@ Specification Document(s):
1299
1303
### Initial Registry Contents
1300
1304
1301
1305
* Status Mechanism Value: `status_list`
1302
-
* Status Mechanism Description: A status list containing up-to-date status information on multiple tokens.
1306
+
* Status Mechanism Description: A Token Status List containing up-to-date status information on multiple tokens.
1303
1307
* Change Controller: IETF
1304
1308
* Specification Document(s): [](#referenced-token-cose) of this specification
1305
1309
@@ -1461,6 +1465,7 @@ IANA is also requested to register the following OID "1.3.6.1.5.5.7.3.TBD" in th
1461
1465
We would like to thank
1462
1466
Brian Campbell,
1463
1467
Dan Moore,
1468
+
Denis Pinkas,
1464
1469
Filip Skokan,
1465
1470
Francesco Marino,
1466
1471
Giuseppe De Marco,
@@ -1900,9 +1905,12 @@ CBOR encoding:
1900
1905
* add Paul's affiliation
1901
1906
* add feedback from Dan Moore
1902
1907
* change JSON Status List structure to only contain JSON object
1908
+
* further nitpicks
1909
+
* clarifying status and status_list IANA descriptions for JWT/CWT
1910
+
* clarifying description texts for status and status_list in CBOR
1911
+
* splitting Linkability Mitigation from Token Lifecycle section in Implementation Consideration
0 commit comments