Skip to content

Commit c50a2fa

Browse files
authored
Merge pull request #295 from oauth-wg/comments_by_denis_3
some nitpicks and clarifications
2 parents a5682d0 + c16de12 commit c50a2fa

File tree

1 file changed

+29
-21
lines changed

1 file changed

+29
-21
lines changed

draft-ietf-oauth-status-list.md

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: "Token Status List"
2+
title: "Token Status List (TSL)"
33
category: std
44
lang: en
55

@@ -124,7 +124,7 @@ informative:
124124

125125
--- abstract
126126

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.
128128

129129
--- middle
130130

@@ -363,10 +363,10 @@ See section [](#test-vectors) for more test vectors.
363363

364364
This section defines the data structure for a CBOR-encoded Status List:
365365

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.
370370

371371
The following is the CDDL definition of the StatusList structure:
372372

@@ -472,7 +472,7 @@ The following is the CBOR Annotated Hex output of the example above:
472472

473473
## Status Claim {#status-claim}
474474

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.
476476

477477
## Referenced Token in JOSE {#referenced-token-jose}
478478

@@ -481,7 +481,7 @@ The Referenced Token MAY be encoded as a "JSON Web Token (JWT)" according to {{R
481481
The following content applies to the JWT Claims Set:
482482

483483
* `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:
485485
* `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.
486486
* `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}}.
487487

@@ -838,9 +838,9 @@ Content-Type: application/statuslist+jwt
838838

839839
# Status List Aggregation {#aggregation}
840840

841-
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.
842842

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.
844844

845845
There are two options for a Relying Party to retrieve the Status List Aggregation.
846846
An Issuer MAY support any of these mechanisms:
@@ -869,7 +869,7 @@ An Issuer MAY support any of these mechanisms:
869869

870870
## Issuer Metadata
871871

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.
873873

874874
The concrete specification on how this is implemented depends on the specific ecosystem and is out of scope of this specification.
875875

@@ -883,7 +883,7 @@ This section defines the structure for a JSON-encoded Status List Aggregation:
883883

884884
* `status_lists`: REQUIRED. JSON array of strings that contains URIs linking to Status List Tokens.
885885

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.
887887

888888
The following is a non-normative example for media type `application/json`:
889889

@@ -1003,7 +1003,7 @@ Once the Relying Party receives the Referenced Token, this enables them to reque
10031003

10041004
This behaviour could be mitigated by:
10051005

1006-
- regular re-issuance of the Referenced Token, see [](#implementation-lifecycle).
1006+
- regular re-issuance of the Referenced Token, see [](#implementation-linkability).
10071007

10081008
## Observability of Outsiders {#privacy-outsider}
10091009

@@ -1025,7 +1025,7 @@ The tuple of uri and index inside the Referenced Token are unique and therefore
10251025

10261026
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.
10271027

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:
10291029

10301030
- choose non-sequential, pseudo-random or random indices
10311031
- 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
10611061

10621062
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.
10631063

1064+
## Linkability Mitigation {#implementation-linkability}
1065+
10641066
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.
10651067

10661068
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.
10671069

1070+
Beware, that this mechanism solves linkability issues between Relying Parties, but does not prevent traceability by Issuers.
1071+
10681072
## Default Values and Double Allocation
10691073

10701074
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}}.
11651169
### Registry Contents
11661170

11671171
* 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.
11691173
* Change Controller: IETF
11701174
* Specification Document(s): [](#status-claim) of this specification
11711175

11721176
<br/>
11731177

11741178
* 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.
11761180
* Change Controller: IETF
11771181
* Specification Document(s): [](#status-list-token-jwt) of this specification
11781182

@@ -1221,7 +1225,7 @@ Specification Document(s):
12211225
### Initial Registry Contents
12221226

12231227
* 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.
12251229
* Change Controller: IETF
12261230
* Specification Document(s): [](#referenced-token-jose) of this specification
12271231

@@ -1235,7 +1239,7 @@ IANA "CBOR Web Token (CWT) Claims" registry {{IANA.CWT}} established by {{RFC839
12351239
<br/>
12361240

12371241
* 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.
12391243
* JWT Claim Name: `status`
12401244
* Claim Key: TBD (requested assignment 65535)
12411245
* Claim Value Type: map
@@ -1245,7 +1249,7 @@ IANA "CBOR Web Token (CWT) Claims" registry {{IANA.CWT}} established by {{RFC839
12451249
<br/>
12461250

12471251
* 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.
12491253
* JWT Claim Name: `status_list`
12501254
* Claim Key: TBD (requested assignment 65533)
12511255
* Claim Value Type: map
@@ -1299,7 +1303,7 @@ Specification Document(s):
12991303
### Initial Registry Contents
13001304

13011305
* 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.
13031307
* Change Controller: IETF
13041308
* Specification Document(s): [](#referenced-token-cose) of this specification
13051309

@@ -1461,6 +1465,7 @@ IANA is also requested to register the following OID "1.3.6.1.5.5.7.3.TBD" in th
14611465
We would like to thank
14621466
Brian Campbell,
14631467
Dan Moore,
1468+
Denis Pinkas,
14641469
Filip Skokan,
14651470
Francesco Marino,
14661471
Giuseppe De Marco,
@@ -1900,9 +1905,12 @@ CBOR encoding:
19001905
* add Paul's affiliation
19011906
* add feedback from Dan Moore
19021907
* 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
19031912
* relax the accept header from must to should
19041913

1905-
19061914
-11
19071915

19081916
* incorporate feedback from shepherd review

0 commit comments

Comments
 (0)