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-23Lines changed: 29 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -939,19 +939,19 @@ The following OID is defined for usage in the EKU extension
939
939
940
940
# Security Considerations {#Security}
941
941
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.
943
943
944
944
## Correct decoding and parsing of the encoded Status List
945
945
946
946
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.
947
947
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.
949
949
950
950
## Security Guidance for JWT and CWT
951
951
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}}.
953
953
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}}.
955
955
956
956
## Key Resolution and Trust Management {#key-management}
957
957
@@ -1002,17 +1002,17 @@ If the Issuer of the Referenced Token is a different entity than the Status Issu
1002
1002
1003
1003
## Redirection 3xx {#redirects}
1004
1004
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}}.
1006
1006
1007
1007
## Expiration and Caching {#security-ttl}
1008
1008
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.
1010
1010
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.
1012
1012
1013
1013
## Status List Token Protection {#security-mac}
1014
1014
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.
@@ -1042,7 +1042,7 @@ This malicious behavior can be detected by Relying Parties that request large am
1042
1042
1043
1043
## Observability of Relying Parties {#privacy-relying-party}
1044
1044
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.
1046
1046
1047
1047
This behaviour could be mitigated by:
1048
1048
@@ -1068,7 +1068,7 @@ The tuple of uri and index inside the Referenced Token are unique and therefore
1068
1068
1069
1069
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.
1070
1070
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:
1072
1072
1073
1073
- choose non-sequential, pseudo-random or random indices
1074
1074
- 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
1092
1092
1093
1093
## Status Types {#privacy-status-types}
1094
1094
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.
1096
1096
1097
1097
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.
1098
1098
@@ -1104,9 +1104,9 @@ The lifetime of a Status List Token depends on the lifetime of its Referenced To
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.
1108
1108
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.
1110
1110
1111
1111
Beware, that this mechanism solves linkability issues between Relying Parties, but does not prevent traceability by Issuers.
1112
1112
@@ -1127,7 +1127,7 @@ The storage and transmission size of the Status Issuer's Status List Tokens depe
1127
1127
1128
1128
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.
1129
1129
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.
1131
1131
1132
1132
## External Status Issuer
1133
1133
@@ -1155,7 +1155,7 @@ When fetching a Status List Token, Relying Parties must carefully evaluate how l
1155
1155
1156
1156
- 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.
1157
1157
- 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`.
1159
1159
1160
1160
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).
1161
1161
@@ -1183,12 +1183,12 @@ The following diagram illustrates the relationship between these claims and how
1183
1183
1184
1184
## Relying Parties avoiding correlatable Information
1185
1185
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 Tokenfor further processing, it is RECOMMENDED to delete correlatable information, in particular:
1187
1187
1188
-
- the `status` claim in the Referenced Token (after the presentation)
1188
+
- the `status` claim in the Referenced Token (after the validation)
1189
1189
- the Status List Token itself (after expiration or update)
1190
1190
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.
1192
1192
1193
1193
## Status List Formats
1194
1194
@@ -1563,18 +1563,22 @@ The following module adheres to ASN.1 specifications {{X.680}} and {{X.690}}.
1563
1563
1564
1564
# Size comparison {#size-comparison}
1565
1565
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.
1567
1567
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
{: 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"}
1576
1579
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}
1578
1582
1579
1583
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).
1580
1584
@@ -1583,7 +1587,7 @@ This is a simple approximation of a Certificate Revocation List using an array o
0 commit comments