Skip to content

Commit 419ef7f

Browse files
authored
Merge branch 'main' into rendering-fix-oid
2 parents c874117 + 3ddfa03 commit 419ef7f

2 files changed

Lines changed: 30 additions & 25 deletions

File tree

README.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@ $ make
2828
Command line usage requires that you have the necessary software installed. See
2929
[the instructions](https://github.com/martinthomson/i-d-template/blob/main/doc/SETUP.md).
3030

31+
## Implementations (Open Source)
3132

32-
# Implementations
33-
34-
| Project | Language | Issuer | Holder | Relying Party |
33+
| Project | Language | Issuer | Holder | Relying Party |
3534
|---|---|---|---|---|
36-
| [OWF sd-jwt-js](https://github.com/openwallet-foundation/sd-jwt-js) | TypeScript | yes | yes | yes |
35+
| [OWF sd-jwt-js](https://github.com/openwallet-foundation/sd-jwt-js) | TypeScript | yes | yes | yes |
36+
| [Adorsys status-list-server](https://github.com/adorsys/status-list-server) | Rust | yes | no | no |
37+
| [Bundesdruckerei issuer](https://github.com/Bundesdruckerei-GmbH/pid-issuer/tree/main/status-list-service-0.1.11) | Kotlin | yes | yes | yes |
38+
| [eudi-wallet-it-python](https://github.com/italia/eudi-wallet-it-python/blob/main/pyeudiw/status_list) | Python | no | yes | no |
3739

38-
# Testing
40+
## Testing
3941

4042
You may use this [Cyberchef script](https://gchq.github.io/CyberChef/#recipe=JWT_Decode()JPath_expression('status_list.lst','%5C%5Cn')From_Base64('A-Za-z0-9-_',true,false)Zlib_Inflate(0,0,'Adaptive',false,false)To_Binary('Line%20feed',8)Add_line_numbers()) to quickly analyze a Token Status List in JWT format.

draft-ietf-oauth-status-list.md

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ Furthermore, the document defines an extension point that enables other specific
181181

182182
## Example Use Cases
183183

184-
An example of the usage of a Status List is to manage the status of issued access tokens as defined in section 1.4 of {{RFC6749}}. Token Introspection {{RFC7662}} defines another way to determine the status of an issued access token, but it requires the party trying to validate the state of access tokens to directly contact the token issuer, whereas the mechanism defined in this specification does not have this limitation.
184+
An example of the usage of a Status List is to manage the status of issued access tokens as defined in section 1.4 of {{RFC6749}}. Token Introspection {{RFC7662}} defines a way to determine the status of an issued access token, but it requires the party trying to validate the state of access tokens to directly contact the Issuer of the access tokens for each token validation. In contrast, the mechanism defined in this specification allows a party to fetch the status for many tokens, reducing interactions with the Issuer significantly for better scalability and providing better privacy as the Issuer does not learn which specific access token is being verified (herd anonymity).
185185

186186
Another possible use case for the Status List is to express the status of verifiable credentials (Referenced Tokens) issued by an Issuer in the Issuer-Holder-Verifier model {{SD-JWT.VC}}.
187187

@@ -259,7 +259,7 @@ A compressed byte array containing the status information of the Referenced Toke
259259

260260
2. The Status Issuer creates a byte array of size = amount of Referenced Tokens * `bits` / 8 or greater. Depending on the `bits`, each byte in the array corresponds to 8/(`bits`) statuses (8,4,2 or 1).
261261

262-
3. The Status Issuer sets the status values for all Referenced Tokens within the byte array. The status of each Referenced Token is identified using an index that maps to one or more specific bits within the byte array. The index starts counting at 0 and ends with amount of Referenced Tokens - 1 (being the last valid entry). The bits within an array are counted from the least significant bit ("0") to the most significant bit ("7"). All bits of the byte array at a particular index are set to a status value.
262+
3. The Status Issuer sets the status values for all Referenced Tokens within the byte array. The status of each Referenced Token is identified using an index that maps to one or more specific bits within the byte array. The index starts counting at 0 and ends with amount of Referenced Tokens - 1 (being the last valid entry). The bits within an array are counted from the least significant bit ("0") to the most significant bit ("7"). All bits of the byte array at a particular index are set to a status value (see [](#status-types) for more details on the values).
263263

264264
4. The Status Issuer compresses the byte array using DEFLATE {{RFC1951}} with the ZLIB {{RFC1950}} data format. Implementations are RECOMMENDED to use the highest compression level available.
265265

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

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

474-
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 to 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.
474+
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.
475475

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

@@ -737,15 +737,15 @@ See [](#privacy-status-types) for privacy considerations on status types.
737737

738738
# Verification and Processing
739739

740-
The fetching, processing and verifying of a Status List Token may be done by either the Holder or the Relying Party. In the following section is described from the role of the Relying Party, however the same rules would also apply for the Holder.
740+
The fetching, processing and verifying of a Status List Token may be done by either the Holder or the Relying Party. The following section is described from the role of the Relying Party, however the same rules would also apply for the Holder.
741741

742742
## Status List Request {#status-list-request}
743743

744744
To obtain the Status List Token, the Relying Party MUST send an HTTP GET request to the URI provided in the Referenced Token.
745745

746-
The HTTP endpoint SHOULD support the use of Cross-Origin Resource Sharing (CORS) {{CORS}} and/or other methods as appropriate to enable Browser-based clients to access it.
746+
The HTTP endpoint SHOULD support the use of Cross-Origin Resource Sharing (CORS) {{CORS}} and/or other methods as appropriate to enable Browser-based clients to access it, unless ecosystems using this specification choose not to support Browser-based clients.
747747

748-
The Relying Party SHOULD send the following Accept-Header to indicate the requested response type:
748+
The Relying Party MUST send the following Accept-Header to indicate the requested response type:
749749

750750
- "application/statuslist+jwt" for Status List Token in JWT format
751751
- "application/statuslist+cwt" for Status List Token in CWT format
@@ -786,7 +786,7 @@ In the case of "application/statuslist+cwt", the response MUST be of type CWT an
786786

787787
The HTTP response SHOULD use gzip Content-Encoding as defined in {{RFC9110}}.
788788

789-
If caching-related HTTP headers are present in the HTTP response, Relying Parties SHOULD prioritize the exp and ttl claims within the Status List Token over the HTTP headers for determining caching behavior.
789+
If caching-related HTTP headers are present in the HTTP response, Relying Parties MUST prioritize the exp and ttl claims within the Status List Token over the HTTP headers for determining caching behavior.
790790

791791
## Validation Rules
792792

@@ -839,9 +839,9 @@ Content-Type: application/statuslist+jwt
839839

840840
# Status List Aggregation {#aggregation}
841841

842-
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 Lists 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+
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.
843843

844-
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.
844+
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.
845845

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

871871
## Issuer Metadata
872872

873-
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 via a VICAL extension for ISO mDoc / mDL. 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}}.
873+
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}}.
874874

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

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

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

887-
The Status List Aggregation URI provides a list of Status List URIs. This aggregation in JSON and the media type return SHOULD 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+
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.
888888

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

@@ -899,9 +899,7 @@ The following is a non-normative example for media type `application/json`:
899899
}
900900
~~~
901901

902-
# X.509 Certificate Extensions
903-
904-
## Extended Key Usage Extension {#eku}
902+
# X.509 Certificate Extended Key Usage Extension {#eku}
905903

906904
{{RFC5280}} specifies the Extended Key Usage (EKU) X.509 certificate extension for use on end entity certificates. The extension indicates one or more purposes for which the certified public key is valid. The EKU extension can be used in conjunction with the Key Usage (KU) extension, which indicates the set of basic cryptographic operations for which the certified key may be used. A certificate's issuer explicitly delegates Status List Token signing authority by issuing a X.509 certificate containing the KeyPurposeId defined below in the extended key usage extension.
907905
Other specifications MAY choose to re-use this OID for other status mechanisms.
@@ -934,7 +932,7 @@ A Status List Token in the CWT format should follow the security considerations
934932

935933
## Key Resolution and Trust Management {#key-management}
936934

937-
This specification does not mandate specific methods for key resolution and trust management, however the following recommendations are made for specifications, profiles, or ecosystems that are planning ot make use of the Status List mechanism:
935+
This specification does not mandate specific methods for key resolution and trust management, however the following recommendations are made for specifications, profiles, or ecosystems that are planning to make use of the Status List mechanism:
938936

939937
If the Issuer of the Referenced Token is the same entity as the Status Issuer, then the same key that is embedded into the Referenced Token may be used for the Status List Token. In this case the Status List Token may use:
940938
- the same `x5c` value or an `x5t`, `x5t#S256` or `kid` parameter referencing to the same key as used in the Referenced Token for JOSE.
@@ -977,7 +975,7 @@ If the Issuer of the Referenced Token is a different entity than the Status Issu
977975
└─────────────────┘
978976
~~~
979977

980-
# Privacy Considerations
978+
# Privacy Considerations {#privacy-considerations}
981979

982980
## Observability of Issuers {#privacy-issuer}
983981

@@ -1064,14 +1062,14 @@ The lifetime of a Status List Token depends on the lifetime of its Referenced To
10641062

10651063
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.
10661064

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 Lists. Revoking batch-issued Referenced Tokens might reveal this correlation later on.
1065+
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.
10681066

10691067
## Default Values and Double Allocation
10701068

10711069
The Status Issuer is RECOMMENDED to initialize the Status List byte array with a default value provided as
1072-
an initialization parameter by the Issuer of the Referenced Token. The Issuer is RECOMMENDED to use a default value that represents the most common value for its Referenced Tokens to avoid an update during issuance.
1070+
an initialization parameter by the Issuer of the Referenced Token. The Issuer is RECOMMENDED to use a default value that represents the most common value for its Referenced Tokens to avoid an update during issuance (usually 0x00, VALID). This preserves the benefits from compression and effectively hides the number of managed Referenced Tokens since an unused index value can not be distinguished from a valid Referenced Token.
10731071

1074-
The Status Issuer is RECOMMENDED to prevent double allocation, i.e. re-using the same `uri` and `index` for multiple Referenced Tokens. The Status Issuer MUST prevent any unintended double allocation.
1072+
The Status Issuer is RECOMMENDED to prevent double allocation, i.e. re-using the same `uri` and `index` for multiple Referenced Tokens (since `uri` and `index` form a unique identifier that might be used for tracking, see [](#privacy-considerations) for more details). The Status Issuer MUST prevent any unintended double allocation.
10751073

10761074
## Status List Size
10771075

@@ -1893,10 +1891,15 @@ CBOR encoding:
18931891
# Document History
18941892
{:numbered="false"}
18951893

1896-
-11
1894+
-12
18971895

18981896
* Allow for extended key usage OID to be used for other status mechanisms
1897+
1898+
-11
1899+
1900+
* incorporate feedback from shepherd review
18991901
* some nitpicks
1902+
* even more nitpicks
19001903

19011904
-10
19021905

0 commit comments

Comments
 (0)