Skip to content

Commit 13ddfee

Browse files
committed
genart review p2
1 parent 2ecb3c1 commit 13ddfee

File tree

1 file changed

+25
-21
lines changed

1 file changed

+25
-21
lines changed

draft-ietf-oauth-status-list.md

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -939,19 +939,19 @@ The following OID is defined for usage in the EKU extension
939939

940940
# Security Considerations {#Security}
941941

942-
The Status List as defined in [](#status-list) only exists in cryptographically secured containers which allows checking the integrity and origin without relying on other aspects like transport security (e.g., the web PKI).
942+
Status List Tokens as defined in [](#status-list-token) only exists in cryptographically secured containers which allows checking the integrity and origin without relying on other factors such as transport security or web PKI.
943943

944944
## Correct decoding and parsing of the encoded Status List
945945

946946
Implementers should be particularly careful for the correct parsing and decoding of the Status List. Incorrect implementations might check the index on the wrong data or miscalculate the bit and byte index leading to an erroneous status of the Referenced Token. Beware, that bits are indexed (bit order) from least significant bit to most significant bit (also called "right to left") while bytes are indexed (byte order) in their natural incrementing byte order (usually written for display purpose from left to right). Endianness does not apply here because each status value fits within a single byte.
947947

948-
Implementations are RECOMMENDED to verify correctness using the test vectors given by this specification.
948+
Implementations SHOULD verify correctness using the test vectors given by this specification.
949949

950950
## Security Guidance for JWT and CWT
951951

952-
A Status List Token in the JWT format should follow the security considerations of {{RFC7519}} and the best current practices of {{RFC8725}}.
952+
A Status List Token in the JWT format SHOULD follow the security considerations of {{RFC7519}} and the best current practices of {{RFC8725}}.
953953

954-
A Status List Token in the CWT format should follow the security considerations of {{RFC8392}}.
954+
A Status List Token in the CWT format SHOULD follow the security considerations of {{RFC8392}}.
955955

956956
## Key Resolution and Trust Management {#key-management}
957957

@@ -1002,17 +1002,17 @@ If the Issuer of the Referenced Token is a different entity than the Status Issu
10021002

10031003
## Redirection 3xx {#redirects}
10041004

1005-
Clients that follow 3xx (Redirection) class of status codes should be aware of possible dangers of redirects, such as infinite redirection loops since they could be used as an attack vector for possible denial of service attacks on clients. A client SHOULD detect and intervene in cyclical redirections (i.e., "infinite" redirection loops). More guidance for redirects given in Section 15.4 of {{RFC9110}} should be applied.
1005+
HTTP clients that follow 3xx (Redirection) class of status codes SHOULD be aware of the possible dangers of redirects, such as infinite redirection loops, since they can be used for denial of service attacks on clients. A client SHOULD detect and intervene in infinite redirections. Clients SHOULD apply the guidance for redirects given in Section 15.4 of {{RFC9110}}.
10061006

10071007
## Expiration and Caching {#security-ttl}
10081008

1009-
Expiration and caching information is conveyed via the `exp` and `ttl` claims as explained in [](#expiry-and-caching). Clients should check that both values are within reasonable ranges before requesting new Status List Tokens based on these values to prevent accidentally creating unreasonable amounts of requests for a specific URL. Status Issuers could accidentally or maliciously use this mechanism to effectively DDoS the contained URL of the Status Provider.
1009+
Expiration and caching information is conveyed via the `exp` and `ttl` claims as explained in [](#expiry-and-caching). Clients SHOULD check that both values are within reasonable ranges before requesting new Status List Tokens based on these values to prevent accidentally creating unreasonable amounts of requests for a specific URL. Status Issuers could accidentally or maliciously use this mechanism to effectively DDoS the contained URL of the Status Provider.
10101010

1011-
Concrete values for both claims highly depend on the use-case requirements and clients should be configured with lower/upper bounds for these values that fit their respective use-cases.
1011+
Reasonable values for both claims highly depend on the use-case requirements and clients SHOULD be configured with lower/upper bounds for these values that fit their respective use-cases.
10121012

10131013
## Status List Token Protection {#security-mac}
10141014

1015-
This specification allows both, digital signatures using asymmetric cryptography, and Message Authentication Codes (MAC) to be used to protect Status List Tokens. Implementers should only use MACs to secure the integrity of Status List Tokens if they fully understand the risks of MACs when compared to digital signatures and especially the requirements of their use-case scenarios. These use-cases typically represent deployments where Status Issuer and Relying Party have a trust relationship and the possibility to securely exchange keys out of band or are the same entity and no other entity needs to verify the Status List Token. We expect most deployments to use digital signatures for the protection of Status List Tokens and implementers should default to digital signatures if they are unsure.
1015+
This specification allows both, digital signatures using asymmetric cryptography, and Message Authentication Codes (MAC) to be used to protect Status List Tokens. Implementers SHOULD only use MACs to secure the integrity of Status List Tokens if they fully understand the risks of MACs when compared to digital signatures and especially the requirements of their use-case scenarios. These use-cases typically represent deployments where Status Issuer and Relying Party have a trust relationship and the possibility to securely exchange keys out of band or are the same entity and no other entity needs to verify the Status List Token. We expect most deployments to use digital signatures for the protection of Status List Tokens and implementers SHOULD default to digital signatures if they are unsure.
10161016

10171017
# Privacy Considerations {#privacy-considerations}
10181018

@@ -1042,7 +1042,7 @@ This malicious behavior can be detected by Relying Parties that request large am
10421042

10431043
## Observability of Relying Parties {#privacy-relying-party}
10441044

1045-
Once the Relying Party receives the Referenced Token, this enables them to request the Status List to validate its status through the provided `uri` parameter and look up the corresponding `index`. However, the Relying Party may persistently store the `uri` and `index` of the Referenced Token to request the Status List again at a later time. By doing so regularly, the Relying Party may create a profile of the Referenced Token's validity status. This behaviour may be intended as a feature, e.g. for an identity proofing (e.g. Know-Your-Customer process in finance industry) that requires regular validity checks, but might also be abused in cases where this is not intended and unknown to the Holder, e.g. profiling the suspension of a driving license or checking the employment status of an employee credential.
1045+
Once the Relying Party receives the Referenced Token, the Relying Party can request the Status List through the provided `uri` parameter and can validate the Referenced Token's status by looking up the corresponding `index`. However, the Relying Party may persistently store the `uri` and `index` of the Referenced Token to request the Status List again at a later time. By doing so regularly, the Relying Party may create a profile of the Referenced Token's validity status. This behaviour may be intended as a feature, e.g. for an identity proofing (e.g. Know-Your-Customer process in finance industry) that requires regular validity checks, but might also be abused in cases where this is not intended and unknown to the Holder, e.g. profiling the suspension of a driving license or checking the employment status of an employee credential.
10461046

10471047
This behaviour could be mitigated by:
10481048

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

10691069
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.
10701070

1071-
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:
1071+
To avoid privacy risks of 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:
10721072

10731073
- choose non-sequential, pseudo-random or random indices
10741074
- use decoy entries to obfuscate the real number of Referenced Tokens within a Status List
@@ -1092,7 +1092,7 @@ There are strong privacy concerns that have to be carefully taken into considera
10921092

10931093
## Status Types {#privacy-status-types}
10941094

1095-
As previously explained, there is the potential risk of observability by Relying Parties (see [](#privacy-relying-party)) and Outsiders (see [](#privacy-outsider)). That means that any Status Type that transports special information about a Referenced Token can leak information to other parties. This document defines one additional Status Type with "SUSPENDED" that conveys such additional information.
1095+
As previously explained, there is the potential risk of observability by Relying Parties (see [](#privacy-relying-party)) and Outsiders (see [](#privacy-outsider)). That means that any Status Type that transports information beyond the routine statuses VALID and INVALID about a Referenced Token can leak information to other parties. This document defines one additional Status Type with "SUSPENDED" that conveys such additional information, but in practice all statuses other than VALID and INVALID are likely to contain information with privacy implications.
10961096

10971097
A concrete example for "SUSPENDED" would be a driver's license, where the digital driver's license might still be useful to prove other information about its holder, but suspended could signal that it should not be considered valid in the scope of being allowed to drive a car. This case could be solved by either introducing a special status type, or by revoking the Referenced Token and re-issuing with changed attributes. For such a case, the status type suspended might be dangerous as it would leak the information of a suspended driver's license even if the driver's license is used as a mean of identification and not in the context of driving a car. This could also allow for the unwanted collection of statistical data on the status of driver's licenses.
10981098

@@ -1106,9 +1106,9 @@ The lifetime of a Status List Token depends on the lifetime of its Referenced To
11061106

11071107
## Linkability Mitigation {#implementation-linkability}
11081108

1109-
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.
1109+
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 the index value from becoming a possible source of correlation.
11101110

1111-
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.
1111+
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. Batch revocation of a batch of Referenced Tokens might reveal that they are all members of the same batch.
11121112

11131113
Beware, that this mechanism solves linkability issues between Relying Parties, but does not prevent traceability by Issuers.
11141114

@@ -1129,7 +1129,7 @@ The storage and transmission size of the Status Issuer's Status List Tokens depe
11291129

11301130
The Status List Issuer may increase the size of a Status List if it requires indices for additional Referenced Tokens. It is RECOMMENDED that the size of a Status List in bits is divisible in bytes (8 bits) without a remainder, i.e. `size-in-bits` % 8 = 0.
11311131

1132-
The Status List Issuer may divide its Referenced Tokens up into multiple Status Lists to reduce the transmission size of an individual Status List Token. This may be useful for setups where some entities operate in constrained environments, e.g. for mobile internet or embedded devices. The Status List Issuer may organize the Status List Tokens depending on the Referenced Token's expiry date to align their lifecycles and allow for easier retiring of Status List Tokens, however the Status Issuer must be aware of possible privacy risks due to correlations.
1132+
The Status List Issuer may divide its Referenced Tokens up into multiple Status Lists to reduce the transmission size of an individual Status List Token. This may be useful for ecosystems where some entities operate in constrained environments, e.g. for mobile internet or embedded devices. The Status List Issuer may organize the Status List Tokens depending on the Referenced Token's expiry date to align their lifecycles and allow for easier retiring of Status List Tokens, however the Status Issuer must be aware of possible privacy risks due to correlations.
11331133

11341134
## External Status Issuer
11351135

@@ -1157,7 +1157,7 @@ When fetching a Status List Token, Relying Parties must carefully evaluate how l
11571157

11581158
- After time of fetching, the Relying Party caches the Status List for time duration of `ttl` before making checks for updates. This method is RECOMMENDED to distribute the load for the Status Provider.
11591159
- After initial fetching, the Relying Party checks for updates at time of `iat` + `ttl`. This method ensures the most up-to-date information for critical use cases. The Relying Party should account a minimal offset due to the signing and distribution process of the Status Issuer.
1160-
- If no `ttl` is given, then Relying Party SHOULD check for updates latest after time of `exp`.
1160+
- If no `ttl` is given, then Relying Party SHOULD check for updates latest after the time of `exp`.
11611161

11621162
Ultimately, it's the Relying Parties decision how often to check for updates, ecosystems may define their own guidelines and policies for updating the Status List information. Clients should ensure that `exp` and `ttl` are within reasonable bounds before creating requests to get a fresh Status List Token (see [](#security-ttl) for more details).
11631163

@@ -1185,12 +1185,12 @@ The following diagram illustrates the relationship between these claims and how
11851185

11861186
## Relying Parties avoiding correlatable Information
11871187

1188-
If the Relying Party does not require the Referenced Token or the Status List Token, e.g. for subsequent status checks or audit trail, it is RECOMMENDED to delete correlatable information, in particular:
1188+
If the Relying Party does not require the Referenced Token or the Status List Token for further processing, it is RECOMMENDED to delete correlatable information, in particular:
11891189

1190-
- the `status` claim in the Referenced Token (after the presentation)
1190+
- the `status` claim in the Referenced Token (after the validation)
11911191
- the Status List Token itself (after expiration or update)
11921192

1193-
The Relying Party should instead only keep the relevant payload from the Referenced Token.
1193+
The Relying Party should instead only keep the needed fields from the Referenced Token.
11941194

11951195
## Status List Formats
11961196

@@ -1568,9 +1568,11 @@ for their valuable contributions, discussions and feedback to this specification
15681568
# Size comparison {#size-comparison}
15691569
{:unnumbered}
15701570

1571-
The following tables show a size comparison for a Status List (compressed byte array as defined in [](#status-list-byte-array) and a compressed Byte Array of UUIDs (as an approximation for a Certificate Revocation List). Readers must be aware that these are not sizes for complete Status List Tokens in JSON/CBOR nor Certificate Revocation Lists (CRLs), as they don't contain metadata, certificates and signatures.
1571+
The following tables show a size comparison for a Status List (compressed byte array as defined in [](#status-list-byte-array)) and a compressed Byte Array of UUIDs (as an approximation to the list of IDs of Referenced Tokens in a Certificate Revocation List). Readers must be aware that these are not sizes for complete Status List Tokens in JSON/CBOR nor Certificate Revocation Lists (CRLs), as they don't contain metadata, certificates and signatures.
15721572

1573-
## Status List size for varying sizes and revocation rates
1573+
If no further metadata is provided in CRLs, then these entries will be the main factors deciding on the overall size of a Status List Token and CRL respectively.
1574+
1575+
## Size of status lists for varying sizes and revocation rates
15741576
{:unnumbered}
15751577

15761578
| Size | 0.01% | 0.1% | 1% | 2% | 5% | 10% | 25% | 50% | 75% | 100% |
@@ -1580,7 +1582,7 @@ The following tables show a size comparison for a Status List (compressed byte a
15801582
| 100M | 38.3 KB | 213.0 KB | 1.3 MB | 2.2 MB | 4.3 MB | 6.6 MB | 10.0 MB | 11.9 MB | 10.0 MB | 11.9 KB |
15811583
{: title="Status List Size examples for varying sizes and revocation rates"}
15821584

1583-
## Compressed array of UUIDv4 (128 bit UUIDs) for varying sizes and revocation rates
1585+
## Size of compressed array of UUIDv4 (128 bit UUIDs) for varying sizes
15841586
{:unnumbered}
15851587

15861588
This is a simple approximation of a Certificate Revocation List using an array of UUIDs without any additional metadata (128 bit UUID per revoked entry).
@@ -1976,6 +1978,8 @@ CBOR encoding:
19761978
# Document History
19771979
{:numbered="false"}
19781980

1981+
\[\[ To be removed from the final specification \]\]
1982+
19791983
-14
19801984

19811985
* slightly restructure/clarify referenced token cose section

0 commit comments

Comments
 (0)