rfc9729v2.txt | rfc9729.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) D. Schinazi | Internet Engineering Task Force (IETF) D. Schinazi | |||
Request for Comments: 9729 Google LLC | Request for Comments: 9729 Google LLC | |||
Category: Standards Track D. Oliver | Category: Standards Track D. Oliver | |||
ISSN: 2070-1721 Guardian Project | ISSN: 2070-1721 Guardian Project | |||
J. Hoyland | J. Hoyland | |||
Cloudflare Inc. | Cloudflare Inc. | |||
January 2025 | February 2025 | |||
The Concealed HTTP Authentication Scheme | The Concealed HTTP Authentication Scheme | |||
Abstract | Abstract | |||
Most HTTP authentication schemes are probeable in the sense that it | Most HTTP authentication schemes are probeable in the sense that it | |||
is possible for an unauthenticated client to probe whether an origin | is possible for an unauthenticated client to probe whether an origin | |||
serves resources that require authentication. It is possible for an | serves resources that require authentication. It is possible for an | |||
origin to hide the fact that it requires authentication by not | origin to hide the fact that it requires authentication by not | |||
generating Unauthorized status codes; however, that only works with | generating Unauthorized status codes; however, that only works with | |||
skipping to change at line 206 ¶ | skipping to change at line 206 ¶ | |||
scheme portion of a URI as defined in Section 3.1 of [URI]. | scheme portion of a URI as defined in Section 3.1 of [URI]. | |||
Host: The host for this request, encoded using the format of the | Host: The host for this request, encoded using the format of the | |||
host portion of a URI as defined in Section 3.2.2 of [URI]. | host portion of a URI as defined in Section 3.2.2 of [URI]. | |||
Port: The port for this request, encoded in network byte order. | Port: The port for this request, encoded in network byte order. | |||
Note that the port is either included in the URI or is the default | Note that the port is either included in the URI or is the default | |||
port for the scheme in use; see Section 3.2.3 of [URI]. | port for the scheme in use; see Section 3.2.3 of [URI]. | |||
Realm: The realm of authentication that is sent in the realm | Realm: The realm of authentication that is sent in the realm | |||
authentication parameter (Section 11.5 of [HTTP]). If the realm | authentication parameter (see Section 11.5 of [HTTP]). If the | |||
authentication parameter is not present, this SHALL be empty. | realm authentication parameter is not present, this SHALL be | |||
This document does not define a means for the origin to | empty. This document does not define a means for the origin to | |||
communicate a realm to the client. If a client is not configured | communicate a realm to the client. If a client is not configured | |||
to use a specific realm, it SHALL use an empty realm and SHALL NOT | to use a specific realm, it SHALL use an empty realm and SHALL NOT | |||
send the realm authentication parameter. | send the realm authentication parameter. | |||
The Signature Algorithm and Port fields are encoded as unsigned | The Signature Algorithm and Port fields are encoded as unsigned | |||
16-bit integers in network byte order. The Key ID, Public Key, | 16-bit integers in network byte order. The Key ID, Public Key, | |||
Scheme, Host, and Realm fields are length-prefixed strings; they are | Scheme, Host, and Realm fields are length-prefixed strings; they are | |||
preceded by a Length field that represents their length in bytes. | preceded by a Length field that represents their length in bytes. | |||
These length fields are encoded using the variable-length integer | These length fields are encoded using the variable-length integer | |||
encoding from Section 16 of [QUIC] and MUST be encoded in the minimum | encoding from Section 16 of [QUIC] and MUST be encoded in the minimum | |||
skipping to change at line 329 ¶ | skipping to change at line 329 ¶ | |||
concealed-byte-sequence-param-value = *( ALPHA / DIGIT / "-" / "_" ) | concealed-byte-sequence-param-value = *( ALPHA / DIGIT / "-" / "_" ) | |||
concealed-integer-param-value = %x31-39 1*4( DIGIT ) / "0" | concealed-integer-param-value = %x31-39 1*4( DIGIT ) / "0" | |||
Figure 4: Authentication Parameter Value ABNF | Figure 4: Authentication Parameter Value ABNF | |||
4.1. The k Parameter | 4.1. The k Parameter | |||
The REQUIRED "k" (key ID) Parameter is a byte sequence that | The REQUIRED "k" (key ID) Parameter is a byte sequence that | |||
identifies which key the client wishes to use to authenticate. This | identifies which key the client wishes to use to authenticate. This | |||
is used by the backend to point to an entry in a server-side database | is used by the backend to point to an entry in a server-side database | |||
of known keys; see Section 6.3. | of known keys (see Section 6.3). | |||
4.2. The a Parameter | 4.2. The a Parameter | |||
The REQUIRED "a" (public key) Parameter is a byte sequence that | The REQUIRED "a" (public key) Parameter is a byte sequence that | |||
specifies the public key used by the server to validate the signature | specifies the public key used by the server to validate the signature | |||
provided by the client. This avoids key confusion issues (see | provided by the client. This avoids key confusion issues (see | |||
[SEEMS-LEGIT]). The encoding of the public key is described in | [SEEMS-LEGIT]). The encoding of the public key is described in | |||
Section 3.1.1. | Section 3.1.1. | |||
4.3. The p Parameter | 4.3. The p Parameter | |||
The REQUIRED "p" (proof) Parameter is a byte sequence that specifies | The REQUIRED "p" (proof) Parameter is a byte sequence that specifies | |||
the proof that the client provides to attest to possessing the | the proof that the client provides to attest to possessing the | |||
credential that matches its key ID. | credential that matches its key ID. | |||
4.4. The s Parameter | 4.4. The s Parameter | |||
The REQUIRED "s" (signature) Parameter is an integer that specifies | The REQUIRED "s" (signature scheme) Parameter is an integer that | |||
the signature scheme used to compute the proof transmitted in the p | specifies the signature scheme used to compute the proof transmitted | |||
Parameter. Its value is an integer between 0 and 65535 inclusive | in the p Parameter. Its value is an integer between 0 and 65535 | |||
from the IANA "TLS SignatureScheme" registry maintained at | inclusive from the IANA "TLS SignatureScheme" registry maintained at | |||
<https://www.iana.org/assignments/tls-parameters/tls- | <https://www.iana.org/assignments/tls-parameters/tls- | |||
parameters.xhtml#tls-signaturescheme>. | parameters.xhtml#tls-signaturescheme>. | |||
4.5. The v Parameter | 4.5. The v Parameter | |||
The REQUIRED "v" (verification) Parameter is a byte sequence that | The REQUIRED "v" (verification) Parameter is a byte sequence that | |||
specifies the verification that the client provides to attest to | specifies the verification that the client provides to attest to | |||
possessing the key exporter output (see Section 3.2 for details). | possessing the key exporter output (see Section 3.2 for details). | |||
This avoids issues with signature schemes where certain keys can | This avoids issues with signature schemes where certain keys can | |||
generate signatures that are valid for multiple inputs (see | generate signatures that are valid for multiple inputs (see | |||
End of changes. 4 change blocks. | ||||
9 lines changed or deleted | 9 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |