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
+25-21Lines changed: 25 additions & 21 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 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.
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
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.
1098
1098
@@ -1106,9 +1106,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.
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.
1110
1110
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.
1112
1112
1113
1113
Beware, that this mechanism solves linkability issues between Relying Parties, but does not prevent traceability by Issuers.
1114
1114
@@ -1129,7 +1129,7 @@ The storage and transmission size of the Status Issuer's Status List Tokens depe
1129
1129
1130
1130
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.
1131
1131
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.
1133
1133
1134
1134
## External Status Issuer
1135
1135
@@ -1157,7 +1157,7 @@ When fetching a Status List Token, Relying Parties must carefully evaluate how l
1157
1157
1158
1158
- 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.
1159
1159
- 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`.
1161
1161
1162
1162
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).
1163
1163
@@ -1185,12 +1185,12 @@ The following diagram illustrates the relationship between these claims and how
1185
1185
1186
1186
## Relying Parties avoiding correlatable Information
1187
1187
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 Tokenfor further processing, it is RECOMMENDED to delete correlatable information, in particular:
1189
1189
1190
-
- the `status` claim in the Referenced Token (after the presentation)
1190
+
- the `status` claim in the Referenced Token (after the validation)
1191
1191
- the Status List Token itself (after expiration or update)
1192
1192
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.
1194
1194
1195
1195
## Status List Formats
1196
1196
@@ -1568,9 +1568,11 @@ for their valuable contributions, discussions and feedback to this specification
1568
1568
# Size comparison {#size-comparison}
1569
1569
{:unnumbered}
1570
1570
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.
1572
1572
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
{: title="Status List Size examples for varying sizes and revocation rates"}
1582
1584
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
1584
1586
{:unnumbered}
1585
1587
1586
1588
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:
1976
1978
# Document History
1977
1979
{:numbered="false"}
1978
1980
1981
+
\[\[ To be removed from the final specification \]\]
0 commit comments