Skip to content

Commit 9f74af2

Browse files
c2bopaulbastian
andauthored
genart review p2 (#317)
* genart review p2 * Apply suggestions from paul's review Co-authored-by: Paul Bastian <[email protected]> * Apply suggestions from code review * change language for size comparison tables --------- Co-authored-by: Paul Bastian <[email protected]>
1 parent 665a02c commit 9f74af2

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

draft-ietf-oauth-status-list.md

Lines changed: 29 additions & 23 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 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 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
Ecosystems that want to use other Status Types than "VALID" and "INVALID" should consider the possible leakage of data and profiling possibilities before doing so and evaluate if revocation and re-issuance might a better fit for their use-case.
10981098

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

11051105
## Linkability Mitigation {#implementation-linkability}
11061106

1107-
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.
1107+
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.
11081108

1109-
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.
1109+
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.
11101110

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

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

11281128
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.
11291129

1130-
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.
1130+
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.
11311131

11321132
## External Status Issuer
11331133

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

11561156
- 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.
11571157
- 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.
1158-
- If no `ttl` is given, then Relying Party SHOULD check for updates latest after time of `exp`.
1158+
- If no `ttl` is given, then Relying Party SHOULD check for updates latest after the time of `exp`.
11591159

11601160
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).
11611161

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

11841184
## Relying Parties avoiding correlatable Information
11851185

1186-
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:
1186+
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:
11871187

1188-
- the `status` claim in the Referenced Token (after the presentation)
1188+
- the `status` claim in the Referenced Token (after the validation)
11891189
- the Status List Token itself (after expiration or update)
11901190

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

11931193
## Status List Formats
11941194

@@ -1563,18 +1563,22 @@ The following module adheres to ASN.1 specifications {{X.680}} and {{X.690}}.
15631563

15641564
# Size comparison {#size-comparison}
15651565

1566-
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.
1566+
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.
15671567

1568-
## Status List size for varying sizes and revocation rates
1568+
If no further metadata is provided in Status List Tokens or CRLs, then the size of Status Lists or arrays of Certificate ids (represented as UUIDs) will be the main factors deciding on the overall size of a Status List Token or CRL respectively.
1569+
1570+
## Size of Status Lists for varying amount of entries and revocation rates
1571+
{:unnumbered}
15691572

15701573
| Size | 0.01% | 0.1% | 1% | 2% | 5% | 10% | 25% | 50% | 75% | 100% |
15711574
| 100k | 81 B | 252 B | 1.4 KB | 2.3 KB | 4.5 KB | 6.9 KB | 10.2 KB | 12.2 KB | 10.2 KB | 35 B |
15721575
| 1M | 442 B | 2.2 KB | 13.7 KB | 23.0 KB | 43.9 KB | 67.6 KB | 102.2 KB | 122.1 KB | 102.4 KB | 144 B |
15731576
| 10M | 3.8 KB | 21.1 KB | 135.4 KB | 230.0 KB | 437.0 KB | 672.9 KB | 1023.4 KB | 1.2 MB | 1023.5 KB | 1.2 KB |
15741577
| 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 |
1575-
{: title="Status List Size examples for varying sizes and revocation rates"}
1578+
{: title="Status List Size examples for varying amount of entries and revocation rates"}
15761579

1577-
## Compressed array of UUIDv4 (128 bit UUIDs) for varying sizes and revocation rates
1580+
## Size of compressed array of UUIDv4 (128 bit UUIDs) for varying amount of entries and revocation rates
1581+
{:unnumbered}
15781582

15791583
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).
15801584

@@ -1583,7 +1587,7 @@ This is a simple approximation of a Certificate Revocation List using an array o
15831587
| 1M | 1.6 KB | 16.4 KB | 157.7 KB | 310.4 KB | 781 KB | 1.5 MB | 3.8 MB | 7.6 MB | 11.4 MB | 15.3 MB |
15841588
| 10M | 15.3 KB | 155.9 KB | 1.5 MB | 3.1 MB | 7.6 MB | 15.2 MB | 38.2 MB | 76.3 MB | 114.4 MB | 152.6 MB |
15851589
| 100M | 157.6 KB | 1.5 MB | 15.3 MB | 30.5 MB | 76.3 MB | 152.6 MB | 381.4 MB | 762.9 MB | 1.1 GB | 1.5 GB |
1586-
{: title="Size examples for 128 bit UUIDs for varying sizes and revocation rates"}
1590+
{: title="Size examples for 128 bit UUIDs for varying amount of entries and revocation rates"}
15871591

15881592
# Test vectors for Status List encoding {#test-vectors}
15891593

@@ -1964,6 +1968,8 @@ CBOR encoding:
19641968
# Document History
19651969
{:numbered="false"}
19661970

1971+
\[\[ To be removed from the final specification \]\]
1972+
19671973
-14
19681974

19691975
* remove cose_sign1 tag from statuslist in cwt form examples

0 commit comments

Comments
 (0)